java - 单个 JTable 单元格中的多个对象

标签 java swing jtable listener defaulttablemodel

是否可以在一个 JTable 单元格中包含多个对象,如下所示,其中第一行的每个单元格中有两个 JLabels

enter image description here

我在这个示例中遇到的问题是我无法向任何 JLabels(Icons) 添加任何监听器。我的猜测是我需要更改 CellRenderer 之外的其他内容?

public class JTableIcons extends JPanel {

    private DefaultTableModel model;
    private JTable table;

    public JTableIcons() {
        initModel();
        initTable();
        this.setLayout(new BorderLayout());
        this.add(table, BorderLayout.CENTER);
    }

    class MyRenderer implements TableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {

            JPanel panel = new JPanel();
            if (row == 0) {
                JLabel lblCol = new JLabel("Column:" + column);
                Icon icon = UIManager.getIcon("OptionPane.errorIcon");
                JLabel lblIcon = new JLabel();
                lblIcon.setIcon(icon);
                panel.add(lblIcon);
                panel.add(lblCol);
            } else {
                JLabel lbl = new JLabel("(" + row + "," + column + ")");
                panel.add(lbl);
            }
            panel.setOpaque(false);
            return panel;
        }
    }

    private void initTable() {
        table = new JTable(model);
        table.setDefaultRenderer(Object.class, new MyRenderer());
        table.setShowGrid(true);
        table.setGridColor(Color.gray);
        table.setRowHeight(80);
    }

    private void initModel() {
        String[] cols = { "", "", "" };
        Object[][] rows = { { "", "", "" }, { "", "", "" }, { "", "", "" }, { "", "", "" } };
        model = new DefaultTableModel(rows, cols);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(new JTableIcons());
                f.setVisible(true);
                f.setSize(new Dimension(500, 350));
                f.setLocationRelativeTo(null);
            }
        });
    }
}

最佳答案

I would like to add two or more objects,

当一个组件就可以时,不要使用两个组件。 renderer在这个example实现 Icon 接口(interface)以利用文本和图标的灵活相对定位。必要时,将多个组件添加到合适的轻量级容器中,例如JPanel

and then also have different listeners to the added objects.

对于交互性,请使用 custom TableCellEditor。这个example管理面板中的单选按钮。

关于java - 单个 JTable 单元格中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464899/

相关文章:

java - 如何在 TimeoutException 上获得 future 的堆栈跟踪

java - Spring Boot集成测试(业务层)

swing - 从 javaFx 窗口调用 java swing JFrame

java - 表结构更改后在 jtable 中保留自定义排序

java - Java Swing 的 JTable 样式或主题

java - 更改单击的 JTable 单元格的背景颜色

java - 如何从 Google Play 服务库仅导入一个包

java - 如何在 ATG 存储库结构中表示 Oracle View

java - 删除 jbutton 中的图像图标

java - JTable焦点移动查询?