2012-03-23 2 views
1

В настоящее время у меня возникают проблемы с поиском индекса/местоположения кнопки в таблице, которую я генерирую.Поиск местоположения кнопки в таблице

private class Node 
    { 
    String id; 
    String[] data; 
    List<Node> children = new ArrayList<Node>(); 
} 

private Node root = buildTree(); 

private Node buildTree() 
    { 
     Node root = new Node(); 
     root.id = "Main Component"; 
     root.data = new String[]{ "example", "example", "example", "example", "example", "example",}; 

    Node child1 = new Node(); 
    child1.id = "Part 1"; 
    child1.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    root.children.add(child1); 

    Node child11 = new Node(); 
    child11.id = "Part 1-1"; 
    child11.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    child1.children.add(child11); 

    Node child2 = new Node(); 
    child2.id = "Part 2"; 
    child2.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    root.children.add(child2); 

    Node child21 = new Node(); 
    child21.id = "Part 2-1"; 
    child21.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    child2.children.add(child21); 

    Node child22 = new Node(); 
    child22.id = "Part 2-2"; 
    child22.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    child2.children.add(child22); 

    Node child3 = new Node(); 
    child3.id = "Part 3"; 
    child3.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    root.children.add(child3); 

    Node child31 = new Node(); 
    child31.id = "Part 3-1"; 
    child31.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    child3.children.add(child31); 

    Node child32 = new Node(); 
    child32.id = "Part 3-2"; 
    child32.data = new String[]{ "example", "example", "example", "example", "example", "example", "example"}; 
    child3.children.add(child32); 

    return root; 
} 

Это моя модель. Идея здесь в том, что я добавлю строки в таблицу с помощью нескольких функций, но я застрял на раннем этапе.

private void addRow(Node nde) 
{ 
    HorizontalPanel buttonPanel = new HorizontalPanel(); 

    ListBox comboBox = new ListBox(); 
    comboBox.addItem("option1"); 
    comboBox.addItem("option2"); 
    comboBox.addItem("option3"); 
    comboBox.addItem("option4"); 
    comboBox.addItem("option5"); 

    Button addRowButton = new Button("+/-"); 

    addRowButton.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      //Get the button from the click event 
      //Get the row from the button - could I possibly set a class to each button that equals the id of the element being added so that I could just pull the id from the button 
      //Use the row to get the first column - returns a panel 
      //Get the components on the panel, find the label, and get the text 
      String id = ""; 
      clickFunction(id); 
     } 
    }); 

    buttonPanel.add(addRowButton); 
    buttonPanel.add(new Label(nde.id)); 

    int row = flexTable.getRowCount(); 
    flexTable.setWidget(row,0,buttonPanel); 
    flexTable.setWidget(row,1,comboBox); 
    flexTable.setText(row,2,nde.data[0]); 
    flexTable.setText(row,3,nde.data[1]); 
    flexTable.setText(row,4,nde.data[2]); 
    flexTable.setText(row,5,nde.data[3]); 
    flexTable.setText(row,6,nde.data[4]); 
    flexTable.setText(row,7,nde.data[5]); 
} 

Это, как я добавление строк, есть горизонтальная панель в первом столбце каждой строки, первый элемент представляет собой кнопку, а второй заголовок, который соответствует идентификатору независимо узел отображаются в этой строке. Мне нужен способ получить этот идентификатор, установить его равным строке и передать его в мой clickFunction.

private void clickFunction(String curRowId) 
{ 
    Node rowNode = findNode(root, curRowId); 

      //need to determine whether or not the tree needs to be expanded or minimized. 

      for(Node n : rowNode.children) { 
     addRow(n); 
    } 

} 

clickFunction использует идентификатор, переданный в моем findNode функции

private Node findNode(Node nde, String id) 
{ 
    if(nde.id.equals(id)) 
    { 
     return nde; 
    } 

    for(Node n : nde.children) 
    { 
     Node rtrn = findNode(n, id); 
     if(rtrn != null) 
     { 
      return rtrn; 
     } 
    } 

    return null; 
} 

который называется рекурсивно сказать код, который нуждается в узле его дети продлены. Я надеюсь, что это было не слишком долго, я хотел убедиться, что я включил всю соответствующую информацию и доказал, что я действительно прилагаю все усилия, чтобы исправить проблемы, которые у меня есть. Его определенно разочаровывает, когда я так много работал, но не могу понять, казалось бы, простую проблему.

Любая информация очень ценится! Большое спасибо заранее!

ответ

0

Чтобы установить идентификатор для кнопки, вы можете сделать что-то вроде этого ...

Button b = new Button(); 
DOM.setElementAttribute(b.getElement(), "id", "my-button-id"); 

Затем вы должны быть в состоянии соответствовать его в вашем методе findNode.

См. http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/DOM.html для получения дополнительной информации о работе с DOM.

+0

Если я создаю кнопку и задаю идентификатор, будет ли передавать этот идентификатор в обработчик кликов? Должен ли я просто установить id равным строке и передать это в onClick? – Anthony

+0

@ Энтони. Я не совсем уверен в этом ... вы можете попробовать установить идентификатор, аналогичный тому, что я сказал в моем примере, а затем передать идентификатор в ваш clickFunction и передать результаты обратно? –

+0

'final Кнопка addRowButton = новая кнопка (« +/- »); \t \t DOM.setElementProperty (addRowButton.getElement(), "id", nde.id); \t \t addRowButton.addClickHandler (новый ClickHandler() { \t \t \t общественного недействительными OnClick (ClickEvent событие) { \t \t \t \t Строка ID = DOM.getElementProperty (addRowButton.getElement(), "идентификатор"); \t \t \t \t clickFunction (ID); \t \t \t} \t \t}); ' , что в конечном итоге работает п или я. – Anthony

Смежные вопросы