1

2 つの JTextfields と JButtons を持つ JDialog を使用しています。Jdialog を初めて開くと、最初のテキスト フィールドにカーソルが表示されます。Jdialog 以外の場所をクリックしてから、JDialog をクリックして戻そうとすると、テキストフィールドにカーソルが表示されず、テキストフィールドに何も書き込んだり編集したりできません。

モーダルをtrueに設定しました。そのため、他の場所をクリックしても、ダイアログは画面に表示されますが、非アクティブになります。

この問題は Linux サーバーのみで発生し、Windows では発生しません。Windows は完全に動作します。

ここにサンプル コードを追加して、問題の全体像を把握します。ここで TestClass は JFrame を拡張しています。

public TestClass(){
    setSize(new Dimension(600,500));
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    myPanel = new JPanel();


    JButton openDialog = new JButton("Click here");
    openDialog.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            dialog = new JDialog(myFrame,true);
            dialog.setSize(new Dimension(400,400));

            JTextField myField = new JTextField(10);
            JPanel innerPanel = new JPanel();
            innerPanel.add(myField);

            dialog.add(innerPanel);
            dialog.setVisible(true);
            //add(dialog);
        }
    });


    myPanel.add(openDialog);
    add(myPanel);
}
4

1 に答える 1

1

あなたの不完全な例はテストできませんでした。以下の例は、Mac OS X と Ubuntu 12 の両方で Java 6 の下で予期される動作を示しています。特に、テキスト フィールドは、別のプログラムから切り替えた後も機能し続けます。

画像

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * @see http://stackoverflow.com/a/15576897/230513
 */
public class TestClass extends JFrame {

    private static JFrame myFrame;

    public TestClass() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JButton openDialog = new JButton("Click here");
        JPanel myPanel = new JPanel();
        myPanel.add(new JButton(new AbstractAction("Click here") {
            @Override
            public void actionPerformed(ActionEvent e) {
                JDialog dialog = new JDialog(myFrame, true);
                JTextField myField = new JTextField(10);
                JPanel innerPanel = new JPanel();
                innerPanel.add(myField);
                dialog.add(innerPanel);
                dialog.pack();
                dialog.setSize(new Dimension(160, 120));
                dialog.setLocationRelativeTo(myFrame);
                dialog.setVisible(true);
            }
        }));
        add(myPanel);
        pack();
        setSize(new Dimension(320, 240));
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                myFrame = new TestClass();
            }
        });
    }
}
于 2013-03-22T17:54:53.897 に答える