我需要创建一个显示里程和公里的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);
}
}
答案 0 :(得分:3)
而不是将KeyListeners
添加到文本字段(实际上效果不好),您应该添加ActionListener
,就像您将一个动作侦听器弄到一个按钮一样。按Enter键时会激活它们。
答案 1 :(得分:2)
使用KeyListener可以使用KeyBindings
当你使用keyListener执行每个键(键入,释放或按下)时, KeyListener
不适合你正在做的事情。
所以如果使用KeyBinding,则将操作绑定到特定键
AbstractAction enterAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//conversion code here example
}};
String key = "ENTER";
KeyStroke keyStroke = KeyStroke.getKeyStroke(key);
component.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, key);
component.getActionMap().put(key, escapeAction);
最好的你不必专注或专注。您可以使用这些JComponent常量
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
WHEN_FOCUSED
WHEN_IN_FOCUSED_WINDOW
答案 2 :(得分:-1)
来自:jcpartri
您好!
此链接可能会对您有所帮助。它也位于stackoverflow.com中。 有没有理由你切换到一个KeyListener和另一个ActionListener? 以下链接建议您使用keyReleased方法。