I';我在Java布局方面有问题
这是我的第一个GUI应用程序,我很难让它看起来整洁。我尝试了几种布局,并对它们进行了修补,例如流、网格、边框。当我运行程序时,所有的东西都混在一起了 我希望它看起来像:I';我在Java布局方面有问题,java,swing,layout,Java,Swing,Layout,这是我的第一个GUI应用程序,我很难让它看起来整洁。我尝试了几种布局,并对它们进行了修补,例如流、网格、边框。当我运行程序时,所有的东西都混在一起了 我希望它看起来像: Unloaded Measurement |textfield| |textfield| Loaded Rider Measurement |textField| |textfield| Loaded Bike Measurement |textField| |Textfield|
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 |
以下是帮助理解我的问题的屏幕截图:
顶部用于用户输入,底部用于计算输出。我希望我已经提供了足够的细节,以便对此有所帮助。我真的很感激任何帮助我的人!
这是我的密码:
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);
}
如果出于某种原因您需要查看更多的代码,请告诉我。我很乐意提供。谢谢你的帮助
我把这一切都解决了!我要感谢@trashgood的建议:
尝试在JFrame上调用pack(),设置布局时不会立即应用布局。或者,您可以使用validate(),它也应该布局组件。顺便说一句,在示例代码中没有设置布局管理器。尝试在JFrame上调用pack(),设置布局时不会立即应用布局。或者,您可以使用validate(),它也应该布局组件。顺便说一句,在您的示例代码中,您没有设置布局管理器。通过这里的一些其他建议(包括GridBagLayout),可以实现您想要的布局,但到目前为止,最简单的解决方案是使用,
因为它是专门为创建需要排列字段和标签的布局而设计的。通过这里的一些其他建议(包括GridBagLayout),可以实现您想要的布局,但到目前为止,最简单的解决方案是使用,
因为它是专门为创建需要排列字段和标签的布局而设计的。
GroupLayout
,请参阅,它在标记表单上做得很好,并且作为子面板进行管理
GroupLayout
,请参阅,它在标记表单上做得很好,并且可以作为子面板进行管理
我认为您的文本图像需要一些调整,以便更好地显示所需的GUI。此外,您还需要创建并发布一个,以使我们能够更轻松地分析、运行和改进您的代码。切换到
GridBagLayout
并使用面板嵌套来简化您的工作。您应该知道,通过嵌套每个面板都有自己的布局的JPanel来嵌套布局是很容易的。也许您可以通过让主JPanel使用BoxLayout,然后使用使用GridBagLayout的内部JPanel来达到您想要的效果。@气垫船上满是鳗鱼。我没有文本图像?您指的是标签或文本字段吗?您尝试过MigLayout吗?我认为您的文本图像需要一些调整,以便更好地显示所需的GUI。此外,您还需要创建并发布一个,以使我们能够更轻松地分析、运行和改进您的代码。切换到GridBagLayout
并使用面板嵌套来简化您的工作。您应该知道,通过嵌套每个面板都有自己的布局的JPanel来嵌套布局是很容易的。也许您可以通过让主JPanel使用BoxLayout,然后使用使用GridBagLayout的内部JPanel来达到您想要的效果。@气垫船上满是鳗鱼。我没有文本图像?您指的是标签或文本字段吗?您尝试过MigLayout吗?如果您查看main()的内部,您将看到我已经对它进行了setLayout()注释。这是因为我尝试了很多不同的布局,但都没有成功。我试着使用两个不同的面板,并试图安排他们,但没有成功。我对编程还是新手,这是第一次使用GUI。如果有些事情超出了我的理解范围,我向你道歉。=/@billabrian6:不要为无知道歉,修复它。这将大有帮助,我根据经验说,他们帮助修复了我的布局问题。@HovercraftFullOfEels:你同意GridBagLayout最适合这种情况吗?我已经看过这些教程,并尝试同时使用网格和边框布局,但没有成功。@billabrian6:我将按照上面的评论中所述嵌套布局。我已经成功地为GUI使用了GridBagLayout,它包含了一个组件网格,如JLabel和JTextFields的顶部分组以及底部分组,但同样,我会使用整个JPanel use-BoxLayout。布局管理器的关键是不断使用变体,直到找到最有效的。此外,还应研究MIG布局,正如所建议的那样。它非常强大,但需要下载。@billabrian6:Ok,忘记“忘记设置布局管理器”部分吧。我回答的重要部分是:在设置好所有内容后,在框架上调用pack()或validate()。如果查看main()内部,您将看到我已对其进行了setLayout()注释。这是因为我尝试了很多不同的布局,但都没有成功。我试着使用两个不同的面板,并试图安排他们,但没有成功。我对编程还是新手,这是第一次使用GUI。如果有些事情超出了我的理解范围,我向你道歉。=/@billabrian6:不要为无知道歉,修复它。这将大有帮助,我根据经验说,他们帮助修复了我的布局问题。@HovercraftFullOfEels:你同意GridBagLayout最适合这种情况吗?我已经看过这些教程,并尝试同时使用网格和边框布局,但没有成功。@billabrian6:我将按照上面的评论中所述嵌套布局。我已经成功地为GUI使用了GridBagLayout,它包含了一个组件网格,如JLabel和JTextFields的顶部分组以及底部分组,但同样,我会使用整个JPanel use-BoxLayout。布局管理器的关键是不断使用变体,直到找到最有效的。此外,还应研究MIG布局,正如所建议的那样。它非常强大,但需要下载