2017-08-22 6 views
-1

Ich habe Probleme mit der Anzeige von Komponenten auf meinem JFrame. Ich schließe mein aktuelles Fenster und öffne neues und möchte jLabel darauf anzeigen, aber es passiert nichts. Code ist unten:JFrame zeigt keine Komponenten an

   Frame[] nF = DBChooser.getFrames(); 

       nF[0].setVisible(false); 
       JFrame windoow = new JFrame("Processing");      
       JPanel pan = new JPanel(); 
       windoow.setPreferredSize(new Dimension(400, 150)); 
       pan.setPreferredSize(new Dimension(400, 150));     

       JLabel textLabel = new JLabel ("Processing..."); 
       textLabel.setLayout(null); 
       pan.setLayout(null); 
       windoow.setLayout(null);     
       pan.add(textLabel); 
       pan.revalidate(); 
       pan.repaint();     
       windoow.getContentPane().add(pan); 
       windoow.setLocationRelativeTo(null);      
       windoow.pack();     
       windoow.setVisible(true); 

Ich schätze jede Hilfe

+0

1) Java GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgröße, Bildschirmauflösung usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. 3) Stellen ASCII-Art oder eine einfache Zeichnung des * beabsichtigten * Layouts der GUI bei minimaler Größe und .. –

+0

.. wenn in der Größe, mit mehr Breite und Höhe zur Verfügung. –

Antwort

1

Es ist, weil Sie ein Null-Layout-Fenster und Panel ohne Angabe von Breite, Länge oder Position, entweder einige LayoutManager oder setzen diese Eigenschaften (zB Grenzen). Ein leerer LayoutManager bedeutet, dass Sie alles selbst einstellen müssen, da nichts (kein LayoutManager) Ihre Elemente automatisch platziert. In diesem Beispiel wird ein Border, die einen schönen Effekt erzeugt:

enter image description here

der Code:

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Test { 
    public static void main(String[] args) { 
     JFrame windoow = new JFrame("Processing"); 
     JPanel pan = new JPanel(); 
     windoow.setPreferredSize(new Dimension(400, 150)); 
     pan.setPreferredSize(new Dimension(400, 150)); 

     JLabel textLabel = new JLabel("Processing..."); 
     textLabel.setLayout(null); 
     pan.setLayout(new BorderLayout()); 
     windoow.setLayout(new BorderLayout()); 
     pan.add(textLabel); 
     pan.revalidate(); 
     pan.repaint(); 
     windoow.getContentPane().add(pan); 
     windoow.setLocationRelativeTo(null); 
     windoow.pack(); 
     windoow.setVisible(true); 
    } 
} 
+0

immer noch gleich, Etikett zeigt nicht – johansonik

+0

@johansonik Wie kann es nicht angezeigt werden, wenn ich den gleichen Code ausgeführt habe, und ich habe Sie das Bild des Fensters mit der Nachricht? –

+0

Ich weiß nicht warum, aber ich kann ein leeres Fenster ohne Text darauf sehen ... – johansonik

1

Warum brauchen Sie so viele setLayout(null);? Ich entferne sie und es funktionierte

public class DBChooser extends Frame { 

    public static void main(String args[]) { 
     Frame[] nF = DBChooser.getFrames(); 
//  nF[0].setVisible(false); 
     JFrame windoow = new JFrame("Processing"); 
     JPanel pan = new JPanel(); 
     windoow.setPreferredSize(new Dimension(400, 150)); 
     pan.setPreferredSize(new Dimension(400, 150)); 
     JLabel textLabel = new JLabel("Processing..."); 
//  textLabel.setLayout(null); 
//  pan.setLayout(null); 
//  windoow.setLayout(null);     
     pan.add(textLabel); 
     pan.revalidate(); 
     pan.repaint(); 
     windoow.getContentPane().add(pan); 
     windoow.setLocationRelativeTo(null); 
     windoow.pack(); 
     windoow.setVisible(true); 
    } 
} 
+0

es hat nicht geholfen, Etikett zeigt nicht – johansonik

+0

Es funktioniert gut in meinem PC. Vielleicht müssen Sie hier mehr Code posten –

+0

Was ist 'nF [0] .setVisible (false);'? Sind Sie sicher, dass Ihr Code kompilieren kann, ohne dies zu kommentieren? –