[英]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.