2

メニューバーとそのアイテムを作成するのに問題はありません。しかし今、メニュー項目を列と行のような表の形で表示する方法について質問を受けたとき、私はそれについて本当に知りません.

目標は、Java を使用してこの種のメニュー項目を作成することです。 このリンクを確認してください。

そして今、jpanelをメニュー項目として使用し、フローレイアウトを適用してから、グリッド内のmenuitemとして可能な限り多くのjlabelを追加する必要があると思います。でも最悪じゃない?上記のリンクの画像プレビューなどのメニュー項目を作成するにはどうすればよいでしょうか?

私はグーグルを試しましたが、関連するケースは見つかりませんでした。CMIIW。

4

3 に答える 3

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

}
于 2011-10-27T09:38:04.483 に答える
2

私はこのようなもののための既製のコンポーネントを見たことがありません。だから私はあなたがあなた自身でいると思います。

2つの可能性があります。

  1. JMenuItemはJComponentであるため、他のコンポーネントを追加できます。ある種のグリッドベースのレイアウトを使用して、数字のボタンまたはラベルを追加することをお勧めします。

  2. 通常のJPopupMenuの代わりにグリッドコンポーネントを表示する独自のJMenuItemを実装します

いずれにせよ、これらのコンポーネントがどのように機能するかを理解するために、JMenu(Item)のソースコードを見てください。

于 2011-10-27T09:30:46.723 に答える
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);
                }
            });
    }
}
于 2011-10-27T10:00:37.607 に答える