我目前正在为我们的应用程序开发其他功能:辅助框架,其中包含当前上下文(以及某些操作)的一些重要附加信息。此帧通常显示在第二个监视器上,因此用户可以看到两个帧。因为键盘控制非常重要,所以我需要在放置在不同帧中的组件之间传递焦点。 Java提供方法Component#requestFocus()
但不建议使用它。我找到了另一个解决方案
public static boolean focusComponent(Component toFocus) {
Window oldWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
Window newWindow = toFocus instanceof Window ? (Window) toFocus : SwingUtilities.getWindowAncestor(toFocus);
if (newWindow != null && newWindow.isVisible() && !newWindow.equals(oldWindow)) {
// when component placed in a non-active window
if (newWindow instanceof JFrame) {
// deiconify frame when required
JFrame frame = (JFrame) newWindow;
if ((frame.getExtendedState() & Frame.ICONIFIED) > 0) {
frame.setExtendedState(frame.getExtendedState() & ~Frame.ICONIFIED);
}
}
newWindow.toFront();
}
return toFocus.requestFocusInWindow();
}
我的问题是,我应该使用什么来转移放置在不同框架中的组件之间的焦点:此解决方案,Component#requestFocus()
或其他什么?