Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengemas kini Rupa dan Rasa JTabbedPane Secara Dinamik Selepas Menambah Tab Baharu dalam Swing?

Bagaimanakah Saya Boleh Mengemas kini Rupa dan Rasa JTabbedPane Secara Dinamik Selepas Menambah Tab Baharu dalam Swing?

Susan Sarandon
Susan Sarandonasal
2024-12-03 13:19:10856semak imbas

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

Mengemas kini Rupa dan Rasa JTabbedPane dengan Berkesan

Dalam aplikasi Swing, JTabbedPane membenarkan penciptaan anak tetingkap tab. Kadangkala, keperluan timbul untuk menukar rupa dan rasa (L&F) aplikasi secara dinamik. Walau bagaimanapun, berbuat demikian mungkin tidak sentiasa mengemas kini JTabbedPane seperti yang dijangkakan.

Isu: Selepas menambah tab baharu dalam JTabbedPane, menukar L&F tidak ditunjukkan dalam tab baharu.

Penyelesaian: Untuk menangani isu ini, pertimbangkan perkara berikut pendekatan:

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

Penjelasan:

  • JToolBar dicipta, menawarkan dropdown untuk memilih L&F yang berbeza.
  • Apabila L&F dipilih, nama kelasnya ditetapkan sebagai L&F UI.
  • The Perintah SwingUtilities.updateComponentTreeUI(tabbedPane) mencetuskan kemas kini L&F untuk tika JTabbedPane tertentu (tabbedPane).

Penyelesaian ini membenarkan perubahan L&F dinamik, memastikan JTabbedPane, bersama-sama dengan tab yang baru ditambah , mencerminkan L&F yang dipilih.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas kini Rupa dan Rasa JTabbedPane Secara Dinamik Selepas Menambah Tab Baharu dalam Swing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn