当前位置: 首页 > 知识库问答 >
问题:

Swing JTabbedPane中的外观没有更新

强金鑫
2023-03-14

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

我已经使用了这段代码:

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

共有1个答案

卞俊贤
2023-03-14

借@Andrew的例子和这个老东西,似乎对我管用。

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("\n#" + label.hashCode());
        text.append("\n#" + label.hashCode());
        panel.add(label);
        panel.add(text);
        return panel;
    }
}
 类似资料:
  • Android 2.3.3 我有两个旋转器,一个使用Strings.xml(静态)中的string-array填充,另一个使用适配器填充。 第一个旋转器(静态)如下所示 第二个旋转器(动态)如下所示 我可以改变外观和感觉的动态旋转,以类似于静态旋转?如果是,怎么做?

  • 问题内容: 我正在为更大的GUI应用程序编写脚本。主应用程序窗口使用系统的窗口,但我希望脚本的GUI使用Nimbus 。创建GUI后,我想将其设置回原始。我觉得下面的SSCCE应该可以工作,但是我在使用对象时遇到了麻烦。 问题答案: 一般来说,混合LAF并不是一个好主意。这个问题就是一个例子。 Nimbus LAF中有某些内容可能不允许您执行此操作。按原样运行代码。它将LAF设置为,然后重置LAF

  • 问题内容: 通过网络嵌套更新,打印“ abc已更新”,但实际值在Redis数据库中不更新。 注意:-上面的代码在localhost上有效,但更新未在heroku-redistogo上显示。 编辑:-我在本地主机上运行代码,redis连接到Redistogo。使用以下代码:- 设置快速会议:- 我还使用以下代码创建了另一个redisClient: 问题答案: 在Heroku上运行此代码时,您是否在控

  • 我正在为Django管理员设置: model.py 在admin.py 对此,我得到了以下错误: (admin. E202)“磁盘。文件”没有“磁盘。设置”的外键 根据https://docs . django project . com/en/dev/ref/models/fields/# django . db . models . foreign key中的文档,它应该可以工作。 我做了一些

  • 问题内容: 到目前为止,我有这个 我正在尝试使主外观看起来像雨云,但是将标题边框更改为Windows。 我的边界是这样的: 有可能吗?如果是的话,有人可以指出我在哪里看?我现在很困惑。:\ 谢谢。 问题答案: 我做完了 您必须创建UI的各个部分,然后调用UIManager.setLookAndFeel()来更改外观,然后创建其他部分。更像是骇客。

  • 主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,ShapeMaker.java,FacadePatternDemo.java外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 介绍 意图:为子系统中的