2013-05-03 3 views
0

그래서 내 코드는 사용자에게 입력을 요청합니다. 그런 다음 임시직을 전환합니다. 간단해야하지만 내 코드가 작동하지 않습니다. 내 lable 3을 출력하지 않습니다. 단지 아무것도하지 않습니다. 그건 내가 내 코드와 데 유일한 문제입니다, 난 그냥 해결하는 방법을 잘 모릅니다 그것을JLabel이 GUI에 텍스트를 표시하지 않습니다.

import javax.swing.*; 


    public class FahrenheitPanel extends JPanel 

    { 

private JLabel lable1; 
private JLabel lable2; 
private JLabel lable3; 
private JTextField fahrenheit; 
    public FahrenheitPanel() 

    { 

    lable1 = new JLabel ("Enter Fahrenheit temperature:"); 

    lable2 = new JLabel ("Temperature in Celsius: "); 

    fahrenheit = new JTextField (5); 

    fahrenheit.addActionListener (new TempListener()); 
    add (lable1); 
    add (fahrenheit); 
    add (lable2);  


    setPreferredSize (new Dimension(300, 75)); 

} 

private class TempListener implements ActionListener 

{ 
    public void actionPerformed (ActionEvent event) 

    { 

    int fahrenheitTemp, celsiusTemp; 

    String text = fahrenheit.getText(); 
    fahrenheitTemp = Integer.parseInt (text); 

    celsiusTemp = (fahrenheitTemp-32) * 5/9; 
    lable3.setText(Integer.toString (celsiusTemp)); 
     add (lable3);       
    } 
} 


    public static void main (String[] args) 
    { 
    JFrame frame = new JFrame ("Fahrenheit to Celsius Converter"); 

    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    FahrenheitPanel panel = new FahrenheitPanel(); 
    frame.getContentPane().add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
    } 
+2

코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다! –

답변

2

이 당신이 시도된다는 것을 의미하기로 actionPerformed(...) 방법에 GUI에 labl3의 JLabel의를 추가하지 마십시오 리스너 메소드가 호출 될 때까지 JLabel을 여러 번 추가하고 revalidate를 호출하고 불필요하게 다시 칠할 필요가 있습니다. 대신 클래스 생성자의 맨 처음부터이 JLabel을 GUI에 추가하십시오.

+1

@ ser2264202 일반 JTextField 대신 숫자 포맷터로 JFormattedTextField를 사용하십시오. – mKorbel

2

세 번째 레이블은 기본 텍스트와 함께 처음부터 프레임에 추가되어야합니다.

레이블을 동적으로 추가하는 경우 컨테이너의 유효성을 검사해야합니다 (패널의 validate() 호출).

또한 패널의 기본 크기를 설정하지 마십시오. 레이아웃 관리자는 포함 된 구성 요소에 따라 기본 크기를 계산합니다.

2

우선 두 가지 숫자가있을 수 있기 때문에 정수 값을 Double로 변환했습니다. 두 번째로 클래스에 라벨을 추가하지 않았습니다. 문제가 있습니다. 문제가있는 경우 프로그램을 실행하십시오. 언제든지 물어보십시오

import java.awt.Dimension; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.*; 


    public class FahrenheitPanel extends JPanel 

     { 

      private JLabel lable1; 
      private JLabel lable2; 
      private JLabel lable3; 
      private JTextField fahrenheit; 

    public FahrenheitPanel() 

     { 

      lable1 = new JLabel ("Enter Fahrenheit temperature:"); 

     lable2 = new JLabel ("Temperature in Celsius: "); 

     lable3 = new JLabel(""); 
     fahrenheit = new JTextField (5); 

     fahrenheit.addActionListener ((ActionListener) new TempListener()); 
     add (lable1); 
     add (fahrenheit); 
     add (lable2);  
     add(lable3); 

     setPreferredSize (new Dimension(250, 75)); 

     } 

    private class TempListener implements ActionListener 

     { 
      public void actionPerformed (ActionEvent event) 

       { 

        double fahrenheitTemp, celsiusTemp; 

        String text = fahrenheit.getText(); 
        fahrenheitTemp = Double.parseDouble (text); 

        celsiusTemp = ((fahrenheitTemp-32) * 5/9); 
        lable3.setText(Double.toString (celsiusTemp)); 

       } 
     } 


public static void main (String[] args) 
{ 
     JFrame frame = new JFrame ("Fahrenheit to Celsius Converter"); 

     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     FahrenheitPanel panel = new FahrenheitPanel(); 
     frame.getContentPane().add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
} 
} 
관련 문제