2014-05-09 89 views
1

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

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

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

enter image description here

回答

4

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

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

是的,这是应该做的。你应该有3个独立的行动。每个操作应该有一个值来指定字体大小。

您还可以阅读Text Component Features以获得一个简单编辑器的工作示例,该编辑器使用默认编辑器工具包Actions来执行文本的自定义。

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

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