【问题标题】:I'm having trouble with Java Layout我在使用 Java 布局时遇到问题
【发布时间】:2013-01-13 03:39:30
【问题描述】:

这是我的第一个 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         |

这是帮助理解我的问题的屏幕截图:

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

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 的建议:

【问题讨论】:

  • 我认为您的文本图像需要一些调整才能更好地显示您想要的 GUI。此外,您还需要创建并发布sscce,以便我们更轻松地分析、运行和改进您的代码。
  • 目前,您使用的是JPanel的默认布局:FlowLayout。切换到GridBagLayout 并使用面板嵌套来简化您的工作
  • 您应该知道,通过嵌套每个都有自己的布局的 JPanel 来嵌套布局很容易。也许您可以通过让主 JPanel 使用 BoxLayout,然后使用使用 GridBagLayout 的内部 JPanel 来实现您想要的效果。
  • @Hovercraft 满满的鳗鱼。我没有文字图片?您指的是标签还是文本字段?
  • 您尝试过 MigLayout 吗? miglayout.com

标签: java swing layout


【解决方案1】:

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

【讨论】:

  • 如果您查看 main() 内部,您会看到我已 setLayout() 对其进行了评论。这是因为我尝试了很多不同的布局,但都没有成功。我尝试使用两个不同的面板并尝试排列它们,但没有成功。我还是编程新手,这是第一次使用 GUI。如果其中一些内容超出我的想象,我深表歉意 =/
  • @billabrian6:不要为无知道歉——修复它。 layout manager tutorials 将有很大帮助,我根据经验发言,因为他们帮助解决了我的布局无知问题。
  • @HovercraftFullOfEels:你同意 GridBagLayout 最适合这种情况吗?我已经看过这些教程并尝试使用网格和边框布局,但没有成功。
  • @billabrian6:我会按照上面评论中的描述嵌套布局。我已经成功地将 GridBagLayout 用于包含组件网格的 GUI,例如 JLabels 和 JTextFields 的顶部分组以及底部分组,但同样,我会让整个 JPanel 使用 BoxLayout。布局管理器的关键是不断尝试变化,直到找到最有效的方法。还建议查看 MigLayout 。它非常强大,但需要下载才能获得。
  • @billabrian6:好的,忘记“忘记设置布局管理器”部分。我的答案的重要部分是:在设置完所有内容后在您的框架上调用 pack() 或 validate()。
【解决方案2】:

可以通过此处的其他一些建议(包括 GridBagLayout)实现您想要的布局,但迄今为止最简单的解决方案是使用 JGoodies FormLayout, 因为它是专门为创建需要排列字段和标签的布局而设计的。

【讨论】:

    【解决方案3】:

    GroupLayout,参见here,在标记表单方面做得很好,并且可以作为子面板进行管理。

    【讨论】:

    • 这是最好的建议。它很好地融合在一起。感谢您的意见和参考示例! TYVM!
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 2016-04-11
    • 1970-01-01
    • 2022-11-04
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多