JTable单元格中的按钮不可单击

时间:2014-03-24 08:11:40

标签: java swing applet jtable jbutton

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

我在Java Applet中运行它。

我从这里使用Button Column Class: 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));

2 个答案:

答案 0 :(得分:2)

感谢@ alex2410的解决方案

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

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

因此我正在使用的单元格编辑器中的片段是

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

这就像应用编辑器的所有单元格都需要可编辑一样,因为它们都是我的所有按钮。

答案 1 :(得分:0)

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

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