【问题标题】:Button in JTable cell not click-ableJTable 单元格中的按钮不可点击
【发布时间】:2014-03-24 08:11:40
【问题描述】:

我有一个 jtable,第一列有 jbuttons。但是,当我尝试单击按钮时,什么也没有发生。将鼠标悬停在按钮上也不会改变它的阴影以显示它是可点击的..

我在 Java Applet 中运行它。

我正在使用此处的按钮列类: http://www.camick.com/java/source/ButtonColumn.java

这是我自己插入的代码

tablemodel = new DefaultTableModel();
//PnlThinClientTable.COLUMNS is an array of strings with the titles of the columns
tablemodel.setColumnIdentifiers(PnlThinClientTable.COLUMNS);
JTable table = new JTable(tablemodel);


table.setEnabled(false);
table.setDefaultRenderer(table.getColumnClass(5), new CustomTblCellRenderer());
table.setBackground(Color.WHITE);

Action wakeUpRow = new AbstractAction() {

    @Override
    public void actionPerformed(ActionEvent e){
        JTable table = (JTable)e.getSource();
        int modelRow = Integer.valueOf( e.getActionCommand() );         
        System.out.println("Action Performed");
    }
};
// Main.hm_language.get(Language.WAKE_ON_LAN) returns the title of the column i'm interested in
table.getColumn(Main.hm_language.get(Language.WAKE_ON_LAN)).setCellRenderer(new ButtonColumn(table,wakeUpRow,0));
table.getColumn(Main.hm_language.get(Language.WAKE_ON_LAN)).setCellEditor(new ButtonColumn(table, wakeUpRow, 0));

【问题讨论】:

  • 你的问题在下一行table.setEnabled(false);。这使您的JTable 被禁用,因为您不能在您的专栏中使用JButton
  • 谢谢!有没有办法只启用所选列,因为我不希望其他列可编辑
  • 是的,你可以。覆盖DefaultTableModelisCellEditable(int row, int column)方法
  • 设法修复它。 @override public boolean isCellEditable(int row, int col)。如果您发布答案,我会对其进行评分。谢谢

标签: java swing applet jtable jbutton


【解决方案1】:

感谢@alex2410 的解决方案

我必须确保单元格是可编辑的

这可以通过在声明时扩展 Table 并覆盖 isCellEditable(int row, int col): boolean 方法来完成, 或者在我的情况下,我在应用于列的单元格编辑器中覆盖了 isCellEditable(EventObject e):boolean,

因此我正在使用的单元格编辑器中的 sn-p 将是

@Override
public boolean isCellEditable(EventObject e){
    return true;
}

这是因为应用编辑器的所有单元格都需要可编辑,因为在我的例子中它们都是按钮。

【讨论】:

    【解决方案2】:

    回答“如何使第一列可编辑”的评论是如何

    class MyTableModel extends AbstractTableModel {
        public boolean isCellEditable(int row, int col) {
            if (col == 1) {
                return true;
            } else {
                return false;
            }
        }
    }
    

    无论如何,我留下 How to Use Tables 文档以备不时之需。

    还有这篇文章可能会有所帮助:How to make a table (Jtable) not editable

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2011-07-30
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多