使用自定义表模型无法通过table.getColumn方法获取列索引 [英] Unable to get column index with table.getColumn method using custom table Model

查看:95
本文介绍了使用自定义表模型无法通过table.getColumn方法获取列索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