2013-06-18 3 views
0

그래서 기본 시각적 Java 구성 요소부터 시작하여 정확히 사용하는 데 어려움이 있습니다.JPanel이 제대로 표시되지 않음

여기에 새로운 문제가 있습니다. 동부, 중부, 서부의 3 개 패널을 구현하려고하지만 중심 패널을 올바르게 표시 할 수 없습니다. 여기에 코드를 내 조각 :

은 기본적으로 'panelUpMiddle이'보이지 않는, 그래서 ...

public class TestCode_Web { 


public static void main(String[] args) { 

    JFrame window = new JFrame("Test"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(400, 400); 

    JPanel innerPanel = new JPanel(new BorderLayout());  
    JPanel panelUp = new JPanel(new BorderLayout()); 

    JPanel panelUpLeft = new JPanel(); 
    JPanel panelUpMiddle = new JPanel(); 

    window.add(innerPanel, BorderLayout.NORTH);  
    innerPanel.add(panelUp, BorderLayout.NORTH); 

    panelUp.add(panelUpLeft, BorderLayout.WEST); 
    panelUp.add(panelUpMiddle, BorderLayout.CENTER); 

    JLabel label1 = new JLabel("Label 1"); 

    JLabel label11 = new JLabel("Label 11"); 
    JLabel label12 = new JLabel("Label 12"); 

    panelUp.add(label1); 
    panelUpLeft.add(label11);  
    panelUpMiddle.add(label12);  

    panelUp.setBackground(new Color(200, 240, 200)); 

    panelUpLeft.setBackground(new Color(200, 240, 0)); 
    panelUpMiddle.setBackground(new Color(100, 240, 200)); 

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));   
    panelUpLeft.setPreferredSize(new Dimension(160, 120)); 

    window.setVisible(true); 
} 

} 
+3

Java Swing * (http://stackoverflow.com/q/7229226/230513) 및 [* 초기 스레드 *]에서 set (Preferred | Maximum | Minimum) 크기 메서드를 사용하지 말아야합니까?를 참조하십시오. http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+2

이'panelUp.add (label1);'을 쓸 때 단순히 CENTER 위치 즉, 'panelUp.add (panelUpMiddle, BorderLayout.CENTER);'에 이전에 추가 된 구성 요소를 대체하기 때문에 볼 수 없습니다 'label12' /'panelUpMiddle'. 주어진 시간대에 하나의 구성 요소 만 임의의 위치에 추가 될 수 있기 때문입니다. 코드를 다시 살펴보십시오. –

+0

@nIcE cOw : 정확히 그 문제입니다. 그 점에 더주의를 기울여야했습니다! 고맙습니다.하지만 새로운 _post 답변을 열지 않았으므로이 질문에 대한 답변을 고려할 수 없습니다. –

답변

1

사실, 당신은 innerPanel 필요하지 않습니다 :

public class TestCode_Web 
{ 
    public static void main(String[] args) { 

    JFrame window = new JFrame("Test"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setLayout(new BorderLayout()); 
    window.setSize(400, 400); 

    JPanel panelUp = new JPanel(); 
    JPanel panelUpLeft = new JPanel(); 
    JPanel panelUpMiddle = new JPanel(); 

    window.add(panelUp, BorderLayout.NORTH);  
    window.add(panelUpLeft, BorderLayout.WEST); 
    window.add(panelUpMiddle, BorderLayout.CENTER); 

    JLabel label1 = new JLabel("Label 1"); 
    JLabel label11 = new JLabel("Label 11"); 
    JLabel label12 = new JLabel("Label 12"); 

    panelUp.add(label1); 
    panelUpLeft.add(label11);  
    panelUpMiddle.add(label12);  

    panelUp.setBackground(new Color(200, 240, 200)); 
    panelUpLeft.setBackground(new Color(200, 240, 0)); 
    panelUpMiddle.setBackground(new Color(100, 240, 200)); 

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));   
    panelUpLeft.setPreferredSize(new Dimension(160, 120)); 

    window.setVisible(true); 
} 
} 

