2016-12-20 45 views
0

Also ich versuche, ein kleines Programm zu machen, um den Bereich einer bestimmten Form zu berechnen. Der Benutzer sollte in der Lage sein, eine Eingabe über ein Textfeld (wie die Höhe und die Sachen der Formen) zu machen. Der sollte einen Knopf drücken und der Preis sollte gedruckt werden. Aber es zeigt sich nicht.JAVA JTextField wird nicht angezeigt

Code:

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

Ich werde Link zu [fragen] und die [Tour], um einen Hut zu bekommen. –

+0

Ich habe nicht mit 'swing' gearbeitet, aber da diese Klasse' ActionListener' implementiert, nehme ich an, dass 'actionPerformed' Teil dieser Listener-Klasse ist. Sollte es nicht '@ Override' sein? –

+1

Was sollte genau angezeigt werden? Ihr 'actionPerformed' gibt nur" fff "an die Standardausgabe aus (und weist auch einen Wert einer lokalen Variablen zu, die sofort verworfen wird). Was erwartest du das zu tun? – RealSkeptic

Antwort

2

Das Standard-Layout-Manager eines JFrame (na ja, der Inhaltsbereich in der Tat) ist BorderLayout.

Ohne angegebenen Einschränkungen wird die Komponente zu BorderLayout.CENTER, zugegeben, so

add(component); 

ist die gleiche wie

add(component, BorderLayout.CENTER); 

und jede Komponente auf diese Weise hinzugefügt werden die letzte Komponente der zusätzlichen ersetzen Center.

Beachten Sie auch, dass setBounds keine Auswirkungen hat, wenn ein Layout-Manager vorhanden ist und Sie eine JPanel erstellen, die Sie nie verwenden.

Schließlich können Sie einen Blick auf diese Anleitung haben wollen: A Visual Guide to Layout Managers

2

Diese Linie ist in erster Linie das Problem:

add(numberField, BorderLayout.CENTER); 

verursacht das TextField- den ganzen Raum zu füllen. Wenn Sie dann das nächste Mal eine Komponente mit BorderLayout.CENTER dem JFrame hinzufügen, wird JTextField ersetzt. Um dies zu beheben:

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

Erläuterung:

Die Tasten in der gehen sollte JPanel Sie erstellt haben, und die JPanel sollte die JFrame ‚s NORTH gehen. So decken sie nicht die JFrame