2014-05-09 87 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);