メニューを使用して Java Swing アプリケーションのルック アンド フィールを変更すると、新しく追加されたアプリケーションに変更が反映されない場合があります。 JTabbedPane。 SwingUtilities.updateComponentTreeUI() を利用しているにもかかわらず、問題は解決しません。
解決策には、フレーム内の JTabPanes を含むフレーム全体の UI を更新することが含まれます。
Window windows[] = Frame.getWindows(); for(Window window : windows) { SwingUtilities.updateComponentTreeUI(window); }
この概念を拡張することで、より堅牢な実装を実現できます。 JTabPanes を含む Swing アプリケーションのルック アンド フィールを動的に更新する例を次に示します。
public class JTabbedText { // ... (code omitted for brevity) private static JToolBar createToolBar(final Component parent) { // ... (code omitted for brevity) combo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { int index = combo.getSelectedIndex(); try { UIManager.setLookAndFeel( available[index].getClassName()); // Update the UI of all windows Window[] windows = Window.getWindows(); for (Window window : windows) { SwingUtilities.updateComponentTreeUI(window); } } catch (Exception e) { e.printStackTrace(System.err); } } }); // ... (code omitted for brevity) } // ... (code omitted for brevity) }
このアプローチにより、ルック アンド フィールへの変更が JTabPanes を含むアプリケーションのすべての部分に確実に反映されます。一貫したユーザー エクスペリエンスを提供します。
以上がUIManager を変更した後、Swing JTabbedPane のルック アンド フィールが更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。