我在使用Java Layout时遇到了麻烦

时间:2013-01-12 15:02:36

标签: java swing layout

这是我的第一个GUI应用程序,我很难让它看起来整洁。我已经尝试了几种布局并对它们进行修补,例如流,网格,边框。当我运行该程序时,一切都只是乱七八糟。

我希望它看起来像:

Unloaded Measurement      |textfield| |textfield|
Loaded Rider Measurement  |textField| |textfield|
Loaded Bike Measurement   |textField| |Textfield|

                   |Button|
_______________________________________________________________________________________

Race Sag: |TextField|
Free Sag: |TextField|
Race Sag Notes: |       TextField         |
Free Sag Notes: |       TextField         |

这是一个屏幕截图,有助于了解我的问题: Screenshot

顶部是用户输入,底部是计算输出。我希望我已经提供了足够的细节以帮助解决这个问题。我非常感谢有帮助的人! 这是我的代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Main extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel panel;
private JLabel messageLabel;
private JLabel messageLabel1;
private JLabel messageLabel2;
private JLabel raceSagLabel;
private JLabel freeSagLabel;
private JTextField wholeTextField;
private JTextField wholeTextField1;
private JTextField wholeTextField2;
private JTextField fracTextField;
private JTextField fracTextField1;
private JTextField fracTextField2;
private JTextField raceSagText;
private JTextField freeSagText;
private JTextField noteText;
private JTextField noteText1;
private JButton calcButton;
private final int WINDOW_WIDTH = 575;
private final int WINDOW_HEIGHT = 400;


/*===============================================================================
    Project : test.java - SagCalculator
    Author  : Brian Green
    Date    : Jan 10, 2013
    Abstract:   

  ===============================================================================*/
public static void main(String[] args) {
    @SuppressWarnings("unused")
    Main sc = new Main();
}
public Main(){
    setTitle("Rider Sag Calculator");
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //setLayout();
    buildPanel();
    add(panel);
    setVisible(true);
}
private void buildPanel(){
    messageLabel = new JLabel("Enter Unloaded Stand Measurement");
    messageLabel1 = new JLabel("Enter Loaded with Rider Measurement");
    messageLabel2 = new JLabel("Enter Loaed without Rider Measurement");
    wholeTextField = new JTextField(3);
    fracTextField = new JTextField(3);
    wholeTextField1 = new JTextField(3);
    fracTextField1 = new JTextField(3);
    wholeTextField2 = new JTextField(3);
    fracTextField2 = new JTextField(3);
    calcButton = new JButton("Calculate");
    raceSagLabel = new JLabel("Race Sag: ");
    raceSagText = new JTextField(5);
    freeSagLabel = new JLabel("Free Sag: ");
    freeSagText = new JTextField(5);
    noteText = new JTextField(30);
    noteText1 = new JTextField(30);

    calcButton.addActionListener(new CalcButtonListener());
    panel = new JPanel();

    panel.add(messageLabel);
    panel.add(wholeTextField);
    panel.add(fracTextField);
    panel.add(messageLabel1);
    panel.add(wholeTextField1);
    panel.add(fracTextField1);
    panel.add(messageLabel2);
    panel.add(wholeTextField2);
    panel.add(fracTextField2);
    panel.add(calcButton);  
    panel.add(raceSagLabel);
    panel.add(raceSagText);
    panel.add(freeSagLabel);
    panel.add(freeSagText);
    panel.add(noteText);
    panel.add(noteText1);



}

如果由于某种原因你需要查看更多代码,请告诉我。我很乐意提供。谢谢你的帮助!

我把这一切都解决了!我要感谢@trashgod的建议: enter image description here

3 个答案:

答案 0 :(得分:2)

尝试在JFrame上调用pack(),设置时不会立即应用布局。或者,您可以使用validate(),它也应该布置组件。顺便说一句。在示例代码中,您没有设置布局管理器。

答案 1 :(得分:2)

可以通过这里的一些其他建议(包括GridBagLayout)实现您想要的布局,但到目前为止最简单的解决方案是使用JGoodies FormLayout, 因为它明确地设计用于创建需要排列字段和标签的布局。

答案 2 :(得分:1)

GroupLayout,请参阅here,在已标记的表单上做得很好,并且可以作为子面板进行管理。

image