簡體   English   中英

鍵綁定與setMnemonic,setDisplayedMnemonic和setLabelFor

[英]Key bindings vs. setMnemonic, setDisplayedMnemonic, and setLabelFor

我感覺就像糖果店里的孩子一樣-再次嘗試處理鍵綁定時,我偶然發現了setMnemonic() (在Netbeans表單設計器及其大量生成的代碼中)和[尤其是!] setDisplayedMnemonic() / setActionFor()對(來自谷歌搜索“可以讓jlabel有助記符”),這似乎是天賜之物。

我所知道的是,以下代碼僅使我的最新應用更加用戶友好,因為它無需使用鼠標/觸摸板。

btnRemoveScratchWords.setMnemonic(VK_C);
btnSearch.setMnemonic(VK_H);
btnClearOutput.setMnemonic(VK_O);
btnExit.setMnemonic(VK_X);
btnHelp.setMnemonic(VK_H);

lblPattern.setDisplayedMnemonic(VK_P);
lblPattern.setLabelFor(txtPattern);

lblLegal.setDisplayedMnemonic(VK_L);
lblLegal.setLabelFor(txtLegal);

lblMust.setDisplayedMnemonic(VK_R);
lblMust.setLabelFor(txtRequiredLetters);

lblMinimumPointsPerLetter.setDisplayedMnemonic(VK_R);
lblMinimumPointsPerLetter.setLabelFor(txtMinScore);

但是,鍵綁定是一種更好的方法嗎?

我要回答我自己的問題。 如果我犯了任何錯誤或被誤解或誤傳,我希望能從某人身上找到答案。 預先提問:我在下面弄亂了什么嗎?

按鍵綁定是做某些事情的唯一方法。 例如...

我需要按鍵以使文本區域的底行得以顯示,而不管哪個組件具有焦點,然后選擇“主要”文本框的內容。

下面的語句將物理F2按鍵鏈接到表單上的邏輯按鈕,該按鈕將在getActionMap要求的擴展AbstractAction的類(名為JumpToEndOfOutput )中定義。

   txaOutput.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(getKeyStroke("F2"),
                                "jumpToEndOfOutput");
   txaOutput.getActionMap().put("jumpToEndOfOutput", jumpToEndOfOutput);

(請注意,使用WHEN_IN_FOCUSED_WINDOW ,否則F2不能總是做所需的事情):

// in constructor for form... make action listener for button

   btnJumpToEndOfOutput.addActionListener( new ButtonListener() );

...

// inner class avoids anonymous inner class, for clarity

    class ButtonListener implements ActionListener // simulates click of logical form button
    {
        public void actionPerformed( ActionEvent bp )
        {    
          txaOutput.selectAll();
          txtPattern.grabFocus();
          txtPattern.select(0, 99);
        } 
    } 

...

// back to constructor... make action object to listen for F2 keystroke

      JumpToEndOfOutput jumpToEndOfOutput = new JumpToEndOfOutput();

...

// class required for getActionMap

   class JumpToEndOfOutput extends AbstractAction // catches physical F2 keystroke
    {
        public void actionPerformed(ActionEvent e) 
        {
           btnJumpToEndOfOutput.doClick(); 
        } 
    }

有沒有更短的方法來做到這一點?

暫無
暫無

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

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