所以我试图制作一个小程序来计算特定形状的面积。 用户应该能够通过文本字段进行输入(如形状的高度和内容)。他应该按一个按钮,价格应该打印出来。 但它没有出现。
代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Rechner extends JFrame implements ActionListener{
private static JButton button1;
private static JButton button2;
private static JButton button3;
private static JButton button4;
private static JTextField numberField;
private JPanel jpanel;
public Rechner(String titel){
super(titel);
jpanel = new JPanel();
numberField = new JTextField(1500);
add(numberField, BorderLayout.CENTER);
button1 = new JButton("Rechteck");
button1.setBounds(10, 10, 150, 30);
button1.addActionListener(this);
add(button1);
button2 = new JButton("Dreieck");
button2.setBounds(170, 10, 150, 30);
button2.addActionListener(this);
add(button2);
button3 = new JButton("Trapez");
button3.setBounds(330, 10, 150, 30);
button3.addActionListener(this);
add(button3);
button4 = new JButton("Parallelogramm");
button4.setBounds(490, 10, 150, 30);
button4.addActionListener(this);
add(button4);
setResizable(false);
}
public static void main(String[] args) {
Rechner frame = new Rechner("Menu");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(660, 400);
frame.setLayout(null);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button1){
System.out.println("fff");
}
String numberStr = numberField.getText();
}
}
答案 0 :(得分:2)
JFrame
的默认布局管理器(实际上是其内容窗格)BorderLayout
。
如果没有指定的约束,组件将添加到BorderLayout.CENTER
,所以
add(component);
与
相同add(component, BorderLayout.CENTER);
以这种方式添加的每个组件将替换添加到中心的最后一个组件。
另请注意,如果有布局管理器,setBounds
将无效,并且您创建了一个永不使用的JPanel
。
最后,您可能需要查看本指南:A Visual Guide to Layout Managers
答案 1 :(得分:2)
这一行主要是问题所在:
add(numberField, BorderLayout.CENTER);
导致TextField填满整个空间。然后,下次使用BorderLayout.CENTER
将组件添加到JFrame时,将替换JTextField。解决这个问题:
super(titel);
jpanel = new JPanel();
add(jpanel, BorderLayout.NORTH); //adding the jpanel
button1 = new JButton("Rechteck");
jpanel.add(button1);
button1.setBounds(10, 10, 150, 30);
//adding the other buttons to the JPanel...
//...
//...
button4.addActionListener(this);
button3.addActionListener(this);
button2.addActionListener(this);
button1.addActionListener(this);
numberField = new JTextField(1500);
add(numberField);//this will cause it to fill the remaining space
setResizable(false);
说明:
按钮应该进入您创建的JPanel
,JPanel
应该进入JFrame
' NORTH
。这样他们就不会涵盖JFrame