Nimbus L& F - 更改进度栏的背景颜色 [英] Nimbus L&F - Change Background color of Progress Bar
问题描述
我使用Netbeans编辑器开发一个使用Java的GUI应用程序。
我把一个简单的进度条放在JFrame中。
我使用JDK7开发项目
i'm developing a little GUI application with Java using Netbeans Editor. I've put in a JFrame a simple Progress Bar. I'm developing the project with JDK7
我想将背景颜色从默认橙色更改为个人颜色。我已经尝试所有的属性为颜色更改,但当我运行程序的颜色仍然相同。
I want to change the background Color from default Orange to a personal one. I've already tried all the properties for the color changing but when i run the program the color still the same.
我已经尝试使用
ProgressBar1 .setBackground(new java.awt.Color(0,204,255));
I've already tried using ProgressBar1.setBackground(new java.awt.Color(0, 204, 255));
和
UIManager.put("ProgressBar.background", Color.YELLOW);
UIManager.put("ProgressBar.foreground", Color.MAGENTA);
UIManager.put("ProgressBar.selectionBackground", Color.red);
UIManager.put("ProgressBar.selectionForeground", Color.green);
相同结果.....背景总是橙色
Same result..... The background is always orange
这里是我的测试项目的代码
Here the code of my test project
public class Frame extends javax.swing.JFrame
{
public Frame()
{
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jProgressBar1 = new javax.swing.JProgressBar();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jProgressBar1.setBackground(new java.awt.Color(0, 204, 255));
jProgressBar1.setValue(75);
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(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[])
{
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 ex) {
java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Frame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JProgressBar jProgressBar1;
// End of variables declaration
}
您启动代码
and this is the result when you launch the code
橙色....
编辑
使用以下代码
EDIT With the following code
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled].backgroundPainter", new FillPainter(Color.MAGENTA));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled].backgroundPainter", new FillPainter(Color.MAGENTA));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Indeterminate].progressPadding", new FillPainter(Color.ORANGE));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled].foregroundPainter", new FillPainter(Color.GREEN));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled].foregroundPainter", new FillPainter(Color.GREEN));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].foregroundPainter", new FillPainter(Color.GREEN));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled+Finished].foregroundPainter", new FillPainter(Color.GREEN));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled+Indeterminate].foregroundPainter", new FillPainter(Color.GREEN));
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Indeterminate].foregroundPainter", new FillPainter(Color.GREEN)); `
之后
javax.swing.UIManager.setLookAndFeel(info.getClassName());
我已成功更改背景颜色。
但是现在的颜色是plain,没有橙色的渐变。
I've successfully change the color of background. But now the color is "plain", there is no gradient like the orange color.
可以使用与原始颜色相同的效果来更改颜色?
Is it possible to change color with the same effect of the original color?
推荐答案
-
也许(
颜色
和Font
)讨论Nimbus看和感觉
必须查看此主题
ProgressBar [Disabled + Finished] .foregroundPainter
ProgressBar [Disabled + Indeterminate] .foregroundPainter
ProgressBar [Disabled] .backgroundPainter
ProgressBar [Disabled] .foregroundPainter
ProgressBar [Enabled + Finished] .foregroundPainter
ProgressBar [ Enabled + Indeterminate] .foregroundPainter
ProgressBar [Enabled + Indeterminate] .progressPadding
ProgressBar [Enabled] .backgroundPainter
ProgressBar [Enabled] .foregroundPainter
ProgressBar[Disabled+Finished].foregroundPainter ProgressBar[Disabled+Indeterminate].foregroundPainter
ProgressBar[Disabled].backgroundPainter ProgressBar[Disabled].foregroundPainter ProgressBar[Enabled+Finished].foregroundPainter ProgressBar[Enabled+Indeterminate].foregroundPainter ProgressBar[Enabled+Indeterminate].progressPadding ProgressBar[Enabled].backgroundPainter ProgressBar[Enabled].foregroundPainter
。
4.也许最简单的方法是从 Nimbus默认
的顶部更改 nimbusOrange
这种变化无处不在,
.
4. maybe easiest for you will be to change nimbusOrange
from the top of Nimbus default
s, but this change is everywhere,
有趣的输出到GUI,改变了控制颜色
,例如
funny output to the GUI with changed Control Color
, for example
UIManager.getLookAndFeelDefaults()。put(nimbusOrange,(new Color(127,255,191)));
UIManager.getLookAndFeelDefaults().put("nimbusOrange", (new Color(127, 255, 191)));
。
5.例如
. 5. for example
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import javax.swing.*;
public class MyPopupWithNimbus {
public MyPopupWithNimbus() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JList list = new JList();
panel.add(list);
JProgressBar progress = new JProgressBar();
progress.setStringPainted(true);
progress.setString("60 pct");
progress.setValue(60);
frame.add(panel);
frame.add(progress, BorderLayout.SOUTH);
JPopupMenu menu = new JPopupMenu();
menu.add(new JMenuItem("A"));
menu.add(new JMenuItem("B"));
menu.add(new JMenuItem("C"));
JMenu jmenu = new JMenu("D");
jmenu.add(new JMenuItem("E"));
menu.add(jmenu);
frame.setVisible(true);
menu.show(frame, 50, 50);
}
public static void main(String[] args) {
try {
for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(laf.getName())) {
UIManager.setLookAndFeel(laf.getClassName());
UIManager.getLookAndFeelDefaults().put("nimbusOrange", (new Color(127, 255, 191)));
UIManager.getLookAndFeelDefaults().put("PopupMenu[Enabled].backgroundPainter",
new FillPainter(Color.ORANGE));
}
}
} catch (Exception e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyPopupWithNimbus aa = new MyPopupWithNimbus();
}
});
}
}
class FillPainter implements Painter<JComponent> {
private final Color color;
FillPainter(Color c) {
color = c;
}
@Override
public void paint(Graphics2D g, JComponent object, int width, int height) {
g.setColor(color);
g.fillRect(0, 0, width - 1, height - 1);
}
}
这篇关于Nimbus L& F - 更改进度栏的背景颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!