Swing Fehlende Komponenten unter Mac OS X

SuperSeppel13

Bekanntes Mitglied
Hallo Leute,

ich habe gerade ein sehr, sehr seltsames Problem beobachtet:
Ich versuche gerade einem Freund ein wenig über Java beizubringen und wir haben eine sehr simple Anwendung geschrieben, bestehend aus einem Jframe mit einem JButton und einem JLabel.
Wenn wir das Programm nun aus der IDE (NetBeans) heraus starteten waren beide Komponenten nur manchmal sichtbar, manchmal aber auch nicht, und manchmal nur der Button. Auch Vergrößern und verkleinern des Frames, was ja (theoretisch) ein Repaint desselben auslöst, hat die Komponenten nicht sichtbar gemacht, wenn sie das nicht von vornherein waren.
Als wir dann einen zweiten Button hinzufügten, der (im BorderLayout) den Platz des Labels einnehmen sollte (es also praktisch "überschreibt"), tauchten manchmal beide Buttons auf, manchmal Button und Label und manchmal auch gar nichts - scheinbar völlig willkürlich.:bloed:

Ich habe keine Ahnung, wie sowas passieren kann - ich selbst arbeite mit WinXP und habe es noch nie erlebt, dass mehrmaliges starten einer Applikation so unterschiedliche Ergebnisse hervorbrachte.:confused:

Leider ist es wie gesagt der Mac eines Freundes, sodass ich es hier nicht nochmal ausprobieren kann und auch nicht den genauen code habe, aber am code ist auch absolut nichts besonderes.
Vielleicht hat ja jemand ne idee...

Vielen Dank schonmal!!!

SuperSeppel13
 

SuperSeppel13

Bekanntes Mitglied
Wie gesagt habe ich den Originalcode nicht. Hier eine (relativ genaue) rekonstruktion (ist nicht so kompliziert):

Java:
public static void main(String[] args){
        final JFrame frame = new JFrame("Test");
        frame.setSize(800, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.RED);
        frame.setVisible(true);

        JButton butColor = new JButton("Hintergrundfarbe ändern");
        butColor.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if(frame.getContentPane().getBackground() == Color.RED){
                    frame.getContentPane().setBackground(Color.GREEN);
                } else {
                    frame.getContentPane().setBackground(Color.RED);
                }
            }
        });
        frame.add(butColor, BorderLayout.PAGE_START);

        final JLabel label = new JLabel("irgendein kluger Text...", JLabel.CENTER);
        label.setForeground(Color.BLACK);
        frame.add(label);

        JButton butLabelColor = new JButton("Schriftfarbe ändern");
        butLabelColor.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if(label.getForeground() == Color.BLACK){
                    label.setForeground(Color.BLUE);
                } else {
                    label.setForeground(Color.BLACK);
                }
            }
        });
        frame.add(butLabelColor, BorderLayout.PAGE_END);

    }
Interessant ist, dass ich auf dem Mac nicht explizit die Contentpane des Frames ansprechen musste: frame.setBackground(*someColor*) hat den Fensterhintergrund wie gewünscht gefärbt.
Ich habe schon gehört, dass es bei dem Mac L&F Probleme mit der opacity (wie übersetzt man das anständig? "Transparenz" trifft's ja nicht wirklich) gibt, aber kann dass dazu führen, dass ganze Komponenten manchmal auftauchen und manchmal nicht?!

Und wie gesagt, als wir den zweiten Button ohne layout restraints hinzugefügt haben, ist trotzdem noch manchmal das Label aufgetaucht. Wie kann das sein?
 

Illuvatar

Top Contributor
JFrame#setVisible(true) sollte immer das letzte sein, was aufgerufen wird - sonst passiert genau das was du beschreibst.
Falls das nicht möglich sein sollte, hilft ein Aufruf von validate auf der contentPane - in deinem Fall musst du aber nur das setVisible(true) ans Ende schieben.

Dass du auf dem Mac nicht den Umweg über die contentPane gehen musstest, könnte (wenn ich mich recht erinnere) an unterschiedlichen Java-Versionen liegen.
 

SuperSeppel13

Bekanntes Mitglied
Naja, über das setVisible habe ich auch schon nachgedacht, aber wenn es daran liegt, müssten die komponenten doch spätestens nach dem nächsten repaint (z.B. beim ändern der Fenstergröße) auftauchen, da ich sie ja hinzugefügt habe, wenngleich erst nachdem das fenster schon gezeichnet wurde.
Bei mir unter WinXP passiert auch genau das: eine Komponente fehlt erst, taucht aber nach dem repaint wieder auf.
Auf dem Mac blieben die Komponenten einfach weg.

Ich werde auf jeden Fall sobald wie möglich die Java-Versionen überprüfen und auch testen, ob's bloß am Mac L&F liegt.

Danke soweit,
SuperSeppel13
 

SuperSeppel13

Bekanntes Mitglied
Hm, also ich war gestern nochmal bei meinem Freund und habe festgestellt, dass er - genau wie ich - die aktuelle Java-Version benutzt und dass es anscheinend auschließlich am L&F liegt. Mit dem Metal L&F funtkioniert alles bestens (und auch nicht ohne getContenPane()).

Das klärt zwar die Frage, worin der Fehler liegt, aber nicht, wie ich ihn behebe. Es muss doch möglich sein, zuverlässig funktionstüchtige GUIs mit dem Mac L&F zu schreiben, oder nicht?

Ich wäre für jeden Hinweis echt dankbar!
 

X3TitanCore

Bekanntes Mitglied
Klar kann man auf einem Apple funktionstüchtige GUIs erstellen.
Bei welchem L&F funktioniert es denn nicht.

Kann das höchstens mal nachher auf meinem Apple testen. Auf meinem Windows hab ich auch keine Probleme. Das einzige was mir auffällt ist das du keine Panel benutzt um die Button und Label dort reinzupacken. Das würde ich nochmal versuchen. Ich hatte diese Probleme auf Apple nie. Ich pack immer alles in ein Panel und das Panel dann in den Frame. Keine Ahnung ob das hilft.

Gruß
 

SuperSeppel13

Bekanntes Mitglied
Es geht (wie ich eigentlich schon schrieb) um das standart apple L&F (Aqua).
Warum es etwas ändern sollte, wenn ich jede Komponente auf ein eigenes Panel pappe, leuchtet mir nicht ein (ist auch eigntlich nicht wirklich sinnvoll oder?). :bahnhof:
Werd's trotzdem probieren...
 
G

Gast2

Gast
Es geht (wie ich eigentlich schon schrieb) um das standart apple L&F (Aqua).
Warum es etwas ändern sollte, wenn ich jede Komponente auf ein eigenes Panel pappe, leuchtet mir nicht ein (ist auch eigntlich nicht wirklich sinnvoll oder?). :bahnhof:
Werd's trotzdem probieren...

du solltest das setVisible(true) auf jeden Fall als aller letztes aufrufen und am besten noch mit dem EDT synchroniseren dann müsst es gehen.
getContentPane brauch man glaub ab Java 1.5 nicht mehr...
Du sollst auch nicht alle Componenten auf ein eigenes Panel machen sondern ein Panel machen und dort alle Komponenten drauf...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Fehlende JavaFX Package AWT, Swing, JavaFX & SWT 10
A Fehlende Designansicht AWT, Swing, JavaFX & SWT 2
C JTable fehlende Daten AWT, Swing, JavaFX & SWT 2
S fehlende spalte bei gridbaglayout AWT, Swing, JavaFX & SWT 7
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben