OSDN Git Service

AppConfig編集後のUIの色設定の反映の改善
authorseraphy <seraphy@users.osdn.me>
Thu, 13 Dec 2018 15:24:51 +0000 (00:24 +0900)
committerseraphy <seraphy@users.osdn.me>
Thu, 13 Dec 2018 15:24:51 +0000 (00:24 +0900)
src/main/java/charactermanaj/ui/AppConfigDialog.java
src/main/java/charactermanaj/ui/ImageSelectPanel.java

index a03d834..52f7698 100644 (file)
@@ -436,7 +436,7 @@ public class AppConfigDialog extends JDialog {
 
                add(btnPanel, BorderLayout.SOUTH);
 
-               setSize(400, 400);
+               setSize(600, 400);
                setLocationRelativeTo(getParent());
 
                // Notes
index d89037f..63f71db 100644 (file)
@@ -14,6 +14,8 @@ import java.awt.event.FocusEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -253,13 +255,9 @@ public class ImageSelectPanel extends JPanel {
                        }
                });
 
-               AppConfig appConfig = AppConfig.getInstance();
-
                final Properties strings = LocalizedResourcePropertyLoader.getCachedInstance()
                                .getLocalizedProperties(STRINGS_RESOURCE);
 
-               final Color selectedItemColor = appConfig.getCheckedItemBgColor();
-
                partsSelectTable = new JTable(partsSelectTableModel, columnModel, selectionModel) {
                        private static final long serialVersionUID = 1L;
                        @Override
@@ -275,6 +273,8 @@ public class ImageSelectPanel extends JPanel {
                                        comp.setForeground(getForeground());
                                        if (chk.booleanValue()) {
                                                // チェック済みの場合の背景色
+                                               AppConfig appConfig = AppConfig.getInstance();
+                                               Color selectedItemColor = appConfig.getCheckedItemBgColor();
                                                comp.setBackground(selectedItemColor);
                                        } else {
                                                // 通常の背景色
@@ -354,7 +354,6 @@ public class ImageSelectPanel extends JPanel {
                                }
                        }
                });
-               partsSelectTable.setSelectionBackground(appConfig.getSelectedItemBgColor());
                if (partsCategory.isMultipleSelectable()) {
                        partsSelectTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
                } else {
@@ -491,7 +490,6 @@ public class ImageSelectPanel extends JPanel {
                title = new JLabel(" " + partsCategory.getLocalizedCategoryName() + " ");
 
                final Color defaultTitleColor = title.getForeground();
-               final Color hilightColor = appConfig.getSelectPanelTitleColor();
 
                title.addMouseListener(new MouseAdapter() {
                        @Override
@@ -506,6 +504,8 @@ public class ImageSelectPanel extends JPanel {
                        }
                        @Override
                        public void mouseEntered(MouseEvent e) {
+                               AppConfig appConfig = AppConfig.getInstance();
+                               Color hilightColor = appConfig.getSelectPanelTitleColor();
                                title.setForeground(hilightColor);
                        }
                        @Override
@@ -532,10 +532,46 @@ public class ImageSelectPanel extends JPanel {
                // パネルの初期サイズ
                numOfVisibleRows = partsCategory.getVisibleRows();
                setDisplayMode(DisplayMode.NORMAL);
+
+               // AppConfigによるUIの設定をロードする
+               loadAppConfig();
+       }
+
+       /**
+        * AppConfigによるUIの設定をロードする
+        */
+       private void loadAppConfig() {
+               AppConfig appConfig = AppConfig.getInstance();
+               partsSelectTable.setSelectionBackground(appConfig.getSelectedItemBgColor());
+       }
+
+       /**
+        * AppConfigの変更により最新のUIパラメータを再取り込みするためのリスナ
+        */
+       private final PropertyChangeListener propChangeListener = new PropertyChangeListener() {
+               @Override
+               public void propertyChange(PropertyChangeEvent evt) {
+                       // AppConfigの変更後の再描画で、ただちに最新の設定を使えるようにする
+                       loadAppConfig();
+               }
+       };
+
+       @Override
+       public void addNotify() {
+               super.addNotify();
+               AppConfig.getInstance().addPropertyChangeListener(propChangeListener);
+       }
+
+       @Override
+       public void removeNotify() {
+               AppConfig.getInstance().removePropertyChangeListener(propChangeListener);
+               super.removeNotify();
        }
 
        @Override
        public void doLayout() {
+               // AppConfigのFontサイズ変更はUIManagerの更新で全フレームを再適用するので、
+               // ここで最新のフォントを再適用できるようにする。
                Font font = getFont();
                title.setFont(font.deriveFont(Font.BOLD));
                super.doLayout();