2016-07-19 5 views
-2

다른 패널에 중첩 된 두 개의 JPanel 컨테이너를 만들려고하는데 왜 아래 코드와 아무런 관련이 없습니까? 내 두 패널이 ABC 패널에없는 것 같습니다.BorderLayout - JPanel의 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();'. 빈 패널 일 뿐이며 아무것도 표시하지 않습니다. 배경색을 변경하거나 일부 구성 요소를 추가하십시오. –

+0

'JPanel one = new JPanel'에서는 새로운 JPanel의 인스턴스를 생성하지 않습니다. 실제로는 'one'과 'two'의 생성자를 호출해야합니다. – jr593

+0

1) 들여 쓰기 코드 행과 블록의 논리적이고 일관된 형식을 사용하십시오. 들여 쓰기는 코드의 흐름을 따라 가기 쉽도록 만들어졌습니다. 2) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 3) 스윙과 AWT 구성 요소를 합당한 이유없이 혼합하지 마십시오. 이 경우 좋은 이유가 없습니다. 'Frame frame;을'JFrame frame; '으로 변경하고 컴파일러가 경고하는 다른 코드 비트를 조정합니다. 4)이 경우, JPanel을 확장 할 충분한 이유가 없습니다. .. –

답변

0

우르 유 개봉 된 자신의 clases (하나, 둘)이 아닌 JPanel의 사용, 잘못된 방법으로 그것을해야한다 사용 : Btw는

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

를 혼란 스러울 수 있습니다 clases의 이름을 변경하려고 , 하나에, 당신은 다른 곳에서는 북쪽에 패널을 넣을 때 또는 때문에 두

0

시도는 패널 하나의 prefererSize를 변경할 수 있지만, 센터는 패널의 가장자리를 볼 수있는 크기 사용 국경을 가져야한다

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