我开发了一个基本的自定义JTableModel,如下所示
public class CustomTableModel extends DefaultTableModel {
List<MyClass> data;
public CustomTableModel(List<MyClass> data) {
this.data = data;
}
public Class<?> getColumnClass(int columnIndex) {
return MyClass.class;
}
public MyClass getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex);
}
// ...
}
然后,我使用一个基本的自定义JTableCellRenderer,如下所示
public class CustomTableCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
MyClass myClass = (MyClass)value;
lbl.setText(myClass.getString());
return this;
}
}
我也有一个自定义的JPanel,它显示以下各种信息
public class MyPanel extends JPanel {
private MyClass myClass;
public MyPanel(MyClass myClass) {
// initialize components
}
public setMyClass(MyClass myClass) {
this.myClass = myClass;
updateFields();
}
private void updateFields() {
this.fieldString.setText(myClass == null ? "" : myClass.getString());
// ...
}
}
最后,我使用一个表格列出我的数据,并使用自定义面板显示所选数据的详细信息。
public class JCustomFrame extends JFrame {
public JCustomFrame(List<MyClass> data) {
// ...
JTable table = new JTable(new CustomTableModel(data));
table.setDefaultRenderer(MyClass.class, new CustomTableCellRenderer());
}
}
我要完成的工作是从表中获取选定的MyClass,而不管排序如何。
我尝试了ListSelectionListener,但是这些方法除了选择的索引外不返回其他任何内容。即使我有索引,如果表已排序,我的模型也不是很复杂,并且会返回错误的对象。
...即使我有索引,如果表已排序,我的模型也不是很复杂,并且会返回错误的对象...
您必须使用:
JTable.convertRowIndexToModel(int viewIndex)
根据视图将行的索引映射到基础TableModel。如果模型的内容未排序,则模型和视图索引相同。
使用该索引,您可以访问表模型并查看所需的对象。
注意表排序和此方法一起在Java 1.6中引入
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句