我的桌子上有JComboBox。如果用户从ComboBox中选择“其他”,我需要隐藏表中的第3列。
代码
final TableColumn col5 = jTable1.getColumnModel().getColumn(4);
col5.setPreferredWidth(150);
final String EDIT = "edit";
String[] options = new String[]{"Font Issue", "Text Issue", "Image Issue", "AI Issue", "Others"};
JComboBox combo1 = new JComboBox(options);
JComboBox combo2 = new JComboBox(options);
col5.setCellEditor(new DefaultCellEditor(combo1));
col5.setCellRenderer(new ComboBoxRenderer(combo2));
combo2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String newSelection = col5.getCellEditor().getCellEditorValue().toString();
String strOthersRemark = "";
if (newSelection.equalsIgnoreCase("others")) {
jTable1.removeColumn(jTable1.getColumnModel().getColumn(3));
}
}
});
代码工作正常,但有一个小问题。当用户选择其他时,它会删除整个列而不是行。例如
Row|Column1 | Column2 | Column3 | Column4 |
1 | Test11 | Test12 | Test13 | Test14 |
2 | Test21 | Test22 | Test23 | Test24 |
3 | Test31 | Test32 | Test33 | Others |
当用户选择Column4为Others
时,它应该隐藏Test33
,而不是整个Column3
。我的代码删除了整个Column3
。如果我只想隐藏Test33
答案 0 :(得分:2)
您要删除列:
jTable1.removeColumn(jTable1.getColumnModel().getColumn(3));
相反,您应该更改某个单元格的值。
请改用此方法:table.setValueAt()
。 Java doc:setValueAt
在你的例子中:
jTable1.setValueAt("", 3, 3);