【发布时间】:2011-12-18 07:05:51
【问题描述】:
对不起我的英语。 我对 JTextField 和 KeyListener 有一些问题。 我有下面的代码:
package com.gugnovich.tasks;
@SuppressWarnings("serial")
public class Task1Panel extends Task {
private static final String zLabel = "Please enter Z:";
private static final String eLabel = "Please enter E:";
private static final double K = 1.4;
private JTextField zField;
private JTextField eField;
private JTextField result;
private double zVal;
private double eVal;
private double resultVal;
@Override
protected void displayTaskPanel() {
/** Panel settings */
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBorder(new EmptyBorder(10, 15, 10, 10));
/** Add title of the task */
JLabel title = new JLabel(Constants.TASK1_TITLE + ":");
title.setFont(new Font("Monospaced", Font.BOLD, 18));
add(title);
/**
Form builder
*/
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(""));
builder.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
builder.setBackground(Color.decode(Constants.BACKGROUND_COLOR));
/**
Add columns
*/
builder.appendColumn("left:pref");
builder.appendColumn("3dlu");
builder.appendColumn("fill:max(pref; 100px)");
builder.appendSeparator("Enter params");
/**
Field for Z
*/
zField = new JTextField();
builder.append(zLabel, zField);
zField.addKeyListener(listener);
/**
Field for E
*/
eField = new JTextField();
builder.append(eLabel, eField, true);
eField.addKeyListener(listener);
builder.appendSeparator("Result");
/**
result field
*/
result = new JTextField();
result.setEnabled(false);
result.setDisabledTextColor(Color.BLACK);
builder.append("X = ", result);
add(builder.getPanel());
}
/**
listener
*/
private KeyListener listener = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("Typed");
JTextField zf = (JTextField) e.getSource();
zVal = Double.parseDouble(zf.getText());
JTextField ef = (JTextField) e.getSource();
eVal = Double.parseDouble(ef.getText());
if (zVal > 0.00 && eVal > 0.00) {
calculate();
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("Released");
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Pressed");
}
};
}
问题是监听器不起作用。可能是什么原因? 如果我将添加鼠标侦听器,它可以工作。 提前致谢。
【问题讨论】:
-
定义“不起作用”。会发生什么?
-
而且您很少需要将 KeyListener 与 JTextField 一起使用。如果您需要在提交之前捕获输入,或者在之后需要捕获输入,您通常会使用 DocumentFilter。
-
在简要回顾您的代码时,我不会在这里使用键或鼠标侦听器,而是将 JButton 添加到 GUI 并从字段中提取数据并从按钮的动作侦听器中调用计算.尽量保持简单。
-
“不起作用” = 事件未发生
标签: java swing jtextfield keylistener