我怎样才能我的Jframe标签和按钮对齐

问题描述:

我想编辑一块样本代码,我发现创建一个窗体。示例代码包括完美对齐的4个标签和文本字段。我试图在最后添加一个按钮,但替代地,按钮与屏幕左上角的标签重叠。我怎样才能解决这个问题?我怎样才能我的Jframe标签和按钮对齐

public class SpringDemo { 
private static void createAndShowGUI() { 
    String[] labels = {"Name: ", "Fax: ", "Email: ", "Address: "}; 
    int labelsLength = labels.length; 

    //Create and populate the panel. 
    JPanel p = new JPanel(new SpringLayout()); 
    for (int i = 0; i < labelsLength; i++) { 
     JLabel l = new JLabel(labels[i], JLabel.TRAILING); 
     p.add(l); 
     JTextField textField = new JTextField(10); 
     l.setLabelFor(textField); 
     p.add(textField); 
    } 
    JButton l = new JButton("Submit"); 
    p.add(l); 

    //Lay out the panel. 
    SpringUtilities.makeCompactGrid(p, 
            labelsLength, 2, //rows, cols 
            7, 7,  //initX, initY 
            7, 7);  //xPad, yPad 

    //Create and set up the window. 
    JFrame frame = new JFrame("SpringForm"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Set up the content pane. 
    p.setOpaque(true); //content panes must be opaque 
    frame.setContentPane(p); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    //Schedule a job for the event-dispatching thread: 
    //creating and showing this application's GUI. 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 

}

问题是因为makeCompactGrid压实JPanel到所需标签及其文本框的大小和你不把任何约束的方法让你的按钮让布局知道把它放在哪里。

您可以创建一个空标签并将其添加到按钮后,然后调用makeCompactGrid这会将该按钮放在最后一个标签下。

喜欢这个

JButton l = new JButton("Submit"); 
p.add(l); 
p.add(new JLabel()); 
SpringUtilities.makeCompactGrid(p, 
           labelsLength + 1, 2, //rows, cols 
           7, 7,  //initX, initY 
           7, 7);  //xPad, yPad 

您也可以尝试把约束上的按钮来强制布局,把它放在你想,但可能不会与makeCompactGrid很好地工作作为方法不会知道的按钮。

+0

这工作完美。谢谢 :) – MrSnare 2013-03-13 16:43:31

可以试试这个方法?

private void addComponent(Container container, Component c, int x, int y,int width, int  
height){ 

c.setBounds(x, y, width, height); 
container.add(c); 
} 

,并调用它是这样的:

addComponent(container such as JPanel, component such as a JButton, x position, yposition,  
width, height); 
+0

这没有奏效。我不知道为什么。尽管如此,另一个答案。感谢您的努力:) – MrSnare 2013-03-13 16:44:02