gpt4 book ai didi

java - KeyListener 不适用于 JTextField

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:35 25 4
gpt4 key购买 nike

对不起我的英语。我在使用 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 中放置更改后对更改使用react,我通常会使用 DocumentListener 来收听 JTextField 的文档,但即使这样也不太适合此类问题,因为您会尝试在字段完全填写之前进行计算,并且最初是在其中一个 JTextFields 收到任何数据之前进行计算。

更好的方法是向您的 GUI 添加一个 JButton,并在该 JButton 的 ActionListener 中提取和解析来自 JTextFields 的文本,调用计算方法并显示计算结果。这样您就不会过早得到结果,而只会在用户输入信息并确定输入的数据有效并且现在是时候进行计算后才进行计算。您甚至可以禁用该按钮,直到两个 JTextField 都包含数据(DocumentListener 可以很好地解决这个问题)。

关于java - KeyListener 不适用于 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com