2013-04-09 7 views
3

JFrame을 손으로 만들고 스프링 레이아웃을 사용하여이 작업을 수행하려고합니다. 하지만, 마침내 출력이 좋지 않습니다. 내 행 사이의 공간이 너무 많이, 너무 내 라디오 버튼 사이 :스프링 레이아웃의 구성 요소 사이에 너무 많은 공간이 있음

example output

내 코드 : 이제

public final class NewUserFrame1 extends JFrame { 

public NewUserFrame1() { 
    add(rowComponent(), BorderLayout.CENTER); 
    setLocation(200, 40); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 
    setVisible(true); 
    pack(); 
} 

public JPanel rowComponent() { 

    JPanel panel = new JPanel(); 
    JLabel fnamelbl = new JLabel("First name"); 
    JLabel lnamelbl = new JLabel("Last Name"); 
    JLabel fntemp = new JLabel(); 
    JLabel lntemp = new JLabel(); 
    JTextField fntf = new JTextField(10); 
    JTextField lntf = new JTextField(10); 
    JLabel gndlnl = new JLabel("Gender"); 
    JRadioButton malerb = new JRadioButton("Male"); 
    JRadioButton femalerb = new JRadioButton("Female"); 
    ButtonGroup bgroup = new ButtonGroup(); 
    bgroup.add(malerb); 
    bgroup.add(femalerb); 
    JLabel registnm = new JLabel("Registration ID is:"); 
    JLabel showreglbl = new JLabel(); 
    JLabel regtemp = new JLabel(); 

    panel.add(fnamelbl); 
    panel.add(fntf); 
    panel.add(fntemp); 
    panel.add(lnamelbl); 
    panel.add(lntf); 
    panel.add(lntemp); 
    panel.add(gndlnl); 
    panel.add(malerb); 
    panel.add(femalerb); 
    panel.add(registnm); 
    panel.add(showreglbl); 
    panel.add(regtemp); 

    panel.setLayout(new SpringLayout()); 
    SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 4); 
    return panel; 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      NewUserFrame1 newUserFrame1 = new NewUserFrame1(); 
     } 
    }); 
} 
} 

: enter image description here

+0

왜'팩을()'? – trashgod

+0

@trashgod 어디에서 pack 메소드를 사용해야합니까? – Sajad

+0

둘러싸는'Window '에. – trashgod

답변

1

setSize을 호출하는 대신 NewUserFrame1 생성자 내에서 packJFrame으로 호출하십시오.

public NewUserFrame1() { 
    add(rowComponent(), BorderLayout.CENTER); 
    setLocation(200, 40); 
    //setSize(800, 500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 
    setVisible(true); 
    pack(); 
} 

또한 다음과 같은 방법으로 SpringUtilities.makeCompactGrid 방법의 매개 변수를 변경 :

SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 4);//change yPad to 4 instead of 100. It sets the vertical height between two rows 
+0

사용 팩 방법 후, 내 문제는 해결되었지만 내 메인 윈도우가 너무 작습니다. – Sajad

+0

좋습니다. 너가 높이와 너비를 늘리려면'xPad'와'yPad'를 약간 늘려야합니다. . 그리고 당신이 당신의 욕망의 크기를 얻을 때까지 새로운 가치로 시험을 계속하십시오. –

+0

예, 아주 좋습니다! – Sajad

1
  1. 귀하의 코드는 컴파일 가능한 아니다 (수입 누락).
  2. 당신이 쓴 :

    SpringUtilities.makeCompactGrid (패널, 4, 3, 50, 15, 3, 100);

마지막 인수는 yPad입니다.

SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 10); 

을하지만 여전히 - 라벨 등 고하는 것입니다,하지만 그것은 다른 문제입니다 : (당신이 원하는 경우 또는 낮은 값) 예를 들어, 10으로 변경. 패널의 크기와 구성 요소 크기로 계속 놀아 라. 라디오 버튼의 경우

- 변경

panel.add(malerb); 
panel.add(femalerb); 

같은 사람 : 당신은 3 열을 가지고 레이아웃을 선언 때문에 마지막 줄이 필요

JPanel radioPanel = new JPanel(); 
radioPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
radioPanel.add(malerb); 
radioPanel.add(femalerb); 
panel.add(radioPanel); 
panel.add(new JLabel()); 

.

+0

해결책이 작동하지 않습니다 ... – Sajad

+0

Java 버전이 무엇입니까? –

+0

내 Java 버전은 7입니다 – Sajad