Désolé pour mon anglais. J'ai quelques problèmes avec JTextField et avec KeyListener. J'ai le code ci-dessous:KeyListener ne fonctionne pas avec JTextField
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");
}
};
}
Le problème est que l'auditeur ne fonctionne pas. Quelle pourrait-être la cause? Si j'ajouterai l'écouteur de souris cela fonctionne. Merci d'avance. Ne pas utiliser un KeyListener pour cela.
Définir l'expression « ne fonctionne pas ». Ce qui se produit? –
Et vous auriez rarement besoin d'utiliser un KeyListener avec un JTextField. Plus souvent vous utiliserez un DocumentFilter si vous avez besoin de saisir une entrée avant qu'elle ait été validée ou un DocumentListener pour après. –
Après une brève révision de votre code, je n'utiliserais pas une clé ou un écouteur de souris ici mais j'ajouterais plutôt un JButton à l'interface graphique et extrairais les données des champs et j'appellerais calculer depuis wih dans l'écouteur d'action du bouton. Essayez de garder les choses simples. –