Java | フラグ管理を使ったメニューのON/OFFを作るステップ実装

Java Java
スポンサーリンク

では Java Swing を使ったGUI版メニュー を作り、ON/OFFを色付きボタンで切り替えられるようにします。
ビット演算でフラグ管理しつつ、視覚的に直感的に操作できるようにします。


サンプル:Swing GUI メニュー(色付きON/OFF)

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

public class MenuGUISwing {
    public static void main(String[] args) {
        // フラグ定義
        final int MUSIC = 1 << 0;   // 0001
        final int SOUND = 1 << 1;   // 0010
        final int NOTIFY = 1 << 2;  // 0100

        int[] flags = {0}; // 配列で参照渡しできるようにする

        // JFrameの作成
        JFrame frame = new JFrame("メニューON/OFF");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        frame.setLayout(new GridLayout(4, 1, 10, 10));

        // 音楽ボタン
        JButton musicButton = new JButton("音楽: OFF");
        musicButton.setBackground(Color.RED);
        musicButton.setOpaque(true);
        musicButton.setBorderPainted(false);

        musicButton.addActionListener(e -> {
            flags[0] ^= MUSIC; // ON/OFF切り替え
            updateButton(musicButton, (flags[0] & MUSIC) != 0);
        });

        // 効果音ボタン
        JButton soundButton = new JButton("効果音: OFF");
        soundButton.setBackground(Color.RED);
        soundButton.setOpaque(true);
        soundButton.setBorderPainted(false);

        soundButton.addActionListener(e -> {
            flags[0] ^= SOUND;
            updateButton(soundButton, (flags[0] & SOUND) != 0);
        });

        // 通知ボタン
        JButton notifyButton = new JButton("通知: OFF");
        notifyButton.setBackground(Color.RED);
        notifyButton.setOpaque(true);
        notifyButton.setBorderPainted(false);

        notifyButton.addActionListener(e -> {
            flags[0] ^= NOTIFY;
            updateButton(notifyButton, (flags[0] & NOTIFY) != 0);
        });

        // 終了ボタン
        JButton exitButton = new JButton("終了");
        exitButton.addActionListener(e -> {
            JOptionPane.showMessageDialog(frame, "最終状態:\n"
                    + "音楽: " + ((flags[0] & MUSIC) != 0 ? "ON" : "OFF") + "\n"
                    + "効果音: " + ((flags[0] & SOUND) != 0 ? "ON" : "OFF") + "\n"
                    + "通知: " + ((flags[0] & NOTIFY) != 0 ? "ON" : "OFF"));
            frame.dispose();
        });

        // フレームに追加
        frame.add(musicButton);
        frame.add(soundButton);
        frame.add(notifyButton);
        frame.add(exitButton);

        frame.setVisible(true);
    }

    // ボタン表示更新メソッド
    private static void updateButton(JButton button, boolean isOn) {
        if (isOn) {
            button.setText(button.getText().split(":")[0] + ": ON");
            button.setBackground(Color.GREEN);
        } else {
            button.setText(button.getText().split(":")[0] + ": OFF");
            button.setBackground(Color.RED);
        }
    }
}
Java

ポイント

  1. 色付きボタンでON/OFF → 緑=ON、赤=OFF
  2. flags[0] ^= FLAG でビット単位で切り替え、1つの整数で状態管理
  3. updateButton メソッドでボタンの表示と色を同期
  4. 終了ボタンで最終状態をまとめて表示

このGUIを動かすと:

  • ボタンをクリックするだけでON/OFFが切り替わる
  • 状態は色と文字で直感的にわかる
  • ビット演算を使って効率的に管理できる
タイトルとURLをコピーしました