」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的 KeyListener 無法在 JPanel 中運作?

為什麼我的 KeyListener 無法在 JPanel 中運作?

發佈於2024-11-08
瀏覽:643

Why Aren\'t My KeyListeners Working in My JPanel?

JPanel 中KeyListeners 無回應:常見問題

當使用KeyListeners 偵測JPanel 中的按鍵時,開發人員經常遇到這樣的問題:偵聽器無法觸發所需的操作。此問題可能由多個因素引起。

焦點元件約束

KeyListener 依賴將自身附加到焦點元件才能正常運作。預設情況下,焦點不會自動授予 JPanel。若要解決此問題,請在 JPanel 的建構子中明確設定可聚焦性並要求焦點:

public JPanel extends JPanel implements KeyListener {

    public JPanel() {
        this.addKeyListener(this);
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

替代方案:按鍵綁定

雖然手動設定焦點是可行的解決方案,但更可靠的方法是利用按鍵綁定。鍵綁定提供了一種靈活的機制,用於將擊鍵與特定操作相關聯。要在 JPanel 中實現鍵綁定:

public JPanel extends JPanel implements ActionListener {

    public JPanel() {
        setupKeyBinding();
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

    private void setupKeyBinding() {
        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
        InputMap inMap = getInputMap(condition);
        ActionMap actMap = getActionMap();

        inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left");
        actMap.put("Left", new leftAction());
    }

    private class leftAction extends AbstractAction {

        public void actionPerformed(ActionEvent e) {
            System.out.println("test");
        }
    }
}

在此範例中,leftAction 類別定義按下左箭頭鍵時要執行的動作(在本例中,將「test」列印到控制台)。

最新教學 更多>
  • 了解 Java 中的靜態實用方法
    了解 Java 中的靜態實用方法
    在现代软件开发中,非常重视干净、可重用和有效的编码。 Java 中的一项功能对实现这一目标大有帮助,称为静态实用方法。本文将探讨什么是静态实用方法、它们的好处、常见用例以及有效实现这些方法的最佳实践。 什么是静态实用方法? 静态实用方法是属于类的方法,而不是属于类的实例。这些方法是使...
    程式設計 發佈於2024-11-08
  • ## 如何在 JavaScript 中限制函數執行:自訂解決方案與函式庫解決方案
    ## 如何在 JavaScript 中限制函數執行:自訂解決方案與函式庫解決方案
    透過自訂實作實作 JavaScript 中的簡單節流使用 JavaScript 時,控制函數執行速率至關重要。節流函數限制函數呼叫的頻率,防止繁重的處理或重複的使用者操作。 在這篇文章中,我們提出了一個簡單的自訂節流函數來實現此目的,而不依賴 Lodash 或 Underscore 等外部函式庫。 ...
    程式設計 發佈於2024-11-08
  • 了解 WebSocket:React 開發人員綜合指南
    了解 WebSocket:React 開發人員綜合指南
    Understanding WebSockets: A Comprehensive Guide for React Developers In today’s world of modern web applications, real-time communication is ...
    程式設計 發佈於2024-11-08
  • 如何在 macOS 上安裝並啟用 Imagick for PHP
    如何在 macOS 上安裝並啟用 Imagick for PHP
    如果您在 macOS 上工作並且需要安裝 Imagick for PHP 8.3,則可能會遇到預設安裝較舊版本 PHP(例如 PHP 8.0)的問題。在這篇文章中,我將引導您完成確保 Imagick 已安裝並針對 PHP 8.3 正確配置的步驟。 步驟 1:透過 Homebrew ...
    程式設計 發佈於2024-11-08
  • 如何使用 JavaScript 為物件陣列新增附加屬性?
    如何使用 JavaScript 為物件陣列新增附加屬性?
    擴展具有附加屬性的物件陣列程式設計中普遍存在的任務涉及使用附加屬性來增強現有物件陣列。為了說明這個概念,請考慮包含兩個元素的物件陣列:Object {Results:Array[2]} Results:Array[2] [0-1] 0:Object id=1 name: &quo...
    程式設計 發佈於2024-11-08
  • 如何解決 CSS 中可變字體的文字筆畫問題?
    如何解決 CSS 中可變字體的文字筆畫問題?
    文本描邊難題:解決CSS 相容性問題使用-webkit-text-lines 創建引人注目的文本效果是網頁設計師的一項基本技術。但是,當將此屬性與可變字體一起使用時,可能會出現意外的筆劃行為。這種不一致不僅限於 Chrome,而是不同瀏覽器中更普遍的問題。 問題的癥結:可變字體和筆畫衝突可變字體具有...
    程式設計 發佈於2024-11-08
  • C++ 中的私有虛擬方法:平衡封裝與重寫
    C++ 中的私有虛擬方法:平衡封裝與重寫
    了解 C 中私有虛擬方法的好處 在物件導向程式設計中,私有方法封裝實作細節並限制其在一個班級。然而,在 C 中,虛函數提供後期綁定並允許物件的多態行為。透過結合這些概念,私有虛擬方法提供了獨特的優勢。 考慮以下用法,其中 HTMLDocument 繼承自多個基底類別:class HTMLDocume...
    程式設計 發佈於2024-11-08
  • 齋浦爾資料科學研究所:傳統與科技的邂逅
    齋浦爾資料科學研究所:傳統與科技的邂逅
    斋浦尔,粉红之城,长期以来一直是一座拥有丰富文化遗产、雄伟宫殿和充满活力的传统的城市,但这座城市的另一个特征是教育和技术进步。这是通过斋浦尔的几个数据科学研究所推出的,通过这些机构引导学生和专业人士进入快速变化的技术世界。 这些机构融合了传统与创新,在培养这座城市的未来科技人才方面发挥着重要作用。在...
    程式設計 發佈於2024-11-08
  • 如何根據多個條件過濾 JavaScript 物件數組?
    如何根據多個條件過濾 JavaScript 物件數組?
    基於多個條件過濾JavaScript中的數組問題陳述給定一個對象數組和一個過濾器對象,目標是過濾和根據篩選器中指定的多個條件簡化陣列。但是,當過濾器包含多個屬性時,會出現一個特定問題。 建議的解決方案考慮以下程式碼段:function filterUsers(users, filter) { v...
    程式設計 發佈於2024-11-08
  • 理解 Laravel 11 中 pluck() 和 select() 之間的差異
    理解 Laravel 11 中 pluck() 和 select() 之間的差異
    Laravel 是最受歡迎的 PHP 架構之一,提供了一系列強大的資料操作方法。其中,pluck() 和 select() 在處理集合時經常使用。儘管它們看起來相似,但它們的目的卻不同。在本文中,我們將探討這兩種方法之間的差異,解釋何時使用每種方法,並提供實際的編碼範例來示範它們在 Laravel ...
    程式設計 發佈於2024-11-08
  • 什麼是 Cloudflare? Web 效能與安全性公司概述
    什麼是 Cloudflare? Web 效能與安全性公司概述
    在快節奏的數位世界中,網站的速度、安全性和可靠性對於企業和使用者都至關重要。 Cloudflare 已成為確保網站平穩、安全和高效運作的基石。但 Cloudflare 到底是什麼?為什麼它成為網站所有者如此重要的工具?讓我們深入了解它的作用和產品。 Cloudflare 簡介 Cl...
    程式設計 發佈於2024-11-08
  • 如何最佳化 MySQL 索引效能以加快查詢速度?
    如何最佳化 MySQL 索引效能以加快查詢速度?
    優化MySQL索引效能要有效檢查MySQL索引的效能,可以使用以下查詢:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1 = val GROUP BY col1 ORDER BY col...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中將資料加入文件?
    如何在 PHP 中將資料加入文件?
    PHP 中的檔案追加與前置 在 PHP 中使用「a」(append ) 模式。然而,寫入文件的開頭需要更細緻的方法。 在所描述的場景中,「r」模式(讀寫)允許添加數據,但會覆蓋先前的內容。為了避免這種限制,需要更複雜的技術。 使用 file_put_contents() 的解決方案該解決方案涉及將 ...
    程式設計 發佈於2024-11-08
  • 為什麼在 C++ 中列印函數名稱會導致“1”?
    為什麼在 C++ 中列印函數名稱會導致“1”?
    在不調用的情況下計算函數:解開謎團想像:您正在編碼,而不是調用帶括號的函數,您只需列印它的名稱即可。令人驚訝的是,結果總是 1。這種非常規的方法讓您感到困惑,無論是關於 1 還是缺少預期的函數指標。 讓我們深入研究程式碼的複雜度:#include <iostream> using nam...
    程式設計 發佈於2024-11-08
  • 軟體開發中的左移測試:完整指南
    軟體開發中的左移測試:完整指南
    左移测试是一种旨在通过将测试流程移至开发生命周期的早期,在问题升级之前解决问题来提高软件质量的策略。传统上,测试是在开发周期即将结束时进行的,但这通常会由于较晚发现缺陷而导致更高的成本和更长的时间。通过“左移”,团队旨在及早预防问题,培养主动而非被动的质量保证方法。 随着敏捷和 DevOps 方法...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3