JWindow
いくつかのJTextInput
フィールドを持つ を作成しました。このJWindow
親はJFrame
です。状況 - テキストフィールドがクリックされた場合 - フォーカスを取得しますが、フォーカスJWindow
を維持します。それはいいです。しかし、別のJWindow
( first の子JWindow
) を作成し、それを表示に設定すると、 first へのフォーカスJWindow
が失われ、子JWindow
がフォーカスされます。これは悪いです。親にフォーカスを保持し、フィールドのようJWindow
に子にフォーカスを当てる方法はありますか?JWindow
JTextInput
質問する
725 次
2 に答える
4
親のない 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();
}
});
}
}
于 2013-08-16T21:30:17.183 に答える
2
子ウィンドウを可視に設定する前に、WindowListener
. setVisible
子ウィンドウを呼び出した後、windowActivated
コールバックを受け取ります。その時点toFront
で、親ウィンドウを呼び出して前面に出します。toBack
OS の z オーダー処理の風変わりさを考えると、最初に子ウィンドウを呼び出しrequestFocus
、その後で親ウィンドウまたはそのフォーカス可能な子の 1 つを呼び出す必要がある場合があります。
于 2013-08-16T21:14:23.057 に答える