我有一个JFrame,其中有JMenubar,它有几个JMenu和JMenuItem。
我设置了allJMenu.setVisible(false)和allJMenuItem.setVisible(false)并调用了JInternalFrame(Login Form)
JInternalFrame(登录表单)如果用户名和密码正确,我必须根据登录类型(管理员,用户等)为适当的JMenu和JMenuItem设置visiblity为真
我应该如何实现这个目标?
我试过两种方式 第一种方式:
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);
}
答案 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);
}
}
}