2012-06-21 35 views
2

我知道這個問題已經回答過,但它只是不適合我。我遵循從這裏的指示:How to change JProgressBar color?不能在Mac OS中改變JProgressBar的顏色外觀

import javax.swing.*; 
import java.awt.*; 

public class ProgressBarTest extends JFrame { 

    public static void main(String args[]) { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     UIManager.put("ProgressBar.background", Color.orange); 
     UIManager.put("ProgressBar.foreground", Color.black); 
     UIManager.put("ProgressBar.selectionBackground", Color.red); 
     UIManager.put("ProgressBar.selectionForeground", Color.green); 
     JProgressBar progressBar = new JProgressBar(0,100); 
     progressBar.setValue(50); 
     f.add(progressBar, BorderLayout.PAGE_END); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

} 

我得到的所有是舊的顏色。

AquaProgressBarUI

我使用的是Mac OS X 10.7.3和Java 1.6。我嘗試了CrossPlatformLookAndFeel,它適用於新顏色。不過,我希望這在默認的外觀和感覺。我怎樣才能做到這一點?

+0

1 + upvote張貼一個有效的[sscce](http://sscce.org)格式化代碼在您的第一篇文章在這裏。 –

+0

但是你的代碼適合我。我看到要求的背景和前景色很好。我在運行Java 1.7的Windows 7機器上。 –

+0

我使用的是Mac OS X 10.7.3 Java 1.6,我得到了您在截圖中看到的內容。 @HovercraftFullOfEels:這是我的第二篇文章。謝謝。 – akashnil

回答

4

重寫外觀&感覺默認值,在之前進行更改,然後在event dispatch thread上構建GUI,如下所示。

com.apple.laf.AquaLookAndFeel上,進度條的UI委託是com.apple.laf.AquaProgressBarUI的實例。正如您發現的那樣,它忽略了許多有利於本地組件的默認值。如果需要新穎的配色方案,請考慮提供您自己的UI代表,如here所示。

AquaProgressBarUI

AquaProgressBarUI

CustomProgressUI:

CustomProgressUI

進度UI默認值:

 
ProgressBar.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238] 
ProgressBar.border: [email protected] 
ProgressBar.cellLength: 1 
ProgressBar.cellSpacing: 0 
ProgressBar.cycleTime: 3000 
ProgressBar.font: [email protected] 
ProgressBar.foreground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0] 
ProgressBar.horizontalSize: javax.swing.plaf.DimensionUIResource[width=146,height=12] 
ProgressBar.repaintInterval: 20 
ProgressBar.selectionBackground: javax.swing.plaf.ColorUIResource[r=255,g=255,b=255] 
ProgressBar.selectionForeground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0] 
ProgressBar.verticalSize: javax.swing.plaf.DimensionUIResource[width=12,height=146] 
ProgressBarUI: com.apple.laf.AquaProgressBarUI 

SSCCE:

import java.awt.*; 
import javax.swing.*; 

public class ProgressBarTest extends JFrame { 

    public static void main(String args[]) { 
     UIManager.put("ProgressBar.repaintInterval", 100); 
     UIManager.put("ProgressBar.border", 
      BorderFactory.createLineBorder(Color.blue, 2)); 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setLayout(new GridLayout(0, 1, 5 , 5)); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.add(createBar()); 
       f.add(createBar()); 
       f.add(createBar()); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 

      private JProgressBar createBar() { 
       JProgressBar progressBar = new JProgressBar(0, 100); 
       progressBar.setValue(50); 
       return progressBar; 
      } 
     }); 
    } 
} 
+0

所以,沒有**簡單的**方法來使用_different colors_多個JProgressbar's,但默認的AquaProgressBarUI的_same style_,我是否正確? (我將無法編寫我自己的UI委託,這看起來會和默認的一樣好) 感謝您的回覆。我沒有足夠的聲望來直接投票或附加圖片。 – akashnil

+0

是的,每個UI委託實現都擁有它的設置;它可能會採用其他L&F中使用的全部,部分或全部。同時,沒有任何東西排除實例化'MetalProgressBarUI'並在Aqua中使用它,儘管我從來沒有這樣做過。準備好後,您可以點擊[空勾號]接受此答案(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 )在左邊。 – trashgod

+0

+1 hmmmm [有趣的外觀](https://developer.apple.com/library/mac/#technotes/tn2007/tn2196。html) – mKorbel