gpt4 book ai didi

java - 使 JWindow 在子窗口获得焦点时保留焦点,包括另一个窗口作为子窗口

转载 作者:行者123 更新时间:2023-12-01 08:09:57 27 4
gpt4 key购买 nike

我创建了 JWindow,它有几个 JTextInput 字段。这个JWindow 父级是JFrame。现在的情况 - 如果单击文本字段 - 他们获得焦点,但 JWindow 也保持焦点。那很好。但是,如果我创建另一个 JWindow (第一个 JWindow 的子级),并将其设置为可见,那么第一个 JWindow 上的焦点就会丢失,并且子级JWindow 已获得焦点。这不好。是否有某种方法可以将焦点保留在父级 JWindow 上,并使子级 JWindowJTextInput 字段一样获得焦点?

最佳答案

没有父窗口的 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();
}
});
}
}

关于java - 使 JWindow 在子窗口获得焦点时保留焦点,包括另一个窗口作为子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com