В настоящее время у меня возникают проблемы с поиском индекса/местоположения кнопки в таблице, которую я генерирую.Поиск местоположения кнопки в таблице
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;
}
который называется рекурсивно сказать код, который нуждается в узле его дети продлены. Я надеюсь, что это было не слишком долго, я хотел убедиться, что я включил всю соответствующую информацию и доказал, что я действительно прилагаю все усилия, чтобы исправить проблемы, которые у меня есть. Его определенно разочаровывает, когда я так много работал, но не могу понять, казалось бы, простую проблему.
Любая информация очень ценится! Большое спасибо заранее!
Если я создаю кнопку и задаю идентификатор, будет ли передавать этот идентификатор в обработчик кликов? Должен ли я просто установить id равным строке и передать это в onClick? – Anthony
@ Энтони. Я не совсем уверен в этом ... вы можете попробовать установить идентификатор, аналогичный тому, что я сказал в моем примере, а затем передать идентификатор в ваш clickFunction и передать результаты обратно? –
'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