2017-07-30 5 views
0

実装するはずのケースに応じて、ある時点でメニューを無効にする必要があります。それは単にJMenu#setEnabled(false)は、メニュー自体を無効にするのではなく、すべてのアクションを無効にします。

JMenu menu = new JMenu(); 
menu.setEnabled(false); 

を設定することが理にかなっていると確かにそれは、このコードサンプルで動作します:

public class MenuTest { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(FrameTest::new); 
    } 
} 

class FrameTest extends JFrame { 

    public FrameTest() { 
     super(); 

     JPanel panel = new JPanel(new GridBagLayout()); 
     JMenuBar menuBar = new JMenuBar(); 
     JMenu menu1 = new JMenu("test menu1"); 
     JMenu menu2 = new JMenu("test menu2"); 
     menuBar.add(menu1); 
     menuBar.add(menu2); 
     menu1.setEnabled(false); 

     setJMenuBar(menuBar); 
     setPreferredSize(new Dimension(400, 400)); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 
} 

しかし、コードベースに、私はこのアプローチに取り組んでいますが動作しない、それが有効なメニューを残し、カプセル化されたすべてのアクションを無効にします。それは私が探しているものではありません。いくつかの理由で、主にそのかなり大きいとここに収まるだろう、私はそれを投稿していないが、アイデアは同じです。 JMenuで埋められたJMenuBarは、AbstractActionsで埋められています。 JMenuの同じメソッドsetEnabled(false)を使用して結果が異なる理由はありますか?

+3

「ある理由で、主にかなり大きく、ここに収まらないので、私はここに掲載していません....」。常に[mcve] – Ansharja

答えて

0

なぜあなたはそれを消さないのですか?

menu1.setVisible(false); 

必要に応じて真に戻ってください。

setEnabled(boolean)のドキュメントは明確です。

パラメータ:アイテム@beaninfodescriptionを有効にする場合はtrue B:真の好適: コンポーネントがバインドユーザーとの対話に反応しない真

あなたはそれを追加する場所コンポーネントがあると、それだけで作りますこれは、ユーザの対話に反応するか否かを問わない。

関連する問題