Нахождение расположения кнопки в таблице - PullRequest
1 голос
/ 23 марта 2012

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

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;
}

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

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

1 Ответ

0 голосов
/ 23 марта 2012

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

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.

...