Warum muss ich drücken Sie zweimal für diese JFormattedTextField eingeben, um die Standard-Schaltfläche JDialog zu aktivieren?
-
03-10-2019 - |
Frage
Im folgenden Codebeispiel, wenn ein Benutzer den Inhalt der JFormattedTextField ändert sich dann die Eingabetaste drückt, wird der Dialog soll als handeln, wenn die OK-Taste gedrückt wird. Aber es braucht zwei Pressen für diese Eingabe geschehen.
Die Plain-Vanilla-JTextField wirkt immer wie ich erwarten würde -. Ändern Sie den Text dann aktiviert durch Drücken der Eingabetaste die OK-Taste sofort
Das in Mac OS X 10.6 mit dem aktuellen Mac Java Update 1.6.0_20.
Ist das ein work-around? Ist das ein Mac-spezifisches Problem?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.text.NumberFormat;
import java.text.ParseException;
public class ScratchSpace {
public static void main(final String[] args) throws ParseException {
final JDialog dialog = new JDialog((Frame) null, "Test", true);
dialog.setLayout(new FlowLayout());
dialog.add(new JLabel("text field: "));
dialog.add(new JTextField(20));
dialog.add(new JLabel("formatted text field: "));
final JFormattedTextField formattedTextField = new JFormattedTextField(NumberFormat.getIntegerInstance());
formattedTextField.setValue(42);
formattedTextField.setColumns(20);
dialog.add(formattedTextField);
final JButton okButton = new JButton(new AbstractAction("OK") {
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
dialog.add(okButton);
dialog.getRootPane().setDefaultButton(okButton);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}
}
Lösung
Das Hinzufügen dieser Code hat das Problem gelöst,
formattedTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dialog.dispose();
}
});
Andere Tipps
Das hat mein Problem nicht lösen. Allerdings schien es, dass die Problemlösung war viel einfacher für mich:
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
add(jTextField1); //this reacts after the "ENTER" gets pressed
jButton1.doClick(); //this activates the button
jTextField1.setText(""); //this removes the text from a text-field
jTextField1.grabFocus(); //this sets a cursor within a text-field
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow