如何编写Java Swing菜单列表?

时间:2014-05-09 00:49:18

标签: java swing actionlistener jmenu jmenuitem

我在Swing上写了一个基本的记事本应用程序。我有一个Java Swing菜单。它基本上是JMenuBar,其中包含JMenus。其中一个菜单是"格式" -menu,其中"字体大小"里面的菜单(见图)。 "字体大小"菜单应该有一个数字列表,我可以选择字体大小。但我似乎无法为此找到一个好的解决方案。

我已尝试使用JComboBoxJList,但我需要GUI看起来像在图像中一样。换句话说,它不是一个折叠下拉菜单,也不能在它自己的窗口中。任何人对我如何做到这一点都有任何建议吗?

编辑: 需要注意的是,我需要发送到ActionListener的值。您在图片中看到的只是正常的JMenuItems。但是,对于我将每个JMenuItem的int值发送到ActionListener,我需要3个不同的ActionListeners。他们需要硬编码。

enter image description here

2 个答案:

答案 0 :(得分:4)

阅读How to Use Menus上的Swing教程中的部分。它有一个工作示例,将向您展示如何创建子菜单。

  

但是我要将每个JMenuItem的int值发送到ActionListener,我需要3个不同的ActionListener。他们需要硬编码。

是的,这是应该做的。您应该有3个单独的操作。每个Action都应该有一个值来指定字体大小。

您还可以阅读Text Component Features以获取使用默认编辑器套件操作的简单编辑器的工作示例来自定义文本。

本教程是开始所有Swing基础知识的好地方。

答案 1 :(得分:3)

您可以使用循环将不同的字体大小添加到“字体”菜单中,并且可以将相同的ActionListener添加到“字体”菜单中的所有项目。调用ActionListener时,您可以通过获取事件源的文本来获取字体大小。

以下是如何操作的示例。此示例添加了从8到24的所有偶数字体大小,如图所示:

enter image description here

JFrame f = new JFrame();
ActionListener fontChangedListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        int fontSize = Integer.valueOf(( (JMenuItem) e.getSource()).getText());
        System.out.println(fontSize);
    }
};

JMenuBar mb = new JMenuBar();

JMenu formatMenu = new JMenu("Format");
mb.add(formatMenu);

JMenu fontMenu = new JMenu("Font");
formatMenu.add(fontMenu);

for ( int i = 8; i <= 24; i += 2 ) {
    JMenuItem sizeMenuItem = new JMenuItem("" + i);
    sizeMenuItem.addActionListener(fontChangedListener);
    fontMenu.add(sizeMenuItem);
}

f.setJMenuBar( mb );