本文介绍了Swing JTabbedPane 中的观感没有更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Java Swing 中创建了一个应用程序.我提供了从菜单更改应用程序外观的选项,但是在 JTabbedPane 中添加新选项卡后,它没有更新为新外观.

I have created an application in Java Swing. I offer the option to change the look and feel of the application from a menu, but after adding a new tab in JTabbedPane, it is not getting updated with the new look and feel.

我已经用过这个代码:

Window windows[] = Frame.getWindows();
for(Window window : windows) {
    SwingUtilities.updateComponentTreeUI(window);
}

推荐答案

利用@Andrew 的 example 和这个旧的 事情,它似乎对我有用.

Leveraging @Andrew's example and this old thing, it seems to work for me.

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

/**
* @see https://stackoverflow.com/a/11949899/230513
* @see https://stackoverflow.com/a/5773956/230513
*/
public class JTabbedText {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            private final JTabbedPane jtp = new JTabbedPane();

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                jtp.addTab("Model", createPanel());
                jtp.addTab("View", createPanel());
                jtp.addTab("Control", createPanel());

                f.add(createToolBar(f), BorderLayout.NORTH);
                f.add(jtp, BorderLayout.CENTER);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }

    private static JToolBar createToolBar(final Component parent) {
        final UIManager.LookAndFeelInfo[] available =
            UIManager.getInstalledLookAndFeels();
        List<String> names = new ArrayList<String>();
        for (LookAndFeelInfo info : available) {
            names.add(info.getName());
        }
        final JComboBox combo = new JComboBox(names.toArray());
        String current = UIManager.getLookAndFeel().getName();
        combo.setSelectedItem(current);
        combo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                int index = combo.getSelectedIndex();
                try {
                    UIManager.setLookAndFeel(
                        available[index].getClassName());
                    SwingUtilities.updateComponentTreeUI(parent);
                } catch (Exception e) {
                    e.printStackTrace(System.err);
                }
            }
        });
        JToolBar bar = new JToolBar("L&F");
        bar.add(combo);
        return bar;
    }

    private static Box createPanel() {
        Box panel = new Box(BoxLayout.X_AXIS);
        JLabel label = new JLabel("Code: ", JLabel.LEFT);
        label.setAlignmentY(JLabel.TOP_ALIGNMENT);
        JTextArea text = new JTextArea(4, 16);
        text.setAlignmentY(JTextField.TOP_ALIGNMENT);
        text.append("#" + panel.hashCode());
        text.append("
#" + label.hashCode());
        text.append("
#" + label.hashCode());
        panel.add(label);
        panel.add(text);
        return panel;
    }
}

这篇关于Swing JTabbedPane 中的观感没有更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-12 04:24