2013-04-09 54 views
3

我想手動創建JFrame並使用彈簧佈局來執行此操作。但是,我的最終成果並不好。我行之間的空間是那麼多,我的單選按鈕之間也:Spring佈局中組件之間的空間太大

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 2013-04-09 10:29:52

+0

@trashgod我應該在哪裏使用pack方法? – Sajad 2013-04-09 11:17:20

+0

在封閉的'Window'上。 – trashgod 2013-04-09 11:18:50

回答

1

而不是在您的NewUserFrame1構造函數內調用setSize請致電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 2013-04-09 19:14:15

+0

好的。如果你想增加寬度和高度,你應該增加'xPad'和'yPad'一點。並保持測試新的價值,直到你獲得你想要的大小。 – 2013-04-09 19:17:55

+0

是的,非常好! – Sajad 2013-04-09 19:20:12

1
  1. 你的代碼是不是編譯(缺少進口)。
  2. 您寫道:

    SpringUtilities.makeCompactGrid(面板,4,3,50,15,3,100);

最後一個參數是yPad。 (如果你想或更低值)更改爲10,例如:

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

但還是 - 標籤將是很高等,但它是一個不同的問題。繼續玩面板的大小和組件的大小。

在單選按鈕的情況下 - 改變

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

喜歡的東西:

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

,因爲你宣佈你的佈局有3列是需要的最後一道防線。

+0

您的解決方案不起作用... – Sajad 2013-04-09 11:40:18

+0

什麼是您的java版本? – 2013-04-09 17:45:12

+0

我的java版本是七 – Sajad 2013-04-09 18:38:36