Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MetalLookAndFeel的两个实例之间更改_Java_Swing_User Interface_Look And Feel - Fatal编程技术网

Java 在MetalLookAndFeel的两个实例之间更改

Java 在MetalLookAndFeel的两个实例之间更改,java,swing,user-interface,look-and-feel,Java,Swing,User Interface,Look And Feel,是否可能有两个不同的MetalLookAndFeel实例,并在运行时在它们之间进行更改?我正在为一个名为MARS(MIPS Assembly IDE)的IDE设计一个主题引擎,我要么需要一个自定义的外观,让我可以操纵每个组件的颜色,要么使用默认的MetalLookAndFeel和UIManager来更改颜色 我看了Java自己的LookAndFeel实现,但不明白如何实现。如果想编写一个CustomLookAndFeel,没有教程可供遵循,所以我想出了这样一个解决方案 是否可以有两个MetalL

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

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


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

作为一个白痴,不理解继承实际上是如何工作的,这会导致一些问题。。。解决办法很简单。子类
MetalLookAndFeel
并使用
UIManager.setLookAndFeel(字符串类名称)
在原始
MetalLookAndFeel
和子类
CustomLookAndFeel
之间切换

子类
CustomLookAndFeel

import javax.swing.plaf.metal.MetalLookAndFeel;

public class CustomMetalLookAndFeel extends MetalLookAndFeel {

    private static final long serialVersionUID = -5415261270648192921L;
}
Main方法
(需要
InvokeLater
等等,但我太懒了):


谢谢,听到这个消息真是太好了。但我想问的是:有可能有两个相同的
LookAndFeel
实例并在它们之间切换吗?你链接的程序在不同的
LookAndFeel
s之间切换,这不完全是我想要的。是的,我的错。我看不见森林,看不见树木PPlus one不仅用于解决问题,还用于报告。
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);
}