JAVA JTextField没有显示出来

时间:2016-12-20 15:34:57

标签: java swing

所以我试图制作一个小程序来计算特定形状的面积。 用户应该能够通过文本字段进行输入(如形状的高度和内容)。他应该按一个按钮,价格应该打印出来。 但它没有出现。

代码:

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();


}

}

2 个答案:

答案 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);

说明:

按钮应该进入您创建的JPanelJPanel应该进入JFrame' NORTH。这样他们就不会涵盖JFrame