【发布时间】:2014-09-14 14:47:56
【问题描述】:
我需要做一个作业并创建一个计算器。这是一门初级 Java 课程,所以请记住,我不是专家。它不应该看起来很壮观,所以实现以下目标的最简单方法会很棒。
它的内部运作很好,但是画它真的很头疼。
到目前为止,我们只接触到了 flowlayout……在这种情况下,这根本不是我想要的。让我先告诉你我在寻找什么布局:
- 在顶部有一个横跨计算器的标题,可能带有一个 背景填充。
- 然后在其下方,两个按钮并排。
- 在其下方,两个标签彼此相邻。
- 然后是两个相邻的文本字段。
- 在其下方,两个标签彼此相邻。
- 然后是两个相邻的文本字段。
我尝试在这里绘制它,但它的格式不正确。如果我可以把它放在 HTML 中,它基本上就是一个简单的表格,有 6 行和 2 列。但顶行必须跨越两列。
Flowlayout 只需将所有内容从左到右并排放置即可。
之后我尝试使用GridLayout,但顶部标题是这里的问题,因为它没有跨越两列。
到目前为止,这是我的代码:
public class TripCalculator extends JFrame implements ActionListener {
public static final int WIDTH = 400;
public static final int HEIGHT = 300;
public static final int NUMBER_OF_CHAR = 4;
public JTextField stopTime, distance, tripTime, speed;
public TripCalculator() {
setSize(WIDTH, HEIGHT);
WindowDestroyer listener = new WindowDestroyer();
addWindowListener(listener);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
JLabel heading = new JLabel("HEADING");
contentPane.add(heading);
contentPane.setLayout(new FlowLayout());
JButton addStop = new JButton("BUTTON1");
addStop.addActionListener(this);
JButton addLeg = new JButton("BUTTON2");
addLeg.addActionListener(this);
contentPane.add(addStop);
contentPane.add(addLeg);
JLabel subHead1 = new JLabel("LABEL1");
contentPane.add(subHead1);
JLabel subHead2 = new JLabel("LABEL2");
contentPane.add(subHead2);
stopTime = new JTextField(NUMBER_OF_CHAR);
contentPane.add(stopTime);
distance = new JTextField(NUMBER_OF_CHAR);
contentPane.add(distance);
JLabel subHead3 = new JLabel("LABEL3");
contentPane.add(subHead3);
JLabel subHead4 = new JLabel("LABEL4");
contentPane.add(subHead4);
tripTime = new JTextField(NUMBER_OF_CHAR);
contentPane.add(tripTime);
speed = new JTextField(NUMBER_OF_CHAR);
contentPane.add(speed);
}
}
如果有人能告诉我正确的方向,我将不胜感激。
【问题讨论】:
-
我认为这应该可以使用内置的布局管理器,但我发现MigLayout 特别有用,因为它非常灵活和直观,并且还提供了一个调试渲染器来显示计算的布局约束。
-
FlowLayout显然不是正确的选择。您应该考虑GridLayout、BoxLayout或GridBagLayout。此外,还有更多由其他人(不是 JDK 的一部分)编写的布局管理器,例如MigLayout。我担心它会伴随着几个小时的学习。 -
您可以在
JFrame中使用 2JPanels。第一个显示输入/输出,例如FlowLayout,第二个显示按钮使用GridLayout。 -
Gridbaglayout 是您所需要的:blue-walrus.com/2011/12/gridbaglayout-tutorial
-
正如其他人所说,您可以使用这些布局或制作多个面板,每个面板都带有流布局(不是最好的方法,但由于您刚刚学习了该布局,您可以这样做),它是会很痛苦,但这是另一种方法。您可以查看更多关于Layout Managers 的信息,看看哪一个适合您的需求。该链接还提供了示例,或者您可以谷歌它们。
标签: java swing layout-manager grid-layout flowlayout