我正在更改 JFrame
的内容 Pane ,并且只想将 JTextField
聚焦在新面板中。所以我正在这样做:
JPanel pNew = new JPanel();
frame.setContentPane(pNew);
frame.revalidate();
frame.repaint();
public JPanel() {
...
tf.requestFocusInWindow();
}
当我使用 setVisible(false)
和 setVisible(true)
而不是重新验证和重新绘制我的框架时,我得到了我想要的效果,但这不是我想要的方式去做这件事。
除了重新验证和重新绘制之外,setVisible()
中还会发生什么?
最佳答案
一个CardLayout通常用于交换面板。
但是,即使是 CardLayout
的默认实现,在交换面板时也不会将焦点设置在面板上。不过您可以查看Card Layout Focus这将允许您在切换面板时请求焦点。
requestFocusInWindow()
方法仅适用于显示在可见框架中的组件。所以你不能在类的构造函数中调用该方法。
您可以使用 Dialog Focus 中找到的 RequestFocsListener
。它将等到面板添加到可见 GUI 后才生成事件。
关于java - 更改 JFrame 的内容 Pane 后聚焦组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32441480/