【发布时间】:2019-05-17 19:50:16
【问题描述】:
我想在 Windows 10 中为 Java Swing 应用程序获取一个白色背景的 JButton。
我尝试了以下方法。我包含一个带有两个框架的功能基本示例,都有一个面板和一个按钮,第一个不包含任何自定义。按钮和面板具有浅蓝色/灰色(实际感知颜色取决于屏幕)。对于第二帧,我尝试显式绘制白色面板和按钮。
package com.example.test2;
import java.awt.Color;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test2 {
public Test2() {
// Frame 1, standard background
JFrame frame1 = new JFrame();
JPanel panel1 = new JPanel();
JButton button1 = new JButton("Button 1");
// Frame 2, white background
JFrame frame2 = new JFrame();
JPanel panel2 = new JPanel();
JButton button2 = new JButton("Button 2");
panel2.setBackground(Color.WHITE);
button2.setBackground(Color.WHITE);
// Add Components for Frame1 and show it
frame1.add(panel1);
panel1.add(button1);
frame1.setSize(300, 200);
frame1.setVisible(true);
// Add Components for Frame2 and show it
frame2.add(panel2);
panel2.add(button2);
frame2.setSize(300, 200);
frame2.setLocation(250,150);
frame2.setVisible(true);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
} catch (ClassNotFoundException ex) {
Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
}
Test2 t = new Test2();
}
}
这是两帧的结果:
我怎样才能让button2有白色背景?
请注意,我已经尝试过此解决方案 (Changing the background color of JButton always shows as grey),但它在使用 Windows 10 并设置 L&F UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); 时不起作用。
【问题讨论】:
-
嗨,我不认为这是重复的,我的问题是特定于 Java Swing 中的 Windows 10 使用
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );而所提到的问题的 OP 没有说明他的具体 L&F。该问题中建议的解决方法不会在此代码和 Windows 10(Oracle Java JDK 8)中产生任何结果。 -
据我了解,您正在尝试获得与链接问题中的结果相似的结果?但是是白色的?
-
根据我对链接问题的阅读和测试,有两个选项:a)循环函数和 b)删除他的代码中的 L&F 集。我已经尝试过循环功能,但它在我的情况下不起作用 -Windows 10 并设置 L&F-。并且移除 L&F 不是一种选择。我想要 Windows L&F,因此我调用 UIManager.getSystemLookAndFeelClassName。我的问题是针对 Windows 10 及其 SystemLookAndFeel 的。如果您可以使链接的示例在这种情况下工作-我不能-,那么欢迎一个工作且可运行的示例。
-
你试过这个answer它可能与Windows无关,但谁知道。我无法在 Windows 上进行测试,因为我没有任何 Windows PC,所以我所能做的就是以这种方式提供支持。
-
感谢您的建议。它也不起作用。正如你提到的,Windows L&F 似乎不支持改变它。最接近的解决方案是 Sambit 提供的解决方案,尽管解决方案没有解决保留大小和外边框颜色的问题。