java - JTable 中的可点击 JButton,并想知道他们点击了哪一行

标签 java swing jtable jbutton tablecelleditor

我在最后一列的 JTable 中有一个 JButton,当客户端单击它时,它将显示一个 JFrame。但我不知道如何获取该行以便获取该行中的对象并将其发送给 JFrame 构造函数?

这是我的 table :

table = new JTable(model);
    JTableHeader tableHeader = table.getTableHeader();
    tableHeaderRenderer = table.getTableHeader().getDefaultRenderer();
    tableHeader.setDefaultRenderer(new TableCellRenderer() {
        private JLabel label;
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (selectedColumn == value) {
                label = (JLabel) tableHeaderRenderer.getTableCellRendererComponent(table,
                        value, true, true, row, column);
                label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                label.setBorder(BorderFactory.createCompoundBorder(label.getBorder(), 
                          BorderFactory.createEmptyBorder(0, 5, 0, 0)));
                label.setHorizontalAlignment(SwingConstants.LEFT);
            } else {
                label = (JLabel) tableHeaderRenderer.getTableCellRendererComponent(table,
                        value, false, false, row, column);
                label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                label.setBorder(BorderFactory.createCompoundBorder(label.getBorder(), 
                          BorderFactory.createEmptyBorder(0, 5, 0, 0)));
                label.setHorizontalAlignment(SwingConstants.CENTER);
            }
            return label;
        }
    });
    table.getColumnModel().getColumn(3).setCellRenderer(new TableCellRenderer() {
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            JPanel buttonPanel = new JPanel(new BorderLayout());
            buttonPanel.setBackground(Color.white);
            JButton button = Shorter.button("Details", true);
            buttonPanel.add(button);
            return buttonPanel;
        }
    });
    table.getColumnModel().getColumn(3).setCellEditor(new TableCellEditor() {
        public boolean stopCellEditing() {return false;}
        public boolean shouldSelectCell(EventObject arg0) {return false;}
        public void removeCellEditorListener(CellEditorListener arg0) {}
        public boolean isCellEditable(EventObject arg0) {return true;}
        public Object getCellEditorValue() {return null;}
        public void cancelCellEditing() {}
        public void addCellEditorListener(CellEditorListener arg0) {}
        public Component getTableCellEditorComponent(JTable arg0, Object arg1,
                boolean arg2, int arg3, int arg4) {
            JFrame frame = new JFrame();
            frame.setVisible(true);
            return null;}
    });

加载框架时,我想知道选择了哪一行添加到框架构造函数...

最佳答案

But I don't know how I can get the row so I can get the object in the row and send it to JFrame constructor?

三个选择

  1. 来自 JButton inside a JTable in the last column 的事件必须从 JTables view 返回正确的坐标,在这种情况下,您必须将 View 转换为模型JTables View

    • 排序

    • 过滤

    • 列重新排序

    • 列被隐藏(从 JTables View 中删除)

  2. (和/或)将 ListSelectionListener 添加到 JTable

  3. Mouse Events 也可以返回,阅读官方 Oracle tutorial How to use Tables - Specifying Tool Tips for Cells for working code example

关于java - JTable 中的可点击 JButton,并想知道他们点击了哪一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857286/

相关文章:

java - 如果在java中使用smack Api和openfire,可以显示powerpoint并在客户端聊天中滑动它

java - 使用其中的乘法从另一个数组填充一个数组

java - 在与主线程不同的另一个线程中启动 swing gui,以在计算时更新 jtextarea

java - 线程空指针异常

java - JTable 中带复选框的多行选择

java - JTABLE,当我清除所有行时,如果选择了一行,该行仍然出现在那里

java - 如何在Linux上使用JPL(双向Java/Prolog接口(interface))?

java - 如何将smartGWT(表示层)与Spring服务集成?

java - Toolkit.getDefaultToolkit().createImage() 与 ImageIO.read()

java - 表示 Color 对象时为 JTable 中的单个单元格着色