3

JCheckBoxMenuItems を使用して変更可能なオプションを使用して、プログラムにオプション メニューを追加しようとしています。これらのオプションの値が何であれ、プログラムを閉じるときにファイルに保存されます。ファイルはプログラムの起動時に読み込まれ、ブール値に設定された値が読み込まれます (つまり、読み込まれた値が true の場合、項目の横にチェック マークが表示され、値が false の場合は表示されません)。 .

これは私がこれまでに持っているものです:

boolean soundEnabled = true;

JMenu fmOptionsMenu = new JMenu("Options");
    fileMenu.add(fmOptionsMenu);

    JCheckBoxMenuItem omSoundEnable = new JCheckBoxMenuItem("Enable Sound");
    omSoundEnable.addPropertyChangeListener(new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent arg0) {
            soundEnabled = !soundEnabled;
        }
    });
    fmOptionsMenu.add(omSoundEnable);

デフォルト値を設定するにはどうすればよいですか? PropertyChangeListener を使用するのが正しいですか?

4

3 に答える 3

2

状態java.util.Preferencesを永続化するために使用します。完全な例がここsoundEnabledに引用されています。概要では、

  • デフォルトの初期状態を定義します。

    private static final boolean DEFAULT_SOUND_ENABLED = true;
    
  • インスタンス化Preferences:

    Preferences p = Preferences.userRoot().node("org").node("foo").node("Bar");
    
  • 優先状態または定義済みのデフォルトを取得します。

    public static boolean getSoundEnabled() {
        return p.getBoolean("soundEnabled", DEFAULT_SOUND_ENABLED);
    }
    ...
    private boolean soundEnabled = getSoundEnabled();
    
  • メニューのリスナーから呼び出される新しい値を保存します。

    public static void putSoundEnabled(boolean soundEnabled) {
        p.putBoolean("soundEnabled", soundEnabled);
    }
    
于 2013-05-23T18:25:16.713 に答える
2

デフォルト値を設定する方法

プロパティ ファイルを使用して、デフォルト値を保存できます。

PropertyChangeListener を使用するのは正しいですか?

プログラムが閉じたら、各コンポーネントの現在の状態を照会して、その値をプロパティ ファイルに保存できます。

于 2013-05-23T16:15:41.893 に答える
2

これらのオプションの値が何であれ、プログラムを閉じるときにファイルに保存されます。ファイルは、プログラムの開始時に読み込まれ、ブール値に設定された値が読み込まれます (つまり、読み込まれた値が true の場合は項目の横にチェック マークが表示され、値が false の場合はチェック マークが表示されません)。 .

  • JCheckBoxMenuItem.setSelected(boolean b)を使用し、isSelected()

  • setSelectedListenerに追加される前に、値が後で設定された場合に適切なイベントを発生させることができるJCheckBoxMenuItemため、実際に何をしたいかによって異なりますPropertyChangeListenerpropertyChange

  • 私は、JButtonComponents に使用Swing ActionItemListenerますActionListener

于 2013-05-23T16:15:46.390 に答える