2016-08-19 2 views
0

Hier ändern ist, was ich in meinem Versuch habe versucht, in How to change the color of a JSeparator? die Antwort basierend auf einer vertikalen JSeparator ‚s Farbe von Nimbus Standard schwarz auf rot zu ändern:Wie die Farbe eines JSeparator mit dem Nimbus L & F

public class TestFrame extends JFrame { 

    public static void main(String[] args) { 

     TestFrame frame = new TestFrame(); 
     frame.setSize(200, 200); 
     frame.setLayout(new GridBagLayout()); 

     for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       try { 
        UIManager.setLookAndFeel(info.getClassName()); 
       } catch (ClassNotFoundException ex) { 
        Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (InstantiationException ex) { 
        Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (IllegalAccessException ex) { 
        Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (UnsupportedLookAndFeelException ex) { 
        Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       break; 
      } 
     } 
     UIManager.put("Separator.background", Color.red); 
     UIManager.put("Separator.foreground", Color.red); 

     JSeparator separator = new JSeparator(JSeparator.VERTICAL); 
     separator.setPreferredSize(new Dimension(2, 100)); 
     separator.setForeground(Color.red); 
     separator.setBackground(Color.red); 

     frame.add(separator, new GridBagConstraints()); 
     frame.setVisible(true); 

    } 

} 

Noch der vertikale Separator bleibt schwarz. Was soll ich tun?

Hinweis: Ich weiß Nimbus ist das Problem, weil ich versucht, ohne die L & F Nimbus zu setzen und das hat gut funktioniert. Auch zu beachten, dass die Separator[Enabled].backgroundPainter-Eigenschaft scheint die JSeperator aber nicht in der Art und Weise betroffen habe ich gedacht (geändert nur die Hintergrundfarbe gegen die Trennlinie Farbe)

+1

Mögliche Duplikat [Wie die Farbe eines JSeparator ändern?] (Http://stackoverflow.com/questions/13083876/how-to- change-the-color-of-a-jseparator) –

+0

Es ist kein Duplikat @JonnyHenly, da die Antwort dort nur für Metal funktioniert L & F nicht Nimbus –

+0

@SammyGuergachi Dieser Beitrag funktioniert nicht mit der UI, sondern eher mit der Komponente direkt. Es sollte unabhängig vom installierten Look and Feel funktionieren. – Mordechai

Antwort

1

ich dieses Problem gelöst, indem die nimbusBlueGrey Farbe, die Nimbus verwendet herzuleiten andere Farben. Wenn Sie das Trennzeichen auf "undurchsichtig" setzen, wird nur die Hintergrundfarbe geändert, aber JSeperator's haben 2 Farben, einen Vordergrund und einen Hintergrund. Die Einstellung auf "undurchsichtig" und die Änderung der Hintergrundfarbe haben das Problem halbiert. nimbusBlueGrey scheint die Vordergrundfarbe zu behandeln, die mit der Eigenschaft setForegroundcolor() oder Separator.foreground nicht überschrieben zu werden scheint.

Das Problem ist, dass die Änderung nimbusBlueGrey die Farbe vieler anderer Komponenten beeinflussen wird. Ich bin mir nicht sicher, wie ich die Farbänderung auf den JSeperator beschränken soll.

0

Ändern Sie einfach Ihr Look and Feel von NIMBUS zu WINDOWS, es funktionierte gut für mich.

Hier ist Snapshot Of My UI:

Here is Snapshot Of My UI

Verwandte Themen