では 動的に複数メニュー(最大32個)を管理できるGUI版 を作ります。
各メニューはボタンでON/OFF切り替えでき、現在のビットフラグ状態も表示されます。
サンプル:動的メニュー&ビット表示GUI(最大32個)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DynamicMenuGUI {
public static void main(String[] args) {
// 最大32個のメニューをビットフラグで管理
String[] menuNames = {
"音楽", "効果音", "通知", "ダークモード", "バイブレーション",
"自動保存", "位置情報", "Wi-Fi", "Bluetooth", "マイク",
"カメラ", "画面録画", "省電力", "通知サウンド", "アラーム",
"バックグラウンド同期", "GPS", "データ通信", "振動通知", "モバイルデータ",
"画面回転", "スクリーンショット", "LED通知", "アプリ更新", "位置共有",
"通知履歴", "テーマ", "チャット通知", "メール通知", "SNS通知",
"広告表示", "ログ送信"
};
int[] flags = {0}; // 1つの整数で最大32個のフラグ管理
JFrame frame = new JFrame("動的メニューON/OFF");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 800);
frame.setLayout(new BorderLayout());
// メニューパネル
JPanel menuPanel = new JPanel();
menuPanel.setLayout(new GridLayout(menuNames.length, 1, 5, 5));
JButton[] buttons = new JButton[menuNames.length];
for (int i = 0; i < menuNames.length; i++) {
int bit = 1 << i; // このメニューのビット
buttons[i] = new JButton(menuNames[i] + ": OFF");
buttons[i].setBackground(Color.RED);
buttons[i].setOpaque(true);
buttons[i].setBorderPainted(false);
buttons[i].addActionListener(e -> {
flags[0] ^= bit; // ON/OFF切り替え
updateButton((JButton) e.getSource(), (flags[0] & bit) != 0);
updateFlagLabel(flags[0]); // ビット状態更新
});
menuPanel.add(buttons[i]);
}
// ビットフラグ表示ラベル
JLabel flagLabel = new JLabel("現在のフラグ: 00000000000000000000000000000000");
flagLabel.setFont(new Font("Monospaced", Font.PLAIN, 14));
// 更新メソッド
Runnable updateFlagLabel = () -> flagLabel.setText(
"現在のフラグ: " + String.format("%32s", Integer.toBinaryString(flags[0])).replace(' ', '0')
);
// 初期表示
updateFlagLabel.run();
frame.add(new JScrollPane(menuPanel), BorderLayout.CENTER);
frame.add(flagLabel, BorderLayout.SOUTH);
frame.setVisible(true);
// 内部メソッド
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特徴
- 32個までメニューを追加可能 → 1つの整数で管理
- 各ボタンでON/OFF切り替え → 色で直感的に確認
- 現在のビットフラグも表示 → どのビットが立っているか一目で確認
- ビット演算を使うことで効率的に状態を管理できる
💡 応用アイデア
- フラグを増やす場合は
long(64ビット)や配列で管理 - ON/OFF状態を保存してアプリ再起動時に復元
- フラグに応じて機能を自動ON/OFFする(例:チェックボックス連動)


