2014-12-13 3 views
0

다른 패널에 여러 패널을 추가하려고합니다. 내가 JLayeredPane을 사용하고 있기 때문에 서로 꼭대기에 있기를 원합니다. 나는 각각에 버튼을 추가했습니다. 작동 할 때 두 개의 버튼이 나타납니다.JLayeredPane을 사용하여 JPanel에 여러 JPanels 추가

import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JPanel; 

public class PanelTest { 
public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    JPanel mainPanel = new JPanel(); 
    JPanel panel1 = new JPanel(); 
    JPanel panel2 = new JPanel(); 

    JLayeredPane layers = new JLayeredPane(); 
    mainPanel.add(layers); 

    panel2.setOpaque(false); 
    panel1.setOpaque(false); 
    panel1.setVisible(true); 
    panel2.setVisible(true); 

    panel1.add(new JButton("1111111111")); 
    panel2.add(new JButton("2")); 

    frame.setContentPane(mainPanel); 
    layers.add(panel1, new Integer(2)); 
    layers.add(panel2, new Integer(3)); 

    frame.setVisible(true); 
    frame.setSize(500, 500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
} 

mainPanel의 회색 배경 만 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

4

JLayeredPane에 구성 요소를 추가 할 때는 기본적으로 컨테이너를 사용하여 null 레이아웃에 구성 요소를 추가합니다. 즉, 구성 요소의 크기와 위치를 모두 지정해야하며 종종 setBounds(...) 호출로이 두 가지를 모두 해결해야합니다. 여전히 당신을

가 설정 범위 차이

크기 (범위)을 설정하지 않았 필요하지만 :

panel1.setBounds(10, 10, 100, 100); 
panel2.setBounds(70, 70, 100, 100); 

편집 : 예를 들어,에 Panel1 및 panel2에 전화 추가 문제가있다.

FlowLayout을 사용하는 JPanel에 JLayeredPane을 추가합니다. 기본적으로 FlowLayout은 추가 된 구성 요소의 기본 크기를 따릅니다. JLayeredPane는 null 레이아웃을 사용하기 (위해) 때문에, 우선도는 (0, 0)이므로 paint 할 것은 없습니다.

두 솔루션 :

  1. 그냥 사용합니다 JPanel을 필요하지 않습니다 : 당신이 정말로 다음 패널을 사용하려면 frame.setContentPane(layers);
  2. 당신이 레이아웃 매니저 변경해야 JPanel mainPanel = new JPanel(new BorderLayout());
+1

정보 주셔서 감사하지만 설정 경계가 어떤 차이를 만들지 않았다. – WVrock

+3

1+, Pete 편집에 신경 쓰지 않기를 바랍니다. :) 한 가지 대답으로 완벽한 솔루션을 유지하는 것이 더 좋을 것이라고 생각했습니다. @Wrock, 편집을 참조하십시오. – camickr

+0

@camickr 감사합니다. SSCCE와 실제 프로그램에서 모두 효과가있었습니다. mainPanel은 cardLayout에 사용하기 때문에 필요합니다. – WVrock