gpt4 book ai didi

java - 无法使用自定义表模型通过 table.getColumn 方法获取列索引

转载 作者:行者123 更新时间:2023-11-30 05:51:52 25 4
gpt4 key购买 nike

我使用 AbstractTableModel 创建了一个自定义 TableModel。我能够填充我的 JTable。但是我的 JTable 有一个按钮列说“Button1”。所以我使用 CellRenderer 方法向列添加按钮,使用 CellEditor 添加操作,但我在 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)

我收到此错误是因为我无法从我的自定义表格中获取该列。但是有人可以帮我解决这个问题吗。

我正在使用以下 source执行此任务。在这个来源中,他们使用的是 DefaultTableModel,而在我的例子中,我使用的是 AbstractTableModel

最佳答案

为了通过标识符检索列,您必须使用 TableColumn.setIdentifier() 设置一个.

编辑:

请注意,根据 TableColumn.getIdentifier() 的规范:

If the identifier is null, getIdentifier() returns getHeaderValue as a default.

这就是它在链接示例中的工作方式。

编辑:

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();
}
});
}
}

关于java - 无法使用自定义表模型通过 table.getColumn 方法获取列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12381497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com