java - 更改 JFrame 的内容 Pane 后聚焦组件

标签 java swing focus

我正在更改 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/

相关文章:

java - 如何在java中平均随机数?

java - 搜索主类的图像?

c++ - 无法在 wxWIdgets 3.0 C++ 中连接焦点事件

.net - WPF 工具栏不会将焦点传递给 Tab 键上的下一个控件

ios - 如何更改前置摄像头的曝光?

java - Bigquery.jobs().query 为时间戳列返回纪元时间 1.295353708E9

java - 启动并配置 WildFly 服务器,并在 1 个 Maven 运行中使用 wildfly-maven-plugin 部署应用程序

java - 将参数从一个 jframe 上的文本字段传递到另一个 jframe

java - Drools 6.0.1 - 未从 JAR 中选取规则

java - java中如何比较两个日期?