2016-07-19 13 views
-2

Ich möchte zwei JPanel Container verschachtelt in einem anderen Panel, aber warum zeigt es nichts als der Code unten? Es scheint, dass meine zwei Panels nicht auf dem ABC Panel sind?BorderLayout - JPanel in JPanel

public class ABC extends JPanel 
{ 

     Frame frame; 
     public ABC(Frame frame) 
     { 
      super(); 
      this.frame = frame; 
      setLayout(new BorderLayout()); 
      JPanel one = new JPanel(); 
      JPanel two = new JPanel(); 
      add(one,BorderLayout.NORTH); 
      add(two,BorderLayout.CENTER); 
      one.setVisible(true); 
      two.setVisible(true); 
     } 
     public class one extends JPanel { 
        public one() { 
         setLayout(new FlowLayout(FlowLayout.LEFT)); 
         createA(); 
         setVisible(true); 
        } 
       } 
     public class two extends JPanel { 
        public two() { 
         setLayout(new FlowLayout(FlowLayout.LEFT)); 
         createB(); 
         setVisible(true); 
        } 
       } 
    private void createA(){ 
       add(ButtonA); 
       add(ButtonAA); 
       add(ButtonAAA); 
       } 
    private void createB(){ 
        add(ButtonB); 
       } 
} 
+0

'JPanel two = new JPanel();'. Es ist nur ein leeres Panel, es wird nichts zeigen. Ändern Sie die Hintergrundfarbe oder fügen Sie einige Komponenten hinzu. –

+0

In 'JPanel one = new JPanel' erstellen Sie keine Instanzen Ihrer neuen JPanels. Sie müssen die Konstruktoren 'one' und' two' tatsächlich aufrufen. – jr593

+0

1) Verwenden Sie eine logische und konsistente Form der Einrückung von Codezeilen und -blöcken. Die Einrückung soll den Codefluss leichter nachvollziehen lassen! 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. 3) Mischen Sie Swing- und AWT-Komponenten nicht ohne Grund. In diesem Fall gibt es keinen guten Grund. Ändern Sie 'Frame frame;' in 'JFrame frame;' und optimieren Sie andere Codezeilen, wie vom Compiler gewarnt. 4) In diesem Fall besteht kein Grund, JPanel zu verlängern. .. –

Antwort

0

Ur es in die falsche Art und Weise verwenden, müssen u youre eigene clases verwenden (eins, zwei) nicht die JPanel:

JPanel one = new one(); 
JPanel two = new two(); 
add(one,BorderLayout.NORTH); 
add(two,BorderLayout.CENTER); 

Btw, versuchen Sie den Namen Ihres clases können sich ändern verwirrend sein , zu Eins, Zwei

0

versuchen, die prefererSize der Platte ein sich ändern, denn wenn man eine Platte in NORTH setzen oder irgendwo anders, aber das Zentrum sollte es eine Größe Verwendung Grenze haben, um die Kante der Platte

zu sehen
one.setBorder(BorderFactory.createLineBorder(Color.black)); 
two.setBorder(BorderFactory.createLineBorder(Color.blue)); 
one.setpreferredsize(new new dimension(width,height)); 
add(one,BorderLayout.NORTH);