当前位置: 首页 > 知识库问答 >
问题:

需要在JTable单元格中启动一个新的JPanel on click事件。

姚钊
2023-03-14

用法:我有一个有10列的JTable。它变得非常混乱,所以我想将5列移动到一个新的面板,该面板将在单击原始JTable最后一列中的advanced options图标时启动。

关于如何将来自JPanel的数据与JTable中的行关联的示例代码将非常受欢迎。

共有1个答案

司徒嘉祥
2023-03-14

为了在单击单元格时显示弹出窗口,您需要一个单元格编辑器类。这个类的主要用途是为单元格提供自定义编辑器,但是您可以使用它在单击单元格时触发某些操作:

public class InfoCellEditor extends AbstractCellEditor implements TableCellEditor {

    @Override
    public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        InfoObject info = (InfoObject) value;
        editButton = new JButton(new InfoAction(info));
        editButton.setText("INFO");
        editButton.setEnabled(true);
    }

    private class InfoAction extends AbstractAction {

        InfoObject info;

        public InfoAction(InfoObject info) {
            super();
            this.info = info;
        }

        public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(null, info.toString());
            stopCellEditing();
        }
    }
}

然后,扩展JTable类并实现GetColumnClassIscelledTable方法:

public class MyTable extends JTable {

    public MyTable() {
        super();
        setDefaultEditor(InfoObject.class, new InfoCellEditor());
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        if(columnIndex == 4)
            return InfoObject.class;
        else
            return String.class;
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        if(column == 4)
            return true;
        else
            return false;
    }
}

最后,您应该确保InfoObject实例插入到第5列。您还可以为该列的某些自定义可视化表示实现TableCellRenderer。

Object headers = new Object[COLUMN_COUNT];
Object cells[][] = new Object[ROW_COUNT][];
...
cells[0][4] = new InfoObject(data[0]);
cells[1][4] = new InfoObject(data[1]);
table.setModel(new DefaultTableModel(cells, headers));
table.getModel().fireTableDataChanged();
table.setVisible();
 类似资料:
  • 我在更新JTable的单元格值时遇到了一个问题。我想做的是在从JTable中选择一个特定的单元格之后,我应该能够进行编辑,并且该操作必须反映后端的数据库。我在用HSQL。我的表有4列,有一个PK。请给我一个替代和/或提供一些代码,替换的*。我是新来的,只是个初学者。

  • 我有一个问题,我无法解决单独和帮助其他话题在那里。找到了一些相似的,但它没有帮助。 我的问题有点棘手,我想,我会尽力解释清楚。 因此,我得到了一个包含两列的JTable,列2和列3是可编辑的,列4是这两个列的乘积(col4=col2*col3)。我要做的是,当我编辑第2或第3列时,第4列将自动更新它的值。我理解这一点,但不完全理解。只有当我完成MouseClick编辑时单元格才会更新。如果编辑是通

  • 问题内容: 即将选择单元格时,是否会触发任何事件?有ListSelectionListener,但是它具有仅在选择发生后才触发的事件。我需要某种方法来取消选择事件,并且使用ListSelectionListener并不容易,因为选择已经发生,并且我需要具有一些状态变量来指示选择是正常的还是取消先前的选择。 有没有办法关闭选择通知?但是,这不是100%好的解决方案(如果某些侦听器将选择状态保存在本地

  • 我对JTable有一个问题,因为最近我开始使用Swing,但我对这个API不太了解。 我想在double的单元格中用点替换逗号。 怎么做呢?

  • 总结: 在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按选项卡,我需要将单元格的焦点放在下一个单元格上。 问题:当我编辑单元格的值,然后按Tab键时,焦点丢失。我在网上做了一些搜索,发现这是因为在每个选项卡上按Jtable会重新加载自己。 可能的解决方案我正在考虑的一个解决方案是获取我正在处理的单元格的索引,在全局变量中也是如此,然后按Tab键可以获取下一个单元格的索引,并

  • 问题内容: 如何在单元格中居中放置值?我正在使用Netbeans。 问题答案: 您需要自定义渲染器。要居中第一列,您可以执行以下操作: 要使所有列都以String数据为中心,您可以执行以下操作: