【发布时间】:2017-06-16 04:36:14
【问题描述】:
我有一个非常简单的 Java 程序,旨在将华氏温度转换为摄氏温度,反之亦然。但是现在我只将它设置为从华氏温度转换为摄氏温度,我无法弄清楚如何让它双向工作。
最后,我希望用户能够在任一文本字段中键入内容,并让程序根据上次更改的任何文本字段知道要使用哪个公式。我想为此使用 Java 中的 KeyListener 函数,但是在阅读了有关它的文档后,我对如何进行此操作感到相当困惑。我知道我应该将它们添加到 textFields,但它的构造函数让我失望。
到目前为止,这是我的代码,如果有人可以解释如何将其合并到我的主类中,我将非常感激!
import java.awt.*;
import javax.swing.*;
public class Convert extends JFrame
{
private JTextField jtfFahr = new JTextField(10);
private JTextField jtfCels = new JTextField(10);
private JButton jbConvert = new JButton("Convert");
public static void main(String[] args)
{
new Convert();
}
public Convert()
{
setTitle("Convert");
setSize(400, 125);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel jpNorth = new JPanel(new GridLayout(0, 2));
jpNorth.add(new JLabel("Fahrenheit", JLabel.RIGHT));
jpNorth.add(jtfFahr);
jpNorth.add(new JLabel("Celcius", JLabel.RIGHT));
jpNorth.add(jtfCels);
add(jpNorth, BorderLayout.NORTH);
JPanel jpSouth = new JPanel();
jpSouth.add(jbConvert);
add(jpSouth, BorderLayout.SOUTH);
Converter cvt = new Converter(jtfFahr, jtfCels);
jbConvert.addActionListener(cvt);
setVisible(true);
}
}
下面是实际实现动作的类:
import javax.swing.*;
import java.awt.event.*;
public class Converter implements ActionListener
{
private JTextField jtfDegF;
private JTextField jtfDegC;
public Converter(JTextField _jtfDegF, JTextField _jtfDegC)
{
jtfDegF = _jtfDegF;
jtfDegC = _jtfDegC;
}
public void actionPerformed(ActionEvent ae)
{
if()
{
double degF = Double.parseDouble(jtfDegF.getText());
double degC = (degF - 32) * 5.0 / 9.0;
jtfDegC.setText(String.format("%.2f", degC));
}
else
{
double degC = Double.parseDouble(jtfDegC.getText());
double degF = (degC * 9.0 / 5.0) + 32;
jtfDegF.setText(String.format("%.2f", degF));
}
}
}
正如您所见,由于不知道如何设置“if”元素,它还没有完成。
任何关于如何实现 addKeyListener 的简单解释都会很棒!
【问题讨论】:
标签: java jpanel jbutton jtextfield