0
  1. 私はいくつかのJMenuとJMenuItemを持つJMenubarがあるJFrameを持っています。
    allJMenu.setVisible(false) と allJMenuItem.setVisible(false) を設定し、JInternalFrame(Login Form) を呼び出しました

  2. JInternalFrame(Login Form) ユーザー名とパスワードが正しい場合は、ログインの種類 (管理者、ユーザーなど) に応じて、適切な JMenu と JMenuItem の可視性を true に設定する必要があります。

  3. どうすればこれを達成できますか?

私は2つの方法でそれを試しました
最初の方法:

 public class LoginForm extends javax.swing.JInternalFrame 
      {
         public LoginForm() 
        {
           initComponents();
        }

            my code......

        if(username==correct && password==correct)
        {
             //how should i set the JMenu and JMenuItem as visible=true
             //i tried the below code but does not works

           Main_JFrame  mi = new Main_JFrame();
           mi.allJMenu.setVisible(true);
           mi.allJMenuItem.setVisible(true);            //doesn't works

第二の方法:

           Main_JFrame  mi1=new Main_JFrame(); 
           mi1.visibleTrue(mi1.MenuItem1);          
           mi1.visibleTrue(mi1.Menu5);            //doesn't works
        }
      }     

visibleTrueは JFrame Form(Main_JFrame) のメソッドです。メソッドは次のとおりです。

     public void visibleTrue(Component cmp)
    {
       cmp.setVisible(true);
    }
4

1 に答える 1

0

JMenu の下に追加されたすべての MenuItem に対して setVisible(false) を設定する必要はありません。
JMenu.setVisible(false) を設定するだけで十分です。
次のように、menuBar のすべてのアイテムを処理し、setVisible(true) を呼び出す必要があります。

    private static void setComponentsEnable(final JComponent component, final boolean enabled) {
        final Component[] vComponents = component instanceof  JMenu ? ((JMenu)component).getMenuComponents() : component.getComponents();
        for (final Component vComponent : vComponents) {
            if (vComponent instanceof JMenu)
                setComponentsEnable((JMenu)vComponent, true);
            vComponent.setVisible(enabled);
        }
    }

ここに小さなデモがあります

public class EnableComp {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Some Title");
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel(new FlowLayout());
        final JMenuBar menuBar = new JMenuBar();

        final JMenu menu1 = new JMenu("menu1");
        final JMenuItem item1 = new JMenuItem("item1");
        item1.setVisible(false);//visible false
        menu1.add(item1);
        menu1.setVisible(false);//visible false
        menuBar.add(menu1);

        final JMenu menu2 = new JMenu("menu2");
        final JMenuItem item2 = new JMenuItem("item2");
        item2.setVisible(false);//visible false
        menu2.setVisible(false);//visible false
        menu2.add(item2);
        menuBar.add(menu2);

        final JMenuItem item3 = new JMenuItem("I m added directly in menuBar");
        item3.setVisible(false);//visible false
        menuBar.add(item3);

        final JButton tempBtn = new JButton("i m simple btn in menuBar");
        tempBtn.setVisible(false);//visible false
        menuBar.add(tempBtn);

        panel.add(menuBar, BorderLayout.NORTH);

        final JButton enableBtn = new JButton("Show Menu");
        enableBtn.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                setComponentsEnable(menuBar, true);
            }
        });

        panel.add(enableBtn, BorderLayout.SOUTH);

        frame.add(panel);
        frame.setSize(new Dimension(400,400));
        frame.setVisible(true);
    }


    private static void setComponentsEnable(final JComponent component, final boolean enabled) {
        final Component[] vComponents = component instanceof  JMenu ? ((JMenu)component).getMenuComponents() : component.getComponents();
        for (final Component vComponent : vComponents) {
            if (vComponent instanceof JMenu)
                setComponentsEnable((JMenu)vComponent, true);
            vComponent.setVisible(enabled);
        }
    }
}
于 2013-03-06T09:19:50.383 に答える