2012-06-21 4 views
2

Я знаю, что на этот вопрос уже был дан ответ, но он просто не работает для меня. Я следовал инструкциям из здесь: How to change JProgressBar color?Невозможно изменить цвет JProgressBar в Mac OS. Внешний вид

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

Но ваш код отлично работает для меня. Я вижу, что требуемый фон и цвет переднего плана прекрасны. Я нахожусь на машине под управлением Windows 7 с Java 1.7. –

+0

Я нахожусь на Mac OS X 10.7.3 Java 1.6, и я получаю то, что вы видите на скриншоте. @HovercraftFullOfEels: Это мой второй пост. Благодарю. – akashnil

ответ

4

Для переопределения Look & Feel по умолчанию, сделайте изменением перед тем построения графического интерфейса пользователя на event dispatch thread, как показано ниже.

В команде com.apple.laf.AquaLookAndFeel делегат пользовательского интерфейса выполнения является экземпляром com.apple.laf.AquaProgressBarUI. Как вы обнаружили, он игнорирует многие значения по умолчанию в пользу собственного компонента. Если требуется новая цветовая схема, подумайте о предоставлении своего собственного делегата интерфейса, как показано на рисунке here.

AquaProgressBarUI:

AquaProgressBarUI

CustomProgressUI:

CustomProgressUI

ProgressBar пользовательского интерфейса по умолчанию:

 
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

Итак, нет ** простого ** способа иметь несколько JProgressbar с _different colors_, но _same style_ по умолчанию AquaProgressBarUI, я прав? (Я не смогу написать собственный делегат пользовательского интерфейса, который будет выглядеть так же хорошо, как и по умолчанию) Спасибо за ответ. У меня недостаточно репутации, чтобы проголосовать или прикрепить фотографии напрямую. – akashnil

+0

Да, каждая реализация делегата пользовательского интерфейса имеет свои настройки; он может принять все, некоторые или ни один из тех, которые используются в других L & Fs. В то же время ничто не мешает создавать экземпляр «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