键绑定与setMnemonic,setDisplayedMnemonic和setLabelFor

时间:2014-04-14 23:51:43

标签: java swing keyboard-shortcuts key-bindings

我觉得自己就像糖果店里的孩子一样 - 再次试图抓住关键绑定我偶然发现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);

但关键绑定是更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

我要回答我自己的问题。如果我犯了任何错误或误解或误导,我希望能从某人那里找到答案。提前提问:我在下面弄乱了什么吗?

键绑定提供了做某些事情的唯一方法。例如......

我需要按键才能显示textarea的底线,无论哪个组件具有焦点,然后选择' main'的内容。文本框。

以下语句将物理F2按键链接到表单上的逻辑按钮 根据{{​​1}}的要求,将在一个扩展JumpToEndOfOutput的类(名为AbstractAction)中定义操作。

getActionMap

(注意 txaOutput.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(getKeyStroke("F2"), "jumpToEndOfOutput"); txaOutput.getActionMap().put("jumpToEndOfOutput", jumpToEndOfOutput); 的使用,否则F2不能总是做所需的事情:

WHEN_IN_FOCUSED_WINDOW

...

// 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();

有没有更短的方法来实现这一目标?