1

デフォルトで無効になっているJMenuItemを作成しようとしていますが、メソッドを呼び出して有効にすることができます。コードをテストしている間、別のメニュー項目をクリックしたときにメソッドが呼び出されるようにしたいのです。JMenuItemのドキュメントを見てきましたが、Javaはかなり初めてで、必要なものを正確に見つけるのに苦労しています。updateUI()コマンドを使ってみましたが、うまくいかなかったので、完全に行き詰まりました。助けてくれてありがとう:)

これは私がこれまでに持っているものです:

public class initialScreen extends JFrame implements ActionListener{

    Dimension screenSize = new Dimension(800,600);
    JMenuItem runE, newP;

    public initialScreen(){
        super("Experiment Control Suite");
        setSize(screenSize);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenuBar bar = new JMenuBar();

        JMenuItem newP = new JMenuItem("New");
        newP.addActionListener(this);

        runE = new JMenuItem("Run");
        runE.setEnabled(false);
        runE.addActionListener(this);

        JMenu exp = new JMenu("Experiment");
        exp.add(runE);      

        JMenu par = new JMenu("Participant");
        par.add(newP);
        bar.add(exp);
        bar.add(par);
        setJMenuBar(bar);

        setVisible(true);
    }

    public void enableRun(){
        runE.setEnabled(true);
        runE.updateUI();
    }

    public void actionPerformed(java.awt.event.ActionEvent e){
        if(e.getSource() == newP) {
            enableRun();  
        }
        else if(e.getSource() == runE) {
            System.out.println("run has been clicked");
        }
    }

}

4

1 に答える 1

3

enableRun次の行のため、メソッドが呼び出されることはありません。

JMenuItem newP = new JMenuItem("New");

代わりに、そのようにリファクタリングします。

newP = new JMenuItem("New");

これで、フィールドが正しく初期化され、として登録されますActionListener。したがって、ソースをチェックすると、enableRunが呼び出され、メニュー項目が有効になります。

この場合、updateUIは完全に不要であることに注意してください(javadocを読んでその目的を学ぶことをお勧めします)。

于 2012-01-10T15:10:27.393 に答える