簡體   English   中英

捕獲幀內的按鍵

[英]capture key press within frame

這似乎是一個簡單的行為,但我很難做到這一點。 我正在開發繪制數據的軟件。 我想在用戶點擊回車時重繪圖表。 更准確地說,我想在用戶點擊回車並且沒有選擇文本字段時繪制圖表; 但現在只要用戶點擊回車,我就會對繪圖感到滿意。

我嘗試先在框架上安裝一個基本的KeyListener ,但這不起作用,因為JFrame孩子,而不是框架,接收事件。

然后我嘗試使用KeyEventDispatcher ,但它被證明是一個過於全球化的概念。 我可以一次在屏幕上顯示兩個圖表,並且可以關閉舊圖表或用新圖表替換舊圖表。 使用KeyEventDispatcher ,我無法簡單地知道我想在一次打開的多個繪圖中激活哪個 plot,並且當前打開的繪圖可能不是我實例化密鑰調度程序時打開的繪圖。 我知道這個解決方案仍然可以工作,但它需要我存儲額外的數據,以了解 plot 當前處於活動狀態的哪些不適合程序架構。

似乎應該有一種更簡單的方法來捕獲分派給JFrame/JPanel或任何JFrame's任何KeyEvents 但忽略分派到其他幀的事件。 優選一種可以添加到框架,從而在框架被處理時自動被處理的方法。 任何人都可以提出一個比我嘗試過的更簡單的方法嗎?

不要使用 KeyListener。

鍵綁定添加到圖形面板。

This works very well

this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "fecharAction");
    this.getRootPane().getActionMap().put("fecharAction", new AbstractAction() {
        private static final long serialVersionUID = 1L;
        @Override
        public void actionPerformed(ActionEvent e) {
            int resp = JOptionPane.showConfirmDialog(MainForm.this, "Encerrar sistema?", "Confirmação", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            if (resp == 0) {
                MainForm.this.setVisible(false);
                MainForm.this.dispose();
            }
        }
    });

暫無
暫無

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

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