从JInternalFrame在JFrame上启用组件

时间:2013-03-06 07:45:17

标签: java swing netbeans

  1. 我有一个JFrame,其中有JMenubar,它有几个JMenu和JMenuItem。
    我设置了allJMenu.setVisible(false)和allJMenuItem.setVisible(false)并调用了JInternalFrame(Login Form)

  2. JInternalFrame(登录表单)如果用户名和密码正确,我必须根据登录类型(管理员,用户等)为适当的JMenu和JMenuItem设置visiblity为真

  3. 我应该如何实现这个目标?

  4. 我试过两种方式 第一种方式:

     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);
        }
    

1 个答案:

答案 0 :(得分: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);
        }
    }
}