我創建了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選擇器不包括兒童
是的,提示是正確的。 –