2013-06-02 69 views
1

以下是我的代码。如何将JMenus动态添加到JMenuBar

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class MenuBarProblem { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(new Dimension(300, 400)); 

     JMenu menu1 = new JMenu("First"); 
     JMenuItem item = new JMenuItem("Add menu"); 
     menu1.add(item); 
     final JMenuBar mb = new JMenuBar(); 
     mb.add(menu1); 
     frame.setJMenuBar(mb); 
     item.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       JMenu menu1 = new JMenu("First"); 
       JMenuItem item = new JMenuItem("Add menu"); 
       menu1.add(item); 
       mb.add(menu1); 
       System.out.println(mb.getMenuCount()); 
      } 
     }); 
     frame.setVisible(true); 
    } 
} 

我想要做的是当单击菜单item1时将菜单添加到菜单栏。行System.out.println(mb.getMenuCount());打印菜单项正在添加。 (点击菜单项1时打印2,3,4)但菜单栏不显示菜单。

我应该怎么做才能让动态添加的菜单项显示在菜单栏上?我正在使用Java 1.6。

+0

尝试调用repaint,看看是否有帮助! –

回答

5

mb使用添加额外的菜单后:

mb.revalidate(); 

这将导致组件来获得replainted,新后已添加菜单已插入组件树中。

1

尝试调用重绘后

frame.setVisible(true); 

frame.repaint(); 
相关问题