Java 未触发JTable键事件

Java 未触发JTable键事件,java,swing,netbeans-7,keyevent,Java,Swing,Netbeans 7,Keyevent,我正在为我的专栏(ButtonColumns)使用TableCellEditor,如下所示。 当我输入向下键时,与Jtable关联的键事件不会被触发。关于这个障碍,请指导我,提前表示感谢。以下SSCCE如下所示 class ButtonEditor_Utility extends DefaultCellEditor { protected JButton button; public ButtonEditor_Utility() { button.setActionCommand(tab

我正在为我的专栏(ButtonColumns)使用TableCellEditor,如下所示。 当我输入向下键时,与Jtable关联的键事件不会被触发。关于这个障碍,请指导我,提前表示感谢。以下SSCCE如下所示

class ButtonEditor_Utility extends DefaultCellEditor {

protected JButton button;



public ButtonEditor_Utility() {
button.setActionCommand(tableName);
button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            fireEditingStopped();
        }
    });
}

public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {
    if (isSelected) {
        button.setForeground(table.getSelectionForeground());
        button.setBackground(table.getSelectionBackground());
    } else {
        button.setForeground(table.getForeground());
        button.setBackground(table.getBackground());
    }

    label = (value == null) ? "" : value.toString();
    button.setText(label);
    isPushed = true;
    return button;
}



public boolean stopCellEditing() {
    isPushed = false;
    return super.stopCellEditing();
}

protected void fireEditingStopped() {
    super.fireEditingStopped();
}
}

//按下向下键时,下面的事件没有响应 //谁的密码是40

    private void tblDetailInfoKeyPressed(java.awt.event.KeyEvent evt){                                         
    // TODO add your handling code here:
    if (evt.getKeyCode() == 40) {

        int rowId = tblDetailInfo.getRowCount() - 1;

        setSelectedRow(rowId);
        tblDetailInfo.setCellSelectionEnabled(true);
        tblDetailInfo.changeSelection(rowId, 0, false, false);
        tblDetailInfo.requestFocus();
        tblDetailInfo.scrollRectToVisible(new Rectangle(tblDetailInfo.getCellRect(rowId, 0, true)));
        AddDetailRow();

    }
}  

   private void formWindowOpened(java.awt.event.WindowEvent evt){                      AddButtonColumn(); }

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {

            Test test = new Test();


            test.setVisible(true);
        }
    });
} }

}

使用实际的
TableCellEditor
,例如@camickr,而不是试图强制将
JLabel
KeyEvent
用作表格单元格编辑器。这说明了在
JTable
中使用的一种方法。其优点是,您可以熟悉导航(箭头键)和激活(空格键)。

使用实际的
表格单元格编辑器,如@camickr,而不是试图强制使用
JLabel
KeyEvent
。这说明了在
JTable
中使用的一种方法。优点是您可以获得导航(箭头键)和激活(空格键)的所有熟悉信息。

不可编译。不自给自足。简而言之,这是一个延伸。无法理解您的评论,那么您使用的首字母缩写词不理解。SSCCE=简短的、自包含的、可编译的示例。@Marko Topolnik此代码中的兼容性是什么?如果这么简单,为什么不提供一个SSCCE。不可编译。不自给自足。简而言之,这是一个延伸。无法理解您的评论,那么您使用的首字母缩写词不理解。SSCCE=简短的、自包含的、可编译的示例。@Marko Topolnik此代码中的兼容性是什么?如果它这么简单,为什么不提供一个SSCCE呢。
    private void tblDetailInfoKeyPressed(java.awt.event.KeyEvent evt){                                         
    // TODO add your handling code here:
    if (evt.getKeyCode() == 40) {

        int rowId = tblDetailInfo.getRowCount() - 1;

        setSelectedRow(rowId);
        tblDetailInfo.setCellSelectionEnabled(true);
        tblDetailInfo.changeSelection(rowId, 0, false, false);
        tblDetailInfo.requestFocus();
        tblDetailInfo.scrollRectToVisible(new Rectangle(tblDetailInfo.getCellRect(rowId, 0, true)));
        AddDetailRow();

    }
}  

   private void formWindowOpened(java.awt.event.WindowEvent evt){                      AddButtonColumn(); }

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {

            Test test = new Test();


            test.setVisible(true);
        }
    });
} }