有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java密钥绑定与setMnemonic、setDisplayedMnemonic和setLabelFor的比较

我感觉自己就像一个糖果店的孩子——在再次尝试处理键绑定时,我偶然发现了setMnemonic()(在Netbeans表单设计器及其生成的大量代码中)和[尤其是!]setDisplayedMnemonic()/setActionFor()对(来自谷歌搜索“can jlabel have memmonic”),这似乎是天赐之物

我只知道下面的代码让我的最新应用程序更加人性化,因为它不需要鼠标/触摸板

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) 个答案

  1. # 1 楼答案

    我要回答我自己的问题。如果我犯了任何错误,或被曲解或误解,我希望能从别人那里找到答案。提前提问:我把下面的事情搞砸了吗

    键绑定提供了执行某些操作的唯一方法。例如

    我需要一个键来显示文本区域的底线,不管哪个组件有焦点,然后选择“main”文本框的内容

    下面的语句将物理F2按键链接到窗体上的逻辑按钮 动作将在一个类(名为JumpToEndOfOutput)中定义,该类根据getActionMap的要求扩展AbstractAction

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

    有没有更短的方法来实现这一点