我有一个包含 CardLayout 的框架,其中各种 JPanel 将其设置为 JFrame 的中心。
在第一个面板上,我专注于第一个组件,即按钮。但不能将注意力集中在其他面板或组件上。在设置所需的面板时,我使用以下代码:
public void SetMainPanel(String panel) {
activePanel = panel;
SetFontSize();
cards.show(mainPanel, panel);
mainPanel.revalidate();
mainPanel.repaint();
mainPanel.requestFocusInWindow();
EventQueue.invokeLater(new Runnable() {
public void run() {
mainPanel.grabFocus();
mainPanel.getComponent(0).requestFocus();
}
});
//mainPanel.getComponent(0).requestFocusInWindow();
}
但我无法将注意力集中在面板或其第一个组件上。我怎样才能让设置面板专注于它的第一个组件?最后,为了专注于每个面板,更好的是 - FocusPolicy、Manager、Keyboard...。面板要么具有所有按钮,要么具有表格和按钮,要么具有带字段的表单。有这 3 种类型的面板。 顺便说一句,添加到 cardLayout 的面板是可聚焦的。
任何想法....
编辑:代码已被编辑,如 mKorbel 所示。
最佳答案
您应该能够将 ComponentListener 添加到面板并处理 componentShown() 事件以将焦点放在您想要的任何组件上。
或Card Layout Focus默认情况下扩展 CardLayout 以提供此功能。
关于java - Swing : Focus Components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8432580/