ホームページ >Java >&#&チュートリアル >Swing で新しいタブを追加した後、JTabbedPane のルック アンド フィールを動的に更新するにはどうすればよいですか?

Swing で新しいタブを追加した後、JTabbedPane のルック アンド フィールを動的に更新するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 13:19:10856ブラウズ

How Can I Dynamically Update a JTabbedPane's Look and Feel After Adding New Tabs in Swing?

JTabbedPane のルック アンド フィールを効果的に更新する

Swing アプリケーションでは、JTabbedPane を使用してタブ付きペインを作成できます。場合によっては、アプリケーションのルック アンド フィール (L&F) を動的に変更する必要が生じることがあります。ただし、そうすることで常に JTabbedPane が期待どおりに更新されるとは限りません。

問題: JTabbedPane に新しいタブを追加した後、L&F を変更しても新しいタブに反映されません。

解決策: この問題に対処するには、次の点を考慮してください。アプローチ:

import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class JTabbedPaneLookAndFeelUpdate {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

            JTabbedPane tabbedPane = new JTabbedPane();
            tabbedPane.addTab("Tab 1", new JPanel());

            frame.add(createToolbar(tabbedPane), BorderLayout.NORTH);
            frame.add(tabbedPane, BorderLayout.CENTER);

            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

    private static JToolBar createToolbar(JTabbedPane tabbedPane) {
        List<LookAndFeelInfo> availableLooks = new ArrayList<>(Arrays.asList(UIManager.getInstalledLookAndFeels()));
        JComboBox<LookAndFeelInfo> lookAndFeelComboBox = new JComboBox<>(availableLooks.toArray(new LookAndFeelInfo[0]));
        lookAndFeelComboBox.addActionListener(e -> {
            try {
                LookAndFeelInfo selectedLookAndFeel = (LookAndFeelInfo) e.getSource();
                UIManager.setLookAndFeel(selectedLookAndFeel.getClassName());
                SwingUtilities.updateComponentTreeUI(tabbedPane);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        });

        JToolBar toolbar = new JToolBar();
        toolbar.add(new JLabel("Look and Feel:"));
        toolbar.add(lookAndFeelComboBox);
        return toolbar;
    }
}

説明:

  • JToolBar が作成され、さまざまな L&F を選択するためのドロップダウンが提供されます。
  • L&F が作成されたときが選択されている場合、そのクラス名がそのクラスの L&F として設定されます。 UI.
  • SwingUtilities.updateComponentTreeUI(tabbedPane) コマンドは、特定の JTabbedPane インスタンス (tabbedPane) の L&F の更新をトリガーします。

このソリューションでは、動的な L&F の変更が可能になり、 JTabbedPane は、新しく追加されたタブとともに、選択された内容を反映します。 L&F.

以上がSwing で新しいタブを追加した後、JTabbedPane のルック アンド フィールを動的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。