【发布时间】:2013-07-24 16:31:15
【问题描述】:
我需要创建一个 JPanel 来显示 英里 和 公里。当您将数字输入一个时,它会使用 Enter 键将其转换为另一个。
我不知道如何正确获取KeyListener 来执行转换。我不是在寻找答案,只是一些指导或类似示例的链接。
谢谢。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class Ch09Asg extends JFrame {
private JTextField jtfMiles = new JTextField(10);
private JTextField jtfKilo = new JTextField(10);
public Ch09Asg() {
JPanel p1 = new JPanel(new GridLayout(2,2));
p1.setSize(400,250);
p1.add(new JLabel("Mile"));
p1.add(jtfMiles);
p1.add(new JLabel("Kilometers"));
p1.add(jtfKilo);
jtfMiles.setHorizontalAlignment(JTextField.RIGHT);
jtfKilo.setHorizontalAlignment(JTextField.RIGHT);
add(p1, BorderLayout.CENTER);
jtfMiles.addActionListener(new ButtonListener(){
});
jtfKilo.addActionListener(new ButtonListener(){
});
}
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//double mi = convertKmtoMi
//Double.parseDouble(jtfMiles.getText());
//double kilom =
//Double.parseDouble(jtfKilo.getText());
//---------------------------------------KILOTOMILE
String kmStr = jtfKilo.getText(); //Note 3
double km = Double.parseDouble(kmStr);
//... Convert it
double mi = convertKmToMi(km); //Note 4
//... Convert it to a string and set mi textfield
jtfMiles.setText("" + mi);
//--------------------------------------MILESTOKILO
String miStr = jtfMiles.getText(); //Note 3
double mi2 = Double.parseDouble(miStr);
//... Convert it
double km2 = convertKmToMi(mi2); //Note 4
//... Convert it to a string and set mi textfield
jtfMiles.setText("" + km2);
}
}
public static double convertKmToMi(double kilometers) {
// Assume there are 0.621 miles in a kilometer.
double miles = kilometers * 0.621;
return miles;
}
public static double convertMitoKm(double miles) {
// Assume there are 0.621 miles in a kilometer.
double kilometers = miles / 0.621;
return kilometers;
}
public static void main(String[] args) {
Ch09Asg frame = new Ch09Asg();
frame.pack();
frame.setTitle("Mile/Kilometer Converter");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
【问题讨论】:
-
顺便说一句,
if (e.getKeyCode() == KeyEvent.VK_ENTER);什么都不做,System.out.println("43");应该是System.out.println("42");:-) -
我不确定如何将 KeyEvent 链接到 ButtonListener 类。我正在使用 System.out 来查看它是否至少在文本字段中读取了 Enter 。我完全迷路了。对不起,如果我的代码到处都是。
-
@user2616657,阅读给出的答案。您不应该使用 KeyEvent。您只需使用 addActionListener() 方法将 ButtonListener 添加到文本字段。
-
非常感谢!我得到了工作和计算的密钥,但要使文本字段工作,我必须在 actionPerformed 区域中只有一个。我是否为其他文本字段计算创建另一个 actionPerformed?
-
另见
Converter。
标签: java swing jtextfield keylistener