0

所以我的代码要求用户输入。然后转换温度。应该很简单,但我的代码不起作用。它不输出我的标签 3 它什么也不做。这是我的代码唯一的问题,我只是不知道如何解决它

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

3 回答 3

2

首先,我将 Integer 值转换为 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);
}
}
于 2013-05-03T15:09:10.027 回答
2

不要在actionPerformed(...)方法中将 labl3 JLabel 添加到您的 GUI,因为这样做意味着您将尝试在调用侦听器方法时多次添加 JLabel,并且将需要调用 revalidate 并不必要地重新绘制。而是在类的构造函数中从一开始就将此 JLabel 添加到您的 GUI 中。

于 2013-05-03T14:59:41.110 回答
2

第三个标签应该从一开始就添加到框架中,并带有一些默认文本。

如果您动态添加标签,则必须验证容器(通过调用validate()面板)。

此外,您不应设置面板的首选大小。布局管理器根据它包含的组件计算首选大小。

于 2013-05-03T15:00:13.420 回答