2013-08-03 2 views
3

제 폼에서 SpringLayout을 사용 합니다만, 보시다시피 모양이 좋지 않습니다 (크기가 크고 크기가 큽니다)!SpringLayout의 컴포넌트 크기

public class t8 extends JFrame { 

JButton okButton, cancellButton; 
JTextField idTF, nameTf; 
JLabel idlbl, namelbl; 

public t8() { 
    add(createPanel(), BorderLayout.CENTER); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(400, 500); 
    setLocation(400, 100); 
    setVisible(true); 
} 

public static void main(String[] args) { 
    new t8(); 
} 

public JPanel createPanel() { 
    JPanel panel = new JPanel(); 
    okButton = new JButton("Ok"); 
    cancellButton = new JButton("Cancel"); 
    idTF = new JTextField(10); 
    nameTf = new JTextField(10); 
    idlbl = new JLabel("ID"); 
    namelbl = new JLabel("Name"); 
    panel.add(idlbl); 
    panel.add(idTF); 
    panel.add(namelbl); 
    panel.add(nameTf); 
    panel.add(okButton); 
    panel.add(cancellButton); 

    panel.setLayout(new SpringLayout()); 
    SpringUtilities.makeCompactGrid(panel, 3, 2, 20, 50, 50, 100); 
    return panel; 
} 
} 

나는 makeCompactGrid 번호를 변경, 그러나 성공하지 않았다!

(JTextFields의 폭이 크고, 내 버튼의 크기가 다른) 내가 넷빈즈 드래그를 사용하여 물리적 구성 요소를 설정 할 수 있도록 도구를 드롭을 제안하고 또한 당신에게 줄 것이다 enter image description here

+0

'GourpLayout'이 보이겠습니까? [here] (http://stackoverflow.com/a/8504753/230513), 대안이 될까요? – trashgod

+1

+1 @aterai에 의해 [한 발 차기] (http://stackoverflow.com/a/16602249/714968) 참조, 비율은 GridBagLayout (매우 비슷한 또는 앵커와 함께)으로 설정할 수 있으며 나머지 아이디어는 구현됩니다. in MigLayout – mKorbel

+0

@mKorbel 좋은 도움 – Sajad

답변

1

레이아웃 관리자는 신경 쓰지 않고 레이아웃 만 신경 쓰면 GridLayout을 사용하거나 모든 구성 요소의 크기를 동일하게 설정하지 않으려면 GridBagLayout을 사용해야합니다.

public JPanel createPanel() { 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout()); 
    okButton = new JButton("Ok"); 
    cancellButton = new JButton("Cancel"); 
    idTF = new JTextField(10); 
    nameTf = new JTextField(10); 
    idlbl = new JLabel("ID"); 
    namelbl = new JLabel("Name"); 
    panel.add(idlbl); 
    panel.add(idTF); 
    panel.add(namelbl); 
    panel.add(nameTf); 
    panel.add(okButton); 
    panel.add(cancellButton); 
    return panel; 
} 

그리고 GridBagLayout A를 :

public JPanel createPanel() { 
    JPanel panel = new JPanel(); 
    GridBagLayout gb = new GridBagLayout(); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    panel.setLayout(gb); 
    okButton = new JButton("Ok"); 
    cancellButton = new JButton("Cancel"); 
    idTF = new JTextField(10); 
    nameTf = new JTextField(10); 
    idlbl = new JLabel("ID"); 
    namelbl = new JLabel("Name"); 
    add(panel, idlbl, 0, 0, 1, 1, gb, gbc, false); 
    add(panel, idTF, 0, 1, 1, 1, gb, gbc, true); 
    add(panel, namelbl, 1, 0, 1, 1, gb, gbc, false); 
    add(panel, nameTf, 1, 1, 1, 1, gb, gbc, true); 
    add(panel, okButton, 2, 0, 1, 1, gb, gbc, false); 
    add(panel, cancellButton, 2, 1, 1, 1, gb, gbc, true); 
    return panel; 
} 

private void add(Container outer, Component c, int x, int y, int w, int h, GridBagLayout gb, GridBagConstraints gbc, boolean wide) { 
    gbc.gridx = x; 
    gbc.gridy = y; 
    gbc.gridwidth = w; 
    gbc.gridheight = h; 
    if (wide) { 
     gbc.weightx = 100; 
    } else { 
     gbc.weightx = 0; 
    } 
    gb.setConstraints(c, gbc); 
    outer.add(c); 
} 

내가 여분의 GridBagLayout 복잡성 그냥 가치가있을 수도 있다고 생각 (만 수정 방법 표시) 그리드 레이아웃 방법은 다음과.

1

미리보기. 코드를 사용하려면 프리 레이아웃을 사용하고 setSize() 및 setLocation() 메서드를 사용하여 모든 구성 요소의 위치와 크기를 수동으로 설정하십시오. 그러나 코드 라인이 더 많이 필요하지만 모든 구성 요소 정확한 위치에있다.

+1

AFAIK, 'SpringLayout'은 NetBeans GUI 편집기에서 지원되지 않습니다. – trashgod

+0

오, 예, 잊어 버렸습니다. 감사합니다. 두 번째로 NetBeans에서 스프링 레이아웃이 필요하다고 생각하지 않습니다. 드래그 앤 드롭 도구는 수동 부품 배치를 제안하기 위해 – JProgrammer

+0

-1을 사용하는 것이 매우 쉽습니다. 모양과 느낌이 변경되거나 창 크기가 조정 된 경우에도 작동하지 않습니다. – tbodt