LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel

Tidu2k

Mitglied
Hallo!

Erstmal Danke für die Lösung des letzten Thread!

Ich habe ein neues Problem an dem ich nicht weiter komme.

Vorhanden sind zwei JFrames die nur einzeln aufrufbar sind mit Buttons

z.B.

Java:
Button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Rechner window = new Rechner();
                window.Rechner.setVisible(true);
                Anderesfenster.dispose();
            }
        });

und umgekehrt, was auch problemlos funktioniert.

Allerdings habe ich angefangen LookAndFeel zu verwenden und habe folgendes (angepasst) in den beiden Frames in den main-Methoden eingefügt

Java:
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                          if ("Nimbus".equals(laf.getName())) {
                            UIManager.setLookAndFeel(laf.getClassName());
                          }
                    }         
                 
                    Anderesfenster window = new Anderesfenster();
                    window.Anderesfenster.setVisible(true);
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

Wenn ich die einzelnen Javadateien öffne (Rechner oder Anderesfenster) , funktioniert LookAndFeel. Wenn ich aber mit einem Button zum anderen Frame wechsel, dann funktioniert es nicht mehr und alle Componenten sehen wie gewöhnlich aus.

Genauer: Ich habe folgende Veränderung der Sliders vorgenommen dort eingetzt

Java:
public Rechner () {
        UIDefaults sliderDefaults = new UIDefaults();
        sliderDefaults.put("Slider.thumbWidth", 30);
        sliderDefaults.put("Slider.thumbHeight", 30);
        sliderDefaults.put("Slider:SliderThumb.backgroundPainter", new Painter<JComponent>() {
            public void paint(Graphics2D g, JComponent c, int w, int h) {
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g.setStroke(new BasicStroke(2f));
                g.setColor(Color.decode("#007cfa"));
                g.fillOval(1, 1, w-3, h-3);
                g.setColor(Color.WHITE);
                g.drawOval(1, 1, w-3, h-3);
            }
        });
        sliderDefaults.put("Slider:SliderTrack.backgroundPainter", new Painter<JComponent>() {
            public void paint(Graphics2D g, JComponent c, int w, int h) {
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g.setStroke(new BasicStroke(2f));
                g.setColor(Color.decode("#dddddd"));
                g.fillRoundRect(5, 5, w-1, 20, 20, 20);
                g.setColor(Color.WHITE);
                g.drawRoundRect(5, 5, w-1, 20, 20, 20);
               
            }
        });
 initialize;

//Ab hier folgt der eigentliche Programmcode
}

anschließend habe ich jeder Komponente folgendes zugewiesen
Java:
SwingUtilities.updateComponentTreeUI(Button);


Hat jemand eine Idee wie man es löst? Ich habe schon diverses ausprobiert.

LG!
 
Zuletzt bearbeitet:
Keine direkte Antwort auf deine Frage:

Wieso müssen es denn 2 verschiedene JFrames sein? Bei 98% der Leute soll nur erreicht werden, dass 2 verschiedene Ansichten dargestellt werden. Dazu kann man die Komponenten auch einfach jeweils auf JPanels packen und zwischen den JPanels wechseln (siehe CardLayout). Damit hättest du das Problem auch nicht weil du im selben JFrame bleibst
 
Java:
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                          if ("Nimbus".equals(laf.getName())) {
                            UIManager.setLookAndFeel(laf.getClassName());
                          }
                    }       
               
                    Anderesfenster window = new Anderesfenster();
                    window.Anderesfenster.setVisible(true);
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());


Das Fett gedruckte musste einfach weg. Weiß nicht wieso es dort stand. Trotzdem Danke für eure Posts!
 

Zurück
Oben