2013-10-17 3 views
1

JPanel, 창 및 JPanels 및 JLabel 배열이 있습니다. 5 개의 JPanel을 JFrame에 추가하고 JLabel을 각 JPanel에 추가하려고합니다. 각 JPanel은 주사위에 대한 데이터를 나타내는 데 사용됩니다.for 루프를 사용하여 JFrame에 JPanels 추가

그러나 코드를 실행하면 마지막 JPanel 만 "주사위 4"라는 텍스트가있는 JFrame에 나타납니다. 나는 왜 그런지 이해하지 못한다.

코드 :

public static void main(String args[]) { 

    JFrame window = new JFrame("DICE Frame"); 
    window.setVisible(true); 
    window.setTitle("DIE"); 
    window.setSize(400, 200); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel[] diceView=new JPanel[5]; 
    JLabel[] labels=new JLabel[5]; 
    for(int i=0; i<diceView.length; i++) { 

     diceView[i]=new JPanel(); 

     window.add(diceView[i]); 

     labels[i]=new JLabel(); 
     labels[i].setText("Dice "+i); 
     diceView[i].add(labels[i]); 

    } 
} 
+1

어떤 레이아웃 관리자를 사용하고 있습니까? 확실한 대답은 모든 패널을 같은 위치에 놓는 것입니다. 그래서 4가 3의 상단에 있고 2는 2 위에 있습니다. – John3136

답변

3

JFrame의의의 contentPane는 (당신이 JFrame#add(...)를 호출 할 때 물건을 추가 할 것) 기본적으로 인 BorderLayout을 사용하고 기본 방식으로에 구성 요소를 추가 할 때마다, 구성 요소가 추가됩니다 BorderLayout.CENTER.

해결책은 필요한 레이아웃 (또는 레이아웃을 사용하는 중첩 JPanel)을 사용하는 JPanel에 다른 JPanel을 추가 한 다음이 컨테이너 JPanel을 JFrame 인 BorderLayout.CENTER에 추가하는 것입니다.

자세한 내용은 Layout Manager Tutorial을 참조하십시오. 이해해야 할 핵심 개념은 각각 레이아웃 관리자를 사용하여 JPanels를 중첩 할 수 있으므로 사용하기 쉬운 간단한 레이아웃 관리자 만 사용하여 복잡한 레이아웃을 얻을 수 있습니다.

2

주사위 0, 주사위 1, 주사위 2, 주사위 3가 주사위 4에 머물러 있기 때문에 JPanels가 계속 추가되므로 주사위 4 만 볼 수 있습니다. 다른 주사위를보고 싶다면 flowlayout, boxlayout ...

2

JFrame의 기본값은 BorderLayout입니다. 다음과 같은 다른 레이아웃을 사용해보세요.

window.setLayout(new FlowLayout()); 

다른 JPanel이 표시됩니다. Check this out for more detailed info