JLabel未在GUI中显示文本

时间:2013-05-03 14:55:18

标签: java swing parsing jlabel jtextfield

所以我的代码要求用户输入。然后转换临时。应该很简单,但我的代码不起作用。它没有输出我的标签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);
  }
     }

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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);
}
}