我正在使用Vaadin Framework创建一个Web应用程序,但却遇到了一个表元素(Filter表)。我的表有一个列,每行包含ComboBox组件,现在表中的组合框正常工作,但是我无法点击该列来选择表值。可以通过单击表中的行来选择行。组合框和列边界之间的空间不能通过单击组合框本身来选择。 我搜索了很多,发现https://vaadin.com/forum/#!/thread/988648/988647,试图实施黑板插件,但没有成功。我的代码大致在下面。
PagedFilterTable<IndexedContainer> filterTable;
`public static PagedFilterTable<IndexedContainer> buildPagedFilterTable()
{
filterTable = new PagedFilterTable<IndexedContainer>();
filterTable.setFilterBarVisible(true);
filterTable.setSelectable(true);
filterTable.setImmediate(true);
filterTable.setMultiSelect(true);
filterTable.setRowHeaderMode(RowHeaderMode.INDEX);
filterTable.setColumnCollapsingAllowed(true);
filterTable.setContainerDataSource(buildContainer());
filterTable.setVisibleColumns((Object[]) new String[] {
"Clear", "Name" });
return filterTable;
}`
static int f=1;
private static Container buildContainer() {
IndexedContainer cont = new IndexedContainer();
cont.addContainerProperty("Clear", Component.class, null);// added combobox component
cont.addContainerProperty("Name", String.class, null);
//populating table with database values (table rows will be = no. of rows in db)
Connection con;
ResultSet rs;
Statement cs;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","CGoracle");
cs=con.createStatement();
co=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = cs.executeQuery("select * from ECS_CURRENT");
while(rs.next())
{
ComboBox select_reason_return=new ComboBox();
select_reason_return.setInputPrompt("Select");
select_reason_return.setVisible(true);
select_reason_return.setNullSelectionAllowed(false);
select_reason_return.setInvalidAllowed(false);
select_reason_return.addItem("1.A/c Closed/Transfered");
select_reason_return.addItem("2.No Such A/c");
select_reason_return.addItem("3.Clear");
select_reason_return.select("3.Clear");
select_reason_return.addListener(new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
String reason=select_reason_return.getValue().toString();
rowId=FilterTable.getValue();
Notification.show("row id is ="+rowId);
}
});
cont.addItem(f);
cont.getContainerProperty(f, "Clear").setValue(select_reason_return);
cont.getContainerProperty(f, "Name").setValue(rs.getString(10));
f++;
}
}
catch (SQLException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cont;
}
If it helps, I'm posting screenshots, Image 1: if I select anywhere other than the combobox, it is returning row id properly.Image 2: Though I'm selecting an item from combobox, table row is not getting seleced, hence it's not returning me row id. 除了黑板插件之外还有其他选择吗?如果没有,那么请帮我解决这个问题。
答案 0 :(得分:0)
这不是最好的方法,但是,你可以通过以下方式实现:在ComboBox上放置一个监听器,以便知道它何时被点击。然后,在这种情况下,您获得与ComboBox关联的行,以最终获得与该行关联的ID。
获得行ID后,使用Table.select()方法选择项目行。
这不是最好的方法,如果你有很多行,你会感觉它的响应速度很慢,但这是我发现让它运行的唯一程序化方法。希望它有所帮助。