java:表单加载时将焦点设置为文本字段

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11271226/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 04:28:22  来源:igfitidea点击:

java:set the focus to textfield when form load

javaswingnetbeans

提问by Jayashri

I have a jTextfield. I want to set focus on this when the form is loaded. How can I do this? I am using Netbeans. I use requestFocus()but it is not working.

我有一个 jTextfield。我想在加载表单时将重点放在这个上。我怎样才能做到这一点?我正在使用 Netbeans。我使用requestFocus()但它不工作。

回答by Sujay

This link might be helpful for you: How to Use the Focus Subsystem

此链接可能对您有所帮助:How to Use the Focus Subsystem

I would suggest that you use requestFocusInWindow() instead of requestFocus() to achieve the desired functionality.

我建议您使用 requestFocusInWindow() 而不是 requestFocus() 来实现所需的功能。

The reason: (from the same link)

原因:(来自同一个链接)

These methods are now deprecated. Another method, requestFocus, is discouraged because it tries to give the focus to the component's window, which is not always possible. As of JDK 1.4, you should instead use the requestFocusInWindow method, which does not attempt to make the component's window focused. The method returns a boolean value indicating whether the method succeeded.

这些方法现已弃用。另一种方法 requestFocus 是不鼓励的,因为它试图将焦点赋予组件的窗口,这并不总是可行的。从 JDK 1.4 开始,您应该改为使用 requestFocusInWindow 方法,该方法不会尝试使组件的窗口获得焦点。该方法返回一个布尔值,指示该方法是否成功。

This would be a crude example, but I think you can use this to get started:

这将是一个粗略的示例,但我认为您可以使用它来开始:

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestFrame extends JFrame {

    JButton button1;
    JButton button2;

    JTextField textField;

    public TestFrame() {
        initComponents();
    }

    private void initComponents(){
        button1 = new JButton("Button 1");
        button2 = new JButton("Button 2");
        textField = new JTextField();

        button1.setPreferredSize(new Dimension(100,20));
        button2.setPreferredSize(new Dimension(100,20));
        textField.setPreferredSize(new Dimension(300,20));

        this.setSize(new Dimension(600, 300));
        this.setLayout(new BorderLayout());

        getContentPane().add(button1, BorderLayout.WEST);
        getContentPane().add(button2, BorderLayout.CENTER);
        getContentPane().add(textField, BorderLayout.EAST);
        this.pack();
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //This will set focus on the text field
        textField.requestFocusInWindow();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestFrame();
            }
        });
    }
}

LATEST EDIT : FOR NETBEANS

最新编辑:对于 NETBEANS

CODE USED :

使用的代码:

package focusexample;

public class FocusExample extends javax.swing.JFrame {

    public FocusExample() {
        initComponents();
        jTextField1.requestFocusInWindow();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");

        jButton2.setText("jButton2");

        jTextField1.setText("jTextField1");

        jTextField2.setText("jTextField2");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(87, 87, 87)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jTextField1))
                .addGap(69, 69, 69)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jTextField2))
                .addContainerGap(98, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(95, 95, 95)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addGap(58, 58, 58)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(104, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>


    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new FocusExample().setVisible(true);                
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
}

回答by Max West

I used the textfield.requestFocusInWindow(); line given above, in a GUI that contains a number of form elements (several of which are textfields). It works great. Just replace "textfield" with whatever name you have given the element in question. In my case it's repId. So I use repID.requestFocusInWindow(); and put the line at the bottom of my ENTER button handler. Now, when a user types data into the form fields and presses ENTER, focus returns to the first textfield: "repID". Thanks for the answer.

我使用了 textfield.requestFocusInWindow(); 上面给出的行,在包含许多表单元素(其中几个是文本字段)的 GUI 中。它工作得很好。只需将“文本字段”替换为您为相关元素指定的任何名称。就我而言,它是 repId。所以我使用 repID.requestFocusInWindow(); 并将该行放在我的 ENTER 按钮处理程序的底部。现在,当用户在表单字段中键入数据并按 ENTER 键时,焦点将返回到第一个文本字段:“repID”。谢谢你的回答。

回答by Shatenkirk

Also of note, make sure you place the requestFocusInWindow()method after the pack()method. When I was placing the requestFocusInWindow()method before the pack()method, it didn't work. I placed the requestFocusInWindow()method after the pack()method and it worked. Little things like that just make life so much easier for us n00bs.

另请注意,请确保将requestFocusInWindow()方法放在方法之后pack()。当我将requestFocusInWindow()方法放在方法之前pack(),它不起作用。我把requestFocusInWindow()方法放在方法之后pack(),它起作用了。像这样的小事只会让我们的生活变得更轻松。

回答by deniz salman

I hope this example will help you:

我希望这个例子能帮助你:

        JTextField inputText = new JTextField(20);

        frame.addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            inputText.requestFocusInWindow();
        }
    });