【发布时间】:2013-07-10 09:36:06
【问题描述】:
我编写了一个 JApplet,并在初始化时为 Nimbus L&F 设置了颜色。
当我通过 Netbeans 或 Google Chrome 运行小程序时,有 9/10 次发生按钮背景设置为深色,但有时 Nimbus 无法设置颜色。
这是一个 SSCCE:
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import javax.swing.UIManager;
public class NimbusColors extends javax.swing.JApplet {
// colors and look and feel
Color buttonBackgroundColor;
Color buttonTextColor;
Color textAreaBackgroundColor;
Color textAreaTextColor;
Color skinColor;
Color defaultButtonBackgroundColor = Color.decode("#4a4a4a");
Color defaultButtonTextColor = Color.decode("#cecece");
Color defaultTextAreaBackgroundColor = Color.decode("#414141");
Color defaultTextAreaTextColor = Color.decode("#cecece");
Color defaultSkinColor = Color.decode("#353535");
Color progressColor = Color.decode("#00FFFF");
@Override
public void init() {
getContentPane().setBackground(defaultSkinColor);
UIManager.put("TextArea.background", defaultTextAreaBackgroundColor);
UIManager.put("TextArea.foreground", defaultTextAreaTextColor);
UIManager.put("control", defaultTextAreaBackgroundColor);
UIManager.put("nimbusLightBackground", defaultSkinColor);
UIManager.put("background", defaultSkinColor);
UIManager.put("text", defaultButtonTextColor);
UIManager.put("ComboBox.background", defaultSkinColor.darker().darker());
UIManager.put("Button.background", defaultSkinColor);
UIManager.put("info", defaultSkinColor.brighter().brighter());
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NimbusColors.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
/* Create and display the applet */
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
initComponents();
}
});
} catch (InterruptedException | InvocationTargetException ex) {
System.exit(11);
}
}
private void initComponents() {
jButtonBrowseFS = new javax.swing.JButton();
jButtonBrowseFS.setText("Browse");
jButtonBrowseFS.setToolTipText("Browse your filesystem to select files to upload");
jButtonBrowseFS.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jButtonBrowseFS.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButtonBrowseFS)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButtonBrowseFS)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}
private javax.swing.JButton jButtonBrowseFS;
}
我已经在 Netbeans 7.3.1 中尝试了这段代码,创建了一个新的 Java 项目并添加了一个新的 JApplet 文件。如果我从 Netbeans 运行文件十几次,有时按钮背景是暗的,有时不是。
任何人都可以复制这种奇怪的行为吗?怎么回事?
更新 1:我运行的是 Windows 8 Pro
【问题讨论】:
-
@hellzone 我正在使用 jdk1.7.0_25。请尝试调整窗口大小,单击按钮等,然后重试。我不认为这取决于netbeas版本,因为我在谷歌浏览器中运行完整小程序时遇到了类似的问题
-
我尝试了所有方法,但没有任何改变。安装 jdk 1.6 并尝试使用它。 jdk 1.7 可能是问题所在。
-
@hellzone 在实际的小程序中,我使用 Java 7 的特性,所以如果它是 Java 7 的错误,我必须接受它......
-
@PaoloM : Stackoverflow 上 99.9 % 的人可能甚至不会尝试测试您的案例,原因很简单,他们可能会犹豫构建一个 html 文件来测试以下代码你的。为了让别人以更简单的方式测试您的代码,在发布与
JApplet/Applet相关的代码时,必须在.java file中也插入这一小行,这样就不必编写html 文件。/**<applet code="NimbusColors.java" width=500 height=500></applet>*/现在可以简单地写javac NimbusColors.java编译然后appletviewer NimbusColors.java运行它:-) -
@PaoloM : 同样在这里,只是一次,在多次尝试中,我得到了这个白色按钮,虽然大多数时候它是灰色的,可能是
Nimbus中的一个错误,它有一些问题总是:(
标签: java swing applet look-and-feel nimbus