gpt4 book ai didi

java - 为什么要使类静态更改字体和背景颜色?

转载 作者:行者123 更新时间:2023-12-01 21:47:45 26 4
gpt4 key购买 nike

我有 2 个类,一个 MainClass 和一个 AdminPageAdminPage 仅由带有文本 AdminPageJLabel 组成。我使用Nimbus 外观和感觉

如果我创建一个新的AdminPage并将其放入MainClass中,它看起来像这样:

AdminPage adminPage = new AdminPage();

without_static

但是如果我将AdminPage的修饰符更改为static,字体就会变成粗体,背景也会改变:

static AdminPage adminPage = new AdminPage();

with_static

我真的不明白为什么会发生这种情况。它没有给我带来任何问题,但却给我带来了很多困惑。我想这与 UIManager 设置外观和感觉的方式有关,但我无法查明确切的原因。

如有解释,我们将不胜感激!

<小时/>

这是我的 mcve -代码:

MainClass.java:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import net.miginfocom.swing.MigLayout;

public class MainClass extends JFrame {
private static final long serialVersionUID = 1L;

JPanel centerPanel = new JPanel();
AdminPage adminPage = new AdminPage();

public MainClass() {
setBounds(300, 50, 300, 300);
setLayout(new MigLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
centerPanel.setLayout(new MigLayout());
centerPanel.add(adminPage);
add(centerPanel, "growx, wrap");
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

MainClass window = new MainClass();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}

AdminPage.java:

import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;

public class AdminPage extends JPanel {
private static final long serialVersionUID = 1L;

JPanel contentPanel = new JPanel();
JLabel testLabel = new JLabel("Adminpage");

public AdminPage() {
setLayout(new MigLayout());
contentPanel.setLayout(new MigLayout());

contentPanel.add(testLabel);
add(contentPanel);
}
}

编辑:

感谢comment from Henning Luther我尝试以静态方式初始化 UIManager:

static {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
catch (Exception ex) {
}
}

但是我的类仍然没有使用预期的 L&F。

最佳答案

您在 AdminPage 实例化后设置外观和感觉,这就是为什么不应用于它。在 UIManager 中设置时,所有现有 UI 实例的外观和感觉不会更改。由于您将 AdminPage 设置为静态,因此它在类加载时和执行 main 之前实例化。

关于java - 为什么要使类静态更改字体和背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com