我一直试图改变UIManager,让这些看起来很愚蠢的绿色方块消失。如何更改用户的外观和感觉?它是系统依赖的吗?编译我的代码的其他人有一个恒定的渐变。理想情况下,它只是一个实心方块,而不是较小的块。
由于
答案 0 :(得分:4)
您是否尝试将其设置为系统(用户)的外观?
设置外观的最简单方法是在调用后启动GUI:
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
// ...
}
话虽如此,上面似乎是Windows XP主题,可能确实是系统(用户)主题。除非有非常正当理由(例如,客户/用户要求),否则我通常会远离GUI中的自定义主题。
也就是说,上面的代码使它依赖于系统,它是 good ,因为它匹配用户的预期。
答案 1 :(得分:2)
“这些看起来很愚蠢的绿色方块”是Windows XP的Look nad Feel的元素。如果您希望它们看起来不同,您可以更改此特定组件的外观。
使用以下解决方法:
try {
javax.swing.UIManager.setLookAndFeel(/* Look and Feel for your JProgressBar*/);
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
MyProgressBar = new javax.swing.JProgressBar();
try {
javax.swing.UIManager.setLookAndFeel(/* Previous, main Look and Feel */);
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
我正在使用此代码为JFileChooser提供另一种外观,并且它可以完美运行。
您只需在创建组件之前更改外观,然后在创建之后恢复上一个组件。
答案 2 :(得分:0)
修改强> 下面的代码更改了整个JFrame的L& F.
static Main m;//Reference to JFrame to be updated
static String maxOSLookAndFeel = "ch.randelshofer.quaqua.QuaquaLookAndFeel";//Package of particular L&F
private void MacOSLFjMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MacOSLFjMenuItemActionPerformed
// TODO add your handling code here:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(maxOSLookAndFeel);
SwingUtilities.updateComponentTreeUI(m);
m.validate();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}//GEN-LAST:event_MacOSLFjMenuItemActionPerformed
<强> Secundo:强> 在我看来(谷歌搜索很多,并通过expirience),当你附加一个新的L&amp; F时,不可能只影响一个JComponent。您可以在整个JFrame中更改L&amp; F,也可以Write your own Swing Component.
实现目标的另一种方法是研究java source code并找到将JProgressBar图像添加到组件的位置,并通过扩展JProgressBar来覆盖此方法。
答案 3 :(得分:0)
可以在Sun Java文档中找到有关Java外观的全面描述,其中:pdf中的Java, Look and Feel Design Guidelines。