我需要做一个作业并创建一个计算器。它是一门初学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);
}
}
如果有人能向我展示正确的方向,我将不胜感激。
答案 0 :(得分:2)
Flowlayout或Gridlayout本身对你没有帮助。您可以使用Gridbaglayout,也可以使用FlowLaout + Gridlayout等布局组合。
如果您正在绘制计算器,我假设您正在绘制这样的东西:
顶部有标题信息,中间有计算器键盘,底部有其他按钮:
这可以通过垂直框布局实现,顶部和底部有铺设布局,中间是所有数字键的网格布局。
但是......如果你没有显示出你想要的东西的图表很难说。
答案 1 :(得分:1)
以下是使用多个Layout Managers
的示例,因为您可以看到可以使用多个here,但您应该使用多个JPanel
来实现您想要的效果。
另外一个建议是:不要从JFrame扩展,而是像我在本例中那样创建一个JFrame
对象和{{3}}这就是为什么你不应该去做。
import java.awt.*;
import javax.swing.*;
public class LayoutManagersExample {
public static void main(String args[]) {
new LayoutManagersExample();
}
public LayoutManagersExample() {
JFrame frame = new JFrame("Layout Managers Example");
JPanel topPane = new JPanel();
JPanel midPane = new JPanel();
JPanel panesHolder = new JPanel();
JLabel label = new JLabel("Top label");
JTextField field = new JTextField();
field.setColumns(5);
topPane.setLayout(new FlowLayout());
midPane.setLayout(new GridLayout(3, 2));
topPane.add(label);
topPane.add(field);
midPane.add(new JButton("Button 1"));
midPane.add(new JButton("Button 2"));
midPane.add(new JButton("Hello I'm a button"));
midPane.add(new JButton("HEY! Click me :)"));
midPane.add(new JButton("I love you"));
midPane.add(new JButton("This is another button"));
panesHolder.setLayout(new BoxLayout(panesHolder, BoxLayout.Y_AXIS));
panesHolder.add(topPane);
panesHolder.add(midPane);
frame.add(panesHolder);
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
}
这就是它的样子: