Swing/LookAndFeelChangeListener のバックアップソース(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/LookAndFeelChangeListener へ行く。
--- category: swing folder: LookAndFeelChangeListener title: LookAndFeelの変更を取得する tags: [LookAndFeel, UIManager, PropertyChangeListener, JComponent] author: aterai pubdate: 2014-06-23T01:04:57+09:00 description: LookAndFeelの変更を取得するリスナーの作成などを行います。 image: https://lh3.googleusercontent.com/-dbduLE1mbyM/U6b3UwtJj6I/AAAAAAAACH4/AUy3dSpgxMg/s800/LookAndFeelChangeListener.png --- * 概要 [#summary] `LookAndFeel`の変更を取得するリスナーの作成などを行います。 #download(https://lh3.googleusercontent.com/-dbduLE1mbyM/U6b3UwtJj6I/AAAAAAAACH4/AUy3dSpgxMg/s800/LookAndFeelChangeListener.png) * サンプルコード [#sourcecode] #code(link){{ UIManager.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent e) { if (e.getPropertyName().equals("lookAndFeel")) { //String lnf = e.getNewValue().toString(); updateCheckBox("UIManager: propertyChange"); } } }); }} * 解説 [#explanation] 上記のサンプルでは、以下の`3`種類の方法で`LookAndFeel`の変更を取得するテストを行っています。 - `UIManager`: `propertyChange` -- `UIManager.addPropertyChangeListener(PropertyChangeListener)`を使用して、`LookAndFeel`の変更を取得 -- このサンプルでは、初回の`UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());`の後で`PropertyChangeListener`を設定しているので、それには反応しない - `JPanel`: `updateUI` -- `LookAndFeel`の変更(`SwingUtilities.updateComponentTreeUI(...)`が実行)されると、必ず呼び出される`JComponent.updateUI()`をオーバーライドして変更を取得 -- このメソッドをオーバーライドしたコンポーネントのコンストラクタが実行される前に呼び出される場合があるので、子コンポーネントの更新は`EventQueue.invokeLater(...)`を使って一連の`UI`イベントの一番最後に実行する - `JMenuItem`: `actionPerformed` -- このサンプルでは、`JRadioButtonMenuItem`で`LookAndFeel`を切り替えているので、各ボタンに`ActionListener`を追加し、チェックされた時に`LookAndFeel`の変更を取得 -- アクションが実行された時点では、`LookAndFeel`の変更が完了しておらず、`UIManager`のプロパティ値も前の`LookAndFeel`のままなので、その値の取得は`EventQueue.invokeLater(...)`を使って一連の`UI`イベントの一番最後に実行する * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/UIManager.html#addPropertyChangeListener-java.beans.PropertyChangeListener- UIManager#addPropertyChangeListener(...) (Java Platform SE 8)] * コメント [#comment] #comment #comment