为所有领域设定焦点

时间:2011-02-12 00:11:14

标签: java


我注意到我可以使用getName()作为技巧的一部分。 What is java.awt.Component.getName() and setName() used for? 但我真的不知道从哪里开始。我应该使用什么类型的监听器(假设文本字段/或框当前正在闪烁/选中)


这是我之前的问题,谢谢你的帮助。 How do I use requestFocus in a Java JFrame GUI?

我意识到对于我正在创建的每个组件(Textfield),我必须插入一个像requestFocus(或使用transferFocus)的语句。 是否可以将此政策应用于所有字段???

我有几个文本字段和ComboBox。我遇到的问题是我不想为每个字段/框编写方法。

例如,我写了一个这样的方法

private JTextField getFirstNameEntry() {
.... do something
}

因为我的导师会像这样编写他的程序

private JPanel getJContentPane() {
        jContentPane = new JPanel();
        jContentPane.setLayout(new java.awt.FlowLayout(FlowLayout.LEADING));


        jContentPane.add(makeLabel(" First Name *", 100, 20));
        jContentPane.add(getFirstNameEntry(), null);

        jContentPane.add(makeLabel(" Middle Initial", 100, 20));
        jContentPane.add(getMiddleInitialEntry(), null);
// etc

        return jContentPane;

但是,为了节省冗余(这是我最初的动机),比如说我有一个盒子,我只需在上面的方法中添加以下代码:getJContentPane()

titleBox = new JComboBox(new String[]{"Mr.","Mrs.","Ms.","Dr.","Prof.","Rev."});
jContentPane.add(titleBox);

但是这样做,我仍然需要创建一个方法来做addItemListener

  private void setComboBoxFocus() {
      titleBox.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent e){
                    if(e.getStateChange() == ItemEvent.SELECTED)
                    {
                        String titleSelected = titleBox.getSelectedItem().toString();
                        System.out.println(titleSelected);
                        titleBox.transferFocus();
                    }
                }
            });

      }

然而,这根本不能真正节省冗余。如果我要添加多个ComboBox,我将不得不编写另一个类似的方法。事实上,即使在一个ComboBox(titleBox)的情况下,我仍然会为titleBox编写一个方法。

所以我的问题是:有没有办法编写一个可以将焦点调用到所有的通用方法(可能是一个用于ComboBox类型)?

谢谢你,很抱歉这篇长篇文章。

1 个答案:

答案 0 :(得分:2)

为什么不在JComboBox方法中使用setComboBoxFocus()参数,该方法允许您将该侦听器设置为您可能拥有的任何 JComboBox?像这样:

private void setComboBoxFocus(JComboBox box) {
    box.addItemListener(
          new ItemListener(){
              public void itemStateChanged(ItemEvent e){
                  if(e.getStateChange() == ItemEvent.SELECTED)
                  {
                      String titleSelected = box.getSelectedItem().toString();
                      System.out.println(titleSelected);
                      box.transferFocus();
                  }
              }
          });
}