2012-09-30 2 views
2

JPanel의 너비가 JFrame의 너비와 같게 설정된 JFrame 내부의 JPanel과 인터페이스를 만들고 있습니다. JPanel은 디스플레이를보기 위해 프로그램을 실행할 때 JFrame의 너비와 동일한 너비를 가져야하는 필요한 크기보다 작은 아주 작은 상자로 표시됩니다. 그러나 JPanel의 너비를 약 6 줄이면 JFrame의 정확한 크기가 잘 표시됩니다. JFrame에 여백이나 패딩이있을 수 있지만 실제로는 알 수 없습니다. JPanel 너비를 부모 JFrame의 너비와 같게 만들 수 없으며 가능한 경우 어떻게 할 수 있는지 보여주세요. 내 디자인이 어떻게 설정되어 있는지와 같은 폭의 원인을 갖고 싶습니다. 내 코드는 다음과 같습니다.너비가 부모 Jframe과 같은 크기 인 경우 jpanel이 작은 상자가됩니다.

`import java.awt.*; //importing awt package 
import javax.swing.*; //importing swing package 

//class definition 
public class PMSysClient { 

//declaration of variables 
private JFrame lgFrame; //login frame 
private JFrame fdFrame; //frame for front desk 
private JFrame docFrame; //frame for doctor 
private JPanel logHeadPan; //header panel in login 
private JPanel logAreaPan; //login area panel 

//constructor definition 
public PMSysClient() { 
    initialise(); 
}//end of constructor 

//method to initialise class 
public void initialise() { 
    lgFrame = new JFrame(); 
    Container cont = lgFrame.getContentPane(); 
    lgFrame.setSize(863, 569); 
    lgFrame.setLocationRelativeTo(null); 
    lgFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    cont.setBackground(new Color(231, 228, 204)); 
    cont.setLayout(new GridBagLayout()); 

    logHeadPan = new JPanel(); 
    logHeadPan.setBackground(new Color(204, 153, 255)); 
    logHeadPan.setPreferredSize(new Dimension(863, 210)); 
    GridBagConstraints c1 = new GridBagConstraints(); 
    c1.weighty = 0.1; 
    c1.weightx=0.1; 
    c1.gridx = 0; 
    c1.gridy = 0; 
    c1.anchor = GridBagConstraints.FIRST_LINE_START; 

    lgFrame.add(logHeadPan, c1); 
    lgFrame.setVisible(true); 
}//end of initialise 

//main method definition 
public static void main(String[] args) { 
    try { 
     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
    } catch (Exception e) { 
    } 
    new PMSysClient(); 
}//end of main method 
}` 

답변

-1

setMinimumSize()를 추가하고 setPreferredSize()를 유지하십시오. 크기가 다를 수 있습니다. 그러나 두 가지 방법을 모두 사용해야합니다.

logHeadPan.setMinimumSize(...) 
+0

감사! 그것은 작동 중입니다 – ken

+3

[왜'setXXXSize' 메소드를 호출하지 말아야합니까?] (http://korea.stackoverflow.com/q/7229226/1076463) (@kleopatra를 이길 때) – Robin

+0

@ken : 이 질문에 제공된 다른 해결책을보십시오. 그 공헌들에서 꽤 유용한 조언을 얻을 수있을 것입니다. – Sujay

4

당신의 목표는 JPanel 부모 JFrame의 폭과 동일의 폭을하는 것입니다, 당신은에 채우기를 설정할 수 있습니다 GridBagConstraints에 :

c1.fill = GridBagConstraints.HORIZONTAL; 

이것은를 생성합니다 있지만 얇은 수평 패널, 그래서 또한 당신이 사용할 수있는 Y 축에서 확장 높이를 얻을 : 더 나은

c1.fill = GridBagConstraints.BOTH; 

는 Layoutmanagers에 크기 떠나 세트를 피하기 위해 구성 요소의 기본 크기를 지정합니다.

+0

+1'LayoutManager'를 바꾸라고 제안하지 않으므로 더 좋은 제안이됩니다. 아마도 나는 시간을내어'GridBagLayout'을 배워야 할 것입니다. – Robin

3

해당하는 LayoutManagerdo not use the setXXXSize methods 만 사용하면됩니다. 부모의 너비를 넘어야하는 하위 구성 요소가있는 경우 BorderLayout은 부모에게 충분하며 하위를 NORTH에 추가 할 수 있습니다. 견적에서 layout manager tutorial

센터가 확대 된 경우 가능한 한 많은 공간을 얻습니다. 다른 영역은 사용 가능한 모든 공간을 채우기 위해 필요한만큼만 확장됩니다. 종종 컨테이너는 BorderLayout 객체의 영역 중 하나 또는 두 영역 (가운데 또는 중앙 및 바닥) 만 사용합니다.

관련 문제