使用自定义表模型无法通过table.getColumn方法获取列索引 [英] Unable to get column index with table.getColumn method using custom table Model
问题描述
我已经使用AbstractTableModel创建了一个自定义TableModel.我可以填充我的JTable.但是我的JTable的按钮列显示为"Button1".因此,我使用CellRenderer方法向列添加按钮,并使用CellEditor添加操作,但是在LINE:3处出现异常.
I have created a custom TableModel using AbstractTableModel. I am able to populate my JTable. But my JTable has a button column say "Button1". So I am using CellRenderer method to add buttons to column and CellEditor to add actions, but I am getting exception at LINE:3.
CustomModelForTable customTableModel = new CustomModelForTable(colNames, data);
tableA = new JTable(customTableModel);
**LINE:3**
tableA.getColumn("Button1").setCellRenderer(new JButtonRendererClass());
tableA.getColumn("Button1").setCellEditor(new ButtonEditor(new JCheckBox()));
我收到以下错误.
java.lang.IllegalArgumentException: Identifier not found
at javax.swing.table.DefaultTableColumnModel.getColumnIndex(DefaultTableColumnModel.java:265)
我收到此错误,因为我无法从自定义表中获取列.但是有人可以帮我解决这个问题.
I am getting this error because I am not able to get the Column from my custom Table. But can some one help me out with this issue.
我正在使用以下 来源 执行此任务.在此资源中,他们使用的是DefaultTableModel,就像我使用的是AbstractTableModel
.
推荐答案
In order to retrieve columns by identifier, you have to set one using TableColumn.setIdentifier().
请注意,根据TableColumn.getIdentifier()
的规范:
如果标识符为null,则getIdentifier()返回getHeaderValue作为 默认.
If the identifier is null, getIdentifier() returns getHeaderValue as a default.
这就是链接示例中的工作方式.
That is how it works in the linked example.
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.GridLayout;
public class TableDemo extends JPanel {
public TableDemo() {
super(new GridLayout(1,0));
JTable table = new JTable(new MyTableModel());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
table.getColumn("Column1").setCellRenderer(new TestCellRenderer());
table.getColumn("Column2").setCellRenderer(new TestCellRenderer());
}
class TestCellRenderer extends DefaultTableCellRenderer{ }
class MyTableModel extends AbstractTableModel {
private String[] columnNames = { "Column1", "Column2" };
private Object[][] data = { { "1", "1" }, { "2", "2" } };
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableDemo newContentPane = new TableDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
这篇关于使用自定义表模型无法通过table.getColumn方法获取列索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!