首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTextField焦点

JTextField焦点
EN

Stack Overflow用户
提问于 2013-04-27 04:03:27
回答 4查看 4.6K关注 0票数 1

我有一个框架和一个panel.Permanently我删除面板并添加另一个panel.After添加新面板我需要JTextField来获取focused.How我可以这样做吗?

我尝试了panel.requestFocus()方法,但它不起作用。

示例代码:

代码语言:javascript
复制
public class Test{
    public static void main(String[] args){

        JFrame frame = new JFrame();
        // ... frame options

        // MyPanel extends JPanel
        // and has a JTextField
        contentPane.add(new MyPanel());

        // Permanently I need to add another panel
        contentPane.removeAll();
        contentPane.add(new MyPanel());

    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-27 04:19:15

调用panel.requestFocus()试图将焦点放在容器本身,而不是它的任何子组件上。

将组件添加到JFrame后,在JTextField上使用requestFocusInWindow。在MyPanel中添加一个公共方法来调用此方法。

避免使用requestFocus。从docs

requestFocus是不受欢迎的,因为它试图将焦点放在组件的窗口上,但这并不总是可行的。从JDK1.4开始,您应该改用requestFocusInWindow方法,该方法不会试图使组件的窗口成为焦点。

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("Focus JTextField");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                MyPanel myPanel = new MyPanel();
                frame.add(myPanel);
                frame.setVisible(true);
                frame.pack();
                myPanel.focusTextField();
            }
        });
    }
}

class MyPanel extends JPanel {
    private JTextField textField;

    public MyPanel() {
        textField = new JTextField(20);
        add(textField);
    }

    public void focusTextField() {
        textField.requestFocusInWindow();
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 100);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2013-04-27 04:18:09

将这样的方法添加到MyPanel中:

代码语言:javascript
复制
public void gainFocus() {
    tf.requestFocus();
}

从main方法调用它,或者在任何需要它的地方调用它。

票数 0
EN

Stack Overflow用户

发布于 2013-04-27 04:18:22

您需要一个方法来从MyPanel获取TextField,比如getTextField,或者一个直接关注TextField的方法。这些方法必须在您的MyPanel类中。

示例方法:

代码语言:javascript
复制
public class MyPanel extends JPanel {

private JTextField textField;

//your code here

    public void getTextFieldFocus() {
        textField.requestFocus();
    }

}

然后,在需要集中注意力时调用此getTextFieldFocus方法。

否则,如果使用getTextField方法从MyPanel类提取TextField,则在需要焦点时调用以下代码:

代码语言:javascript
复制
panel.getTextField().requestFocus();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16244349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档