JTextField焦点

时间:2013-04-26 20:03:27

标签: java swing

我有一个框架和一个面板。我永久删除面板并添加另一个面板。添加一个新面板后,我需要JTextField来集中注意力。我该怎么办?

我尝试了panel.requestFocus()方法,但它没有用。

示例代码:

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

    }
}

4 个答案:

答案 0 :(得分:4)

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

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

避免使用requestFocus。来自docs

  不鼓励使用requestFocus,因为它试图将焦点放在组件的窗口上,这并不总是可行的。从JDK 1.4开始,您应该使用requestFocusInWindow方法,该方法不会尝试使组件窗口集中。

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

答案 1 :(得分:0)

将这样的方法添加到MyPanel:

public void gainFocus() {
    tf.requestFocus();
}

在需要聚焦时,从主方法或其他地方调用它。

答案 2 :(得分:0)

您需要一种方法来从MyPanel获取TextField,如getTextField,或者直接关注TextField的方法。这些方法必须在MyPanel课程内。

示例方法:

public class MyPanel extends JPanel {

private JTextField textField;

//your code here

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

}

然后在需要关注时调用此getTextFieldFocus方法。

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

panel.getTextField().requestFocus();

答案 3 :(得分:0)

使用。 textfield.setText( “”);当你需要获得焦点或尝试类似的东西时,你会控制你的领域,试试