2011-10-27 22 views
2

创建菜单栏及其项目时我没有问题。但现在,当我得到一个问题如何使菜单项出现列&行像表形,我真的不知道这一点。Java swing:如何对齐行和列中的菜单项?

目标是使用java创建这种菜单项。 Check this link.

而现在,我只是觉得我应该用一个JPanel作为菜单项,然后应用的FlowLayout,然后加入很多的JLabel(S),因为我可以为菜单项的网格内。但这不是最糟糕的吗? 什么是最好的交易来创建菜单项,如上述链接上的图像预览?

我试过谷歌,但没有找到相关的案例。 CMIIW。

回答

6

JMenu实例的弹出式菜单是一个标准容器,因此您可以随意添加它。它有一个默认的布局,但你可以改变它。在您的样机

事情是由该代码创建:

import javax.swing.*; 
import java.awt.*; 

public class Test { 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Menu test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setSize(new Dimension(600, 400)); 
       JMenuBar menuBar = new JMenuBar(); 
       JMenu menu = new JMenu("Test"); 
       JPopupMenu popupMenu = menu.getPopupMenu(); 
       popupMenu.setLayout(new GridLayout(5, 5)); 
       for (int r = 0; r < 5; r++) { 
        for (int c = 0; c < 5; c++) { 
         popupMenu.add(new JMenuItem("(" + (r + 1) + ", " + (c + 1) + ")")); 
        } 
       } 

       menuBar.add(menu); 
       frame.setJMenuBar(menuBar); 

       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

哎,它的工作...! :D不错 – gumuruh

2

我还没有看到任何这样的现成组件。所以我认为你是独立的。

我看到两种可能性:

  1. JMenuItem的是一个JComponent,这样你就可以添加其他成分吧。您可能想要使用某种基于网格的布局,并为这些数字添加按钮或标签。

  2. 实现你自己的JMenuItem显示网格组件,而不是正常的JPopupMenu

在任何情况下必须按顺序来看看JMenu的(项目)的源代码,以了解这些组件是如何工作的。

1

最简单的办法是只设置JMenu对象的JPopupMenu中的布局,然后添加项目就像你通常会。没有必要创建一个子类。

例子:

import javax.swing.*; 
import java.awt.*; 

public class menu { 
    public static void main(String ... args) { 
     SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        JMenuBar menuBar = new JMenuBar(); 

        JMenu menu = new JMenu("A regular menu"); 
        menu.add(new JMenuItem("Menu item")); 

        JMenu gridMenu = new JMenu("Menu with grid"); 
        // This does the trick: 
        gridMenu.getPopupMenu().setLayout(new GridLayout(2, 2)); 
        gridMenu.add("Top left"); 
        gridMenu.add("Top right"); 
        gridMenu.add("Bottom left"); 
        gridMenu.add("Bottom right"); 
        menu.add(gridMenu); 

        menuBar.add(menu); 

        JFrame frame = new JFrame("Menus"); 
        frame.setJMenuBar(menuBar); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.pack(); 
        frame.setVisible(true); 
       } 
      }); 
    } 
} 
+0

pheww ...!谢谢@Daan。它帮助我只是一个String而不是menuItem:D – gumuruh