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