ホームページ >Java >&#&チュートリアル >スイング ボタンとメニュー項目を同期して排他的に選択するにはどうすればよいですか?

スイング ボタンとメニュー項目を同期して排他的に選択するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-25 17:34:09491ブラウズ

How Can I Synchronize Swing Buttons and Menu Items for Exclusive Selection?

ButtonGroups を使用した Swing ボタンとメニュー項目のグループ化

概要:

Swing アプリケーションの作成時では、ユーザー操作のためにツールバー ボタンとメニュー項目の両方を提供するのが一般的です。ただし、これらの要素間の一貫性と一貫性を維持することは、特に同様の機能を実行する場合に困難になる可能性があります。

問題:

学校のプロジェクトでは、線、楕円、長方形を描画するためのツールバー ボタンとメニュー項目を含むペイント アプリケーション。ユーザーがツールバー ボタンを選択すると、対応するメニュー項目も選択され、その逆も同時に行われ、同時に他のすべてのボタンとメニュー項目の選択が解除されるようにするという課題が生じます。

解決策:

使用中ButtonGroups:

ButtonGroups を利用して AbstractButton をリンクし、排他的なボタンのグループを作成できます。 ButtonGroups は確かに複数のグループを処理できますが、並列グループに適用すると制限があります。

アクションの使用:

別のアプローチは、Action インターフェイスを使用することです。アクションは「コマンド」の概念を抽象化し、そのコマンドを実行するために必要なすべての操作をカプセル化します。ツールバー ボタンとメニュー項目の両方に同じアクションを割り当てることで、コマンドを実行するための同じコードを共有できます。

Netbeans GUI デザイナーの統合:

Netbeans 内GUI デザイナーの場合、「プロパティ」ウィンドウに移動し、「アクション」タブを選択して、コンポーネントのアクションを設定できます。 「アクション」パレットから目的のアクションをドラッグ アンド ドロップします。

コード例:

次のコード スニペットは、アクションを使用する単純な Netbeans GUI アプリケーションを作成する方法を示しています。ツールバーのボタンとメニュー項目をリンクするには:

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;

public class ShapeSelector extends JFrame {

    private ButtonGroup toggleGroup = new ButtonGroup();

    public ShapeSelector() {
        super("Shape Selector");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create the Action for shape selection
        Action shapeSelectAction = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Perform shape selection based on Action command
            }
        };

        // Create a toolbar with toggle buttons
        JToolBar toolbar = new JToolBar();
        addButton("Line", toolbar, shapeSelectAction);
        addButton("Oval", toolbar, shapeSelectAction);
        addButton("Rectangle", toolbar, shapeSelectAction);

        // Create a menu with menu items
        JMenuBar menuBar = new JMenuBar();
        JMenu shapeMenu = new JMenu("Shape");
        menuBar.add(shapeMenu);
        addMenuItem("Line", shapeMenu, shapeSelectAction);
        addMenuItem("Oval", shapeMenu, shapeSelectAction);
        addMenuItem("Rectangle", shapeMenu, shapeSelectAction);

        // Add the components to the frame
        JPanel contentPane = new JPanel();
        contentPane.add(toolbar);
        setJMenuBar(menuBar);
        add(contentPane);

        pack();
        setVisible(true);
    }

    private void addButton(String text, JToolBar toolbar, Action action) {
        JButton button = new JButton(action);
        button.setText(text);
        toggleGroup.add(button);
        toolbar.add(button);
    }

    private void addMenuItem(String text, JMenu menu, Action action) {
        JMenuItem menuItem = new JMenuItem(action);
        menuItem.setText(text);
        menu.add(menuItem);
    }

    public static void main(String[] args) {
        new ShapeSelector();
    }
}

このコードでは、カスタム アクションの ShapeSelectAction が使用されます。ツールバー ボタンとメニュー項目の両方で、1 つを選択すると他のボタンの選択が自動的に解除されます。

以上がスイング ボタンとメニュー項目を同期して排他的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。