簡體   English   中英

JTable單元格編輯可以消耗按鍵嗎?

[英]Can JTable cell edit consume key strokes?

在我的程序中,有一個帶有許多加速器的JMenu和一個可編輯的JTable。 問題是,在編輯JTable時,加速鍵仍會被觸發。

例如,如果我在jtable單元格中輸入字母“ n”,則也會觸發“ next”菜單選項。

如何使jtable單元編輯器專門使用擊鍵?

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import java.awt.event.KeyEvent;
import java.awt.Toolkit;

public class SampleClass{

    public SampleClass(){

       JFrame frame = new JFrame();
       JMenuBar menuBar = new JMenuBar();
       JMenu menu = new JMenu();
       JMenuItem item = new JMenuItem();
       item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, 0));
       item.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Toolkit.getDefaultToolkit().beep();
            }
        });
        JTable table = new JTable(new Object[][]{{"Hello","World"},{"Goodbye","World"}}, new String[]{"A","B"});    
           menu.add(item);
           menuBar.add(menu);
           frame.setJMenuBar(menuBar);           
           frame.add(table);
           frame.pack();
           frame.show();
        }

        public static void main(String[] args){
             new SampleClass();
        } 
}

編輯上表中的任何單元格,有一個菜單項設置為使用加速器“ n”發出提示音。

由於對JTable進行了相當奇怪的密鑰處理,所以這是一個bug(我認為它已經在很久以前修復過了……tsssee)。 它在按下的keyEvent上開始在processKeyBinding中進行編輯-如果autoStartEdits為true(默認情況下為true),然后將該鍵傳遞給editComponent。 因此,歸根結底,如果editingComponent使用了密鑰,那么密鑰將被使用。 TextComponents在已鍵入但未按下的鍵上消耗一個鍵...允許按下的鍵沿調度鏈向上移動,直到到達菜單。

一種變通方法(請注意:所有hack都是骯臟的,並且可能具有不可預見的/不可預見的副作用!)是重寫表的processKeyBinding並在表開始編輯時使用該鍵:

@Override
protected boolean processKeyBinding(KeyStroke ks,
        KeyEvent e, int condition, boolean pressed) {
    boolean result = super.processKeyBinding(ks, e, condition, pressed);
    if (isEditing() && pressed) return true;
    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM