では 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ポイント
- 色付きボタンでON/OFF → 緑=ON、赤=OFF
flags[0] ^= FLAGでビット単位で切り替え、1つの整数で状態管理updateButtonメソッドでボタンの表示と色を同期- 終了ボタンで最終状態をまとめて表示
このGUIを動かすと:
- ボタンをクリックするだけでON/OFFが切り替わる
- 状態は色と文字で直感的にわかる
- ビット演算を使って効率的に管理できる


