更改Swing进度条的外观和感觉

时间:2011-05-04 19:34:13

标签: java swing look-and-feel jprogressbar

我一直试图改变UIManager,让这些看起来很愚蠢的绿色方块消失。如何更改用户的外观和感觉?它是系统依赖的吗?编译我的代码的其他人有一个恒定的渐变。理想情况下,它只是一个实心方块,而不是较小的块。

由于

enter image description here

4 个答案:

答案 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