NiceCow는 당신이 작동하지 않는 이유를 대답했다. 이 잘 작동합니다.

+1

이 답변은 실제로 제가 필요로하지는 않았지만 - ** 내 첫 번째 코멘트를 참조하십시오. post ** - 사건이 종결 된 것으로 간주합니다. –

2

세 번째 패널을 만들어 다른 패널 내에 중첩 않습니다 왜 궁금해?.

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

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

public class TestCode_Web { 


public static void main(String[] args) { 

    JFrame window = new JFrame("Test"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(400, 400); 

    JPanel innerPanel = new JPanel(new BorderLayout());  
    JPanel panelUp = new JPanel(new BorderLayout()); 

    JPanel panelUpLeft = new JPanel(); 
    JPanel panelUpMiddle = new JPanel(); 
    JPanel panelUpRight = new JPanel(); //Create third panel 

    window.add(innerPanel, BorderLayout.NORTH);  
    innerPanel.add(panelUp, BorderLayout.NORTH); 

    panelUp.add(panelUpRight, BorderLayout.EAST); //Add Third Panel 
    panelUp.add(panelUpLeft, BorderLayout.WEST); 
    panelUp.add(panelUpMiddle, BorderLayout.CENTER); 

    JLabel label1 = new JLabel("Label 1"); 

    JLabel label11 = new JLabel("Label 11"); 
    JLabel label12 = new JLabel("Label 12"); 

    panelUpRight.add(label1); //Add label for third panel 
    panelUpLeft.add(label11);  
    panelUpMiddle.add(label12);  

    panelUp.setBackground(new Color(200, 240, 200)); 

    panelUpLeft.setBackground(new Color(200, 240, 0)); 
    panelUpMiddle.setBackground(new Color(100, 240, 200)); 

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));   
    panelUpLeft.setPreferredSize(new Dimension(160, 120)); 

    window.setVisible(true); 
} 

} 
+0

글쎄 그것은 작동하지 않습니다. 내가 물어 본 사실은 별개로 (나는이 경우 JPanel의 다른 인스턴스를 필요로하지 않는다는 것을 의미한다. 실행 가능 파일에서 'panelUpMiddle'(또는 'label12')을 볼 수 없기 때문에 작동하지 않는다. app.) –

3

이 코드를 사용해보십시오. 패널과 라벨의 이름이 업데이트되어 더 명확 해졌습니다.

JFrame window = new JFrame("Test"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(400, 400); 

    JPanel centerPanel = new JPanel(new BorderLayout());  
    JPanel eastPanel = new JPanel(new BorderLayout()); 
    JPanel westPanel = new JPanel(new BorderLayout()); 

    window.add(centerPanel, BorderLayout.CENTER);  
    window.add(eastPanel, BorderLayout.EAST); 
    window.add(westPanel, BorderLayout.WEST); 

    JLabel centerLabel = new JLabel("Center"); 
    JLabel eastLabel = new JLabel("East"); 
    JLabel westLabel = new JLabel("West"); 

    eastPanel.add(eastLabel); 
    westPanel.add(westLabel);  
    centerPanel.add(centerLabel); 

    centerPanel.setPreferredSize(new Dimension(200, 400)); 
    eastPanel.setPreferredSize(new Dimension(100, 400)); 
    westPanel.setPreferredSize(new Dimension(100, 400)); 
    eastPanel.setBackground(new Color(200, 240, 200)); 
    westPanel.setBackground(new Color(200, 240, 0)); 

    window.setVisible(true); 
+0

안녕하세요, 귀하의 코드에 대해 잘 고맙겠지 만, 제가 제출 한 모든 내용을 따르지 않습니다 : 동일한 구조가 아닙니다. –

관련 문제