我创建了JWindow
,其中有几个JTextInput
字段。这个JWindow
父母是JFrame
。现在的情况 - 如果文本字段被点击 - 他们得到的焦点,但仍然保持专注但仍然JWindow
。那很好。但是,如果我创建另一个JWindow
(第一个子项JWindow
),并将其设置为可见,那么首先关注JWindow
已丢失,并重点关注子项JWindow
。这不好。有没有办法保留专注于父母JWindow
,并使子女JWindow
获得像JTextInput
这样的关注领域?让JWindow在儿童聚焦时保留焦点,包括另一个儿童窗口
回答
将子窗口设置为可见之前,请添加一个WindowListener
。在子窗口上拨打setVisible
后,您将收到windowActivated
回拨。此时,请在您的父窗口上拨打toFront
将其转发。鉴于OS z顺序处理的怪异性,您可能需要/想要先在子窗口上调用toBack
,并在父窗口或之后调用其中一个可聚焦子项,然后调用requestFocus
。
的JWindow无父也绝不会成为焦点,然后仔细绝不JTextComponents将编辑
例如
import java.awt.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class WindowTest {
private JFrame frame;
private boolean bol = true;
public WindowTest() {
frame = new JFrame("Window Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
JWindow win = new JWindow(frame);
win.setLayout(new GridLayout(0, 1));
JTextField text = new JTextField("Show Window");
text.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
if (!bol) {
JWindow win = new JWindow();
win.setLayout(new GridLayout(0, 1));
win.add(new JTextField("JTextField"));
win.add(new JTextField("JTextField"));
win.add(new JLabel("<html> Concurency Issues in Swing<br>"
+ " never to use Thread.sleep(int) <br>"
+ " durring EDT, simple to freeze GUI </html>"));
win.pack();
win.setLocation(350, 150);
win.setVisible(true);
bol = true;
}
}
@Override
public void removeUpdate(DocumentEvent e) {
}
@Override
public void changedUpdate(DocumentEvent e) {
}
});
win.add(text);
win.add(new JTextField("JTextField"));
win.add(new JTextField("JTextField"));
win.pack();
win.setLocation(250, 150);
win.setVisible(true);
bol = false;
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new WindowTest();
}
});
}
}
不错的例子,以前不知道。其实我已经解决了这个问题,通过限制如果子JWindow获得焦点来改变我的父JWindow的自定义标题栏的颜色(不活动)。再次感谢:) –
此外,在阅读完这些代码之后,我不得不使用'WindowFocusListener'和'FocusListener'“截至此版本,显示JPopupMenu会导致焦点转移到父JRootPane。这样做是为了让JPopupMenus能够支持键盘遍历...“来自[这里](http://download.java.net/jdk8/docs/technotes/guides/swing/1.4/SwingChanges.html)。我认为在JWindow获得焦点时(JWindow父窗口保留窗口焦点),有一些设置的行为与JTextField类似。 –
因为从Java1.4不可能保持可见而没有Focus,松散的Fosus隐藏JPopup或BasicComboBoxPopup – mKorbel
- 1. 整个div和儿童jQuery聚焦
- 2. Android Expandable列表查看儿童焦点
- 3. 与焦点获取儿童内NSSplitView
- 4. Android的GridView焦点发布儿童?
- 5. 聚集根包括大量的儿童
- 6. JPA合并包括儿童
- 7. div高不包括儿童
- 8. 儿童弹出窗口
- 9. 儿童停靠窗口
- 10. LINQ - 包括儿童财产儿童财产
- 11. 儿童内部角儿童
- 12. 解析儿童Simplexml儿童
- 13. 防止LostFocus在儿童元素失去焦点时被触发
- 14. Django的:让儿童
- 15. 滚动查看儿童的滚动时丢失焦点
- 16. 单击儿童时如何不失去元素焦点
- 17. 在sitecore中获取儿童儿童
- 18. 视觉工作室插件 - 窗口儿童不能获得焦点
- 19. JTree的儿童增加儿童对儿童等
- 20. 点击儿童Android
- 21. 儿童
- 22. 在儿童窗口提交表格
- 23. CSS3儿童菜单未在焦点上显示
- 24. 保留beautifulSoup python中的儿童元素?
- 25. 懒惰加载儿童儿童(EF)
- 26. 计算儿童儿童的轨迹
- 27. 儿童儿童enumerateChildNodes(withName:使用:)
- 28. jQuery监听器不包括儿童
- 29. JavaScript get textContent不包括儿童
- 30. CSS选择器不包括儿童
是的,提示是正确的。 –