【发布时间】:2016-11-06 16:36:41
【问题描述】:
这是我第一次使用 java 绑定,所以我创建了这个方法来帮助我。
public static final void BindTableToFields(JTable Table, Object[] Fields) {
for (Object Field : Fields) {
if (Field instanceof JTextField) {
JTextField jTextField = (JTextField) Field;
BeanProperty<JTable, Object> tableBeanProperty;
BeanProperty<JTextField, String> textFieldProperty;
Binding<JTable, Object, JTextField, String> binding;
tableBeanProperty = BeanProperty.create("selectedElement." + jTextField.getText());
textFieldProperty = BeanProperty.create("text");
binding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, Table, tableBeanProperty, jTextField, textFieldProperty);
binding.bind();
}
}
return;
}
现在,当我转到我设计的框架并将 JTextField 文本属性设置为“column1”时,绑定成功。
我尝试使用这个 sn-p 代码重命名我的所有 JTable 列名称。
public static ResultSet FillTableDataFromQuery(String Query, JTable table) throws SQLException {
ResultSet rs = SQLTools.ExecuteQuery(Query);
DefaultTableModel defaultTableModel = new DefaultTableModel();
// Filling table model with data from database
// ... (cutting irrelevant code)
table.setModel(defaultTableModel);
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumn(table.getColumnName(i)).setIdentifier(heads[i]);
}
return rs;
}
我正在填充JTable的数据然后我使用绑定方法。
public final void InitFrame() throws SQLException {
jtable1RS = FillTableDataFromQuery("SELECT * FROM users ;", jTable1);
JTableSQLTool.HideColumns(jTable1, new int[] { 0, 1, 3 });
JTableSQLTool.BindTableToFields(jTable1, new Object[] { JTF_ID, JTF_PAss, JTF_Profile, JTF_User });
}
下面这张图说明了我的结果。
现在我的问题是,有没有办法将表列属性名称从selectedElement.column1 更改为selectedElement.ID?这将使我的设计更加重要。
我尝试在第二种方法中使用此代码将column1 重命名为ID,但它不起作用。
for(int i = 0; i < table.getColumnCount(); i++) {
table.getColumn(table.getColumnName(i)).setIdentifier(heads[i]);
}
【问题讨论】:
-
heads 是一个数组,包含我想要的所有列属性新文本
-
经过一天的逆向工程后,我发现 jtable 上的每个选定行都是一个 hashmap,绑定转换器将收到这个 hashmap 的结构为 column[i]-->value[i] for each元素,我认为这就是为什么我们要录制 {selectedElement.column[i]} 。现在有没有办法访问这个哈希映射并改变它的结构??在表创建阶段?
-
不是很清楚问题是什么。您是否尝试更改表头中的文本?当您选择一行时,数据会转到文本字段?文本字段是否应该编辑表格中的选定数据?什么不起作用?也有点难读,我建议在命名变量、方法和类时遵循camel case。
-
亲爱的@Matthew,我很抱歉我的英语不好。 selectedElement." + jTextField.getText() 在运行时将是:selectedElement.column0 这是表中第一个列的绑定属性我想将第一列的这个属性重命名为更重要的东西,比如:selectedElement.ID 在那里有什么办法吗?