2011-10-27 19 views
2

メニューバーとそのアイテムを作成するときに問題はありません。しかし今、メニュー項目をどのように列&のような行のように表示されるようにするのかという質問が出たら、私は本当にそれについて知らない。Java swing:メニュー項目を行と列に揃える方法は?

目的は、Javaを使用してこの種のメニュー項目を作成することです。 Check this link.

そして今、私はちょうど私がメニュー項目としてJPanelのを使うべきだと思うし、その後FlowLayoutのを塗布した後、私は、グリッド内のようにメニュー項目ができるので、多くのJLabel(複数可)を追加します。しかし、それは最悪ではないでしょうか? 上記のリンクの画像プレビューなどのメニュー項目を作成するのに最適な方法はありますか?

私はgoogleを試みましたが、関連するケースは見つかりませんでした。 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 nice – gumuruh

2

私はこのようなものの準備ができているコンポーネントを見ていません。だから私はあなた自身の上にいると思う。あなたはそれに他のコンポーネントを追加することができるように

  1. のJMenuItemは、JComponentのである:

    は、私は2つの可能性を参照してください。おそらく、何らかのグリッドベースのレイアウトを使用し、数字のボタンやラベルを追加したいと思うでしょう。

  2. いずれの場合においても代わりに通常のPopupMenu

のグリッド・コンポーネントを表示し、あなたがのJMenuItemを所有して実装するには、これらのコンポーネントがどのように機能するかを理解するためにはJMenu(項目)のソースコードを見てください。

1

最も簡単な解決策は、単にJMenuの者のPopupMenuのレイアウトを設定し、通常どおりのような項目を追加しています。サブクラスを作成する必要はありません。

例:

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 ...!ありがとう@ダーン。それはmenuItemの代わりにちょうどストリングだと私は助けてくれました:D – gumuruh

関連する問題