我有一个带有JTextField和AWT Canvas的简单GUI(以防止有人质疑我为什么使用AWT Canvas:我需要一个窗口句柄)。
Canvas将处理输入事件,这意味着它必须是可聚焦的。我通过在其构造函数中使用setFocusable(true)
来确保这一点,稍后使用isFocusable()
进行检查以确认它确实可聚焦。
现在,默认情况下,当GUI打开时,JTextField将获得焦点。到目前为止,我还好。但是,没有办法将焦点从该JTextField移开。
文章"The AWT Focus Subsystem"明确指出,如果单击可聚焦组件,它将获得焦点。实际上不会发生这种情况,实际上,仅当窗口被停用并再次激活时,我才会收到零焦点更改事件,但是焦点恰好回到JTextField。requestFocus()
和requestFocusInWindow()
的显式调用均无济于事,后者总是返回false
。
如果替换JTextField,则任何可聚焦组件的结果都相同。如果Canvas是唯一可聚焦的容器,那么一切都会正常进行,因为它将始终具有焦点。
我在这里想念什么吗?在存在其他可聚焦组件的情况下,有什么方法可以使我的Canvas获得聚焦,最好不要使该对象无法聚焦?
最佳答案
基本上在挥杆焦点上获得了第一名。顶部的left(ToRight)JComponents
在大多数完成的GUI中,如果在那里(连同创建JComponent)一起将侦听器添加到JComponent,则这些侦听器(例如Document)可以成为重点...
但在启动时对我有用:
last lines in something class about JComponets ..
myFrame.pack();
myFrame.setVisible(true);
Runnable doRun = new Runnable() {
public void run() {
myComponent.grabFocus();
myComponent.requestFocus();//or requestFocusInWindow
}
};
SwingUtilities.invokeLater(doRun);
关于java - 在存在其他可聚焦组件的情况下,AWT Canvas无法获得聚焦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6187472/