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