Home >Java >javaTutorial >How Can I Dynamically Update a JTabbedPane\'s Look and Feel After Adding New Tabs in Swing?

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

Susan Sarandon
Susan SarandonOriginal
2024-12-03 13:19:10856browse

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

Updating JTabbedPane Look and Feel Effectively

In Swing applications, JTabbedPane allows for the creation of tabbed panes. Sometimes, the need arises to change the application's look and feel (L&F) dynamically. However, doing so may not always update the JTabbedPane as expected.

Issue: After adding a new tab in JTabbedPane, changing the L&F isn't reflected in the new tab.

Solution: To address this issue, consider the following approach:

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;
    }
}

Explanation:

  • A JToolBar is created, offering a dropdown to select different L&Fs.
  • When an L&F is selected, its class name is set as the L&F of the UI.
  • The SwingUtilities.updateComponentTreeUI(tabbedPane) command triggers the update of the L&F for the specific JTabbedPane instance (tabbedPane).

This solution allows for dynamic L&F changes, ensuring that the JTabbedPane, along with the newly added tab, reflects the selected L&F.

The above is the detailed content of How Can I Dynamically Update a JTabbedPane\'s Look and Feel After Adding New Tabs in Swing?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn