【问题标题】:Changing between two instances of MetalLookAndFeel在 MetalLookAndFeel 的两个实例之间切换
【发布时间】:2018-12-06 23:08:02
【问题描述】:

是否可以有两个不同的 MetalLookAndFeel 实例并在运行时在它们之间进行更改?我正在为一个名为 MARS(MIPS Assembly IDE) 的 IDE 设计一个主题引擎,我要么需要一个自定义的外观和感觉,让我能够操纵每个组件的颜色,要么我将使用默认的 MetalLookAndFeelUIManager改变颜色。

我查看了 Java 自己的LookAndFeel 实现,但不明白我该怎么做。如果有人想写CustomLookAndFeel,没有教程可以遵循,所以我想出了一个这样的解决方案。

是否可以有两个MetalLookAndFeel 实例,一个更改颜色,一个是默认值,并在运行时在它们之间切换?如果没有,可以做些什么来完成我想要做的事情?

【问题讨论】:

  • 谢谢,确实很高兴听到这个消息。但我要问的是:是否可以有两个相同LookAndFeel 的实例并在它们之间切换? 你链接的程序在不同的LookAndFeels 之间切换,不完全是我的'米之后。
  • 是的,我的错。只见树木不见森林。 :P

标签: java swing user-interface look-and-feel


【解决方案1】:

作为一个白痴并且不了解继承的实际工作原理会导致一些问题......解决方案很简单。子类MetalLookAndFeel 并使用UIManager.setLookAndFeel(String className) 在原始MetalLookAndFeel 和子类CustomLookAndFeel 之间切换。

子类CustomLookAndFeel

import javax.swing.plaf.metal.MetalLookAndFeel;

public class CustomMetalLookAndFeel extends MetalLookAndFeel {

    private static final long serialVersionUID = -5415261270648192921L;
}

Main Method(需要InvokeLater之类的但是我太懒了):

public static void main(String[] args) {
    UIManager.installLookAndFeel("CustomMetal", "laf.CustomMetalLookAndFeel");
    try {
        UIManager.setLookAndFeel("laf.CustomMetalLookAndFeel");
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e1) {
        e1.printStackTrace();
    }
    UIManager.getLookAndFeelDefaults().put("Panel.background", new ColorUIResource(Color.RED));

    JFrame f = new JFrame();
    JPanel p = new JPanel();
    JButton j = new JButton("100000");
    j.addActionListener(e -> {
        try {
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e1) {
            e1.printStackTrace();
        }
        SwingUtilities.updateComponentTreeUI(f);
    });
    p.add(j);
    f.add(p);
    f.pack();
    f.setVisible(true);
}

【讨论】:

  • 加一个,不仅可以解决问题,还可以反馈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 2014-02-19
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多