2016-12-20 2 views
0

그래서 특정 모양의 면적을 계산하는 작은 프로그램을 만들려고합니다. 사용자는 텍스트 필드를 통해 입력을 할 수 있어야합니다 (모양의 높이 및 재료와 같음). 그는 버튼을 눌러 가격을 인쇄해야합니다. 하지만 나타나지 않습니다.JAVA JTextField가 보이지 않는다

코드 :

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

나는 [ask]와 [tour]에 모자를 사기 위해 링크하러 갈 것이다. –

+0

'swing '으로 작업하지는 않았지만,이 클래스는'ActionListener'를 구현했기 때문에'actionPerformed'가 그 리스너 클래스의 일부라고 가정합니다. '@ Override'가되어서는 안됩니까? –

+1

정확히 표시되어야 할 내용은 무엇입니까? 'actionPerformed'는 표준 출력에 "fff"를 출력합니다 (또한 즉시 버려지는 로컬 변수에 값을 할당합니다). 그게 뭘 기대하니? – RealSkeptic

답변

2

JFrame의 기본 레이아웃 매니저 (물론, 사실의 내용 창으로) BorderLayout입니다. 지정된 제약없이

는 구성 요소가 너무

add(component); 

add(component, BorderLayout.CENTER); 

같은과 받는 추가 마지막 구성 요소를 대체 할이 방법으로 추가 된 각 구성 요소, BorderLayout.CENTER에 추가 센터.

또한 setBounds은 레이아웃 관리자가없고 사용하지 않는 JPanel을 만들면 아무런 효과가 없습니다.

마지막으로, 당신은이 가이드에서보고를 할 수 있습니다 :

add(numberField, BorderLayout.CENTER); 

전체 공간을 채우기 위해 TextField를 일으키는 원인이된다 A Visual Guide to Layout Managers

2

이 줄은 주로 문제입니다. 그런 다음 다음 번에 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 만든, 그리고 JPanelJFrameNORTH에 가야한다. 그 방법 그들은 커버하지 않는다 JFrame

관련 문제