requestFocusInaWindow()不起作用-我在做什么错?

问题描述 投票:0回答:1

我看了一些有关Java中Focus的文档,但我不完全了解它是如何工作的。

我试图在这段短代码中重现我的怀疑,在这段短代码中,我试图将重点放在textfield2组件上。我认为我尊重文档的要求-也就是说,组件必须是可显示,可见和可聚焦的(https://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html)。所以,我在做什么错?

***
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class WindowForm {
    private JFrame frame;
    private JTextField textField1;
    private JTextField textField2;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    WindowForm window = new WindowForm();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public WindowForm() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        myPanel panel = new myPanel();
        panel.setBounds(10, 11, 414, 239);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        textField1 = new JTextField("textfield1");
        textField1.setBounds(137, 93, 152, 20);
        panel.add(textField1);
        textField1.setColumns(10);

        textField2 = new JTextField("textfield2");
        textField2.setColumns(10);
        textField2.setBounds(137, 124, 152, 20);
        panel.add(textField2);

        panel.changeFocus();
    }

    public class myPanel extends JPanel{

        public void changeFocus() {
            textField2.setVisible(true);
            textField2.setFocusable(true);
            textField2.requestFocusInWindow();
        }
    }
}

[我看到了一些需要在jframe中实现addWindowFocusListener的示例-但我需要将此解决方案应用于CardLayout JPanel-因此,我认为这是行不通的。

谢谢你。

focus setfocus
1个回答
0
投票

我在actionPerformed块内使用requestFocusInWindow解决了。

喜欢这个:


public void actionPerformed(ActionEvent e){ 字符串命令= e.getActionCommand();

if(command.equals("btnNext")) {
    cardLayout.show(nextJPanel, "Panel2");
    textField2.requestFocusInWindow();
}           

}


还有其他解决方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.