【问题标题】:How to dynamically add JMenus to JMenuBar如何将 JMenu 动态添加到 JMenuBar
【发布时间】:2013-06-02 15:12:58
【问题描述】:

以下是我的代码。

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()); 行打印正在添加菜单项。 (单击菜单 item1 时会打印 2,3,4)但菜单不会显示在菜单栏中。

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

【问题讨论】:

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

标签: java swing jmenubar


【解决方案1】:

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

mb.revalidate();

这会导致组件在新添加的菜单被插入组件树后被重新安装。

【讨论】:

    【解决方案2】:

    尝试在之后调用重绘

     frame.setVisible(true);
    

    作为

     frame.repaint();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多