1

我有一个框架和一个面板。我永久删除面板并添加另一个面板。添加新面板后,我需要 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

4 回答 4

4

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

在将组件JTextField添加到JFrame. 添加一个公共方法MyPanel来调用这个方法。

避免使用requestFocus. 从文档

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);
    }
}
于 2013-04-26T20:19:15.177 回答
0

将这样的方法添加到 MyPanel:

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

从 main 方法调用它,或者在需要集中注意力时从其他地方调用它。

于 2013-04-26T20:18:08.647 回答
0

您将需要一种方法来获取 TextField MyPanel,例如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();
于 2013-04-26T20:18:21.557 回答
0

利用。textfield.setText(""); 当您需要集中注意力或尝试类似的事情时,您将控制自己的领域尝试

于 2013-04-26T20:48:57.330 回答