intellij-idea 如何为多个JTextField提供addKeyListener(),而无需反复编写相同的代码

jdg4fx2g  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(167)
  1. private JTextField f1TextField;
  2. f1TextField.addKeyListener(new KeyAdapter() {
  3. @Override
  4. public void keyTyped(KeyEvent e) {
  5. super.keyTyped(e);
  6. char key = e.getKeyChar();
  7. String text = f1TextField.getText().trim();
  8. if((text.indexOf('.') > -1) && key == '.'){
  9. e.consume();
  10. }
  11. if(!Character.isDigit(key) && key != '.' && key != '-'){
  12. e.consume();
  13. }
  14. if((text.indexOf('-') > -1) && key == '-'){
  15. e.consume();
  16. }
  17. if((text.indexOf('-') == -1) && key == '-' && !text.equals("") && !text.equals(".")){
  18. f1TextField.setText(String.valueOf((Double.parseDouble(text))*(-1)));
  19. e.consume();
  20. }
  21. }
  22. });

这是我想为我的许多JTextField提供的KeyListener,但是我不知道该怎么做。我试着创建一个类来扩展JTextField并实现KeyListener(将此代码放在KeyTyped下),但这并没有解决我的问题(在我的应用程序的.form中,出现了一个错误,指出找不到类,并且“Form包含具有自定义创建选项的组件,但没有createuicomponents()”方法””,在创建createuicomponents()后,程序启动,但我的自定义JTextField无法正常工作。是否有任何方法可以轻松完成此操作?或者我是否犯了一些我不知道的错误?我的Java水平确实不高,请帮助;(

zzzyeukh

zzzyeukh1#

您可以将匿名类设置为实际的类。

  1. import java.awt.event.KeyAdapter;
  2. import java.awt.event.KeyEvent;
  3. import javax.swing.JTextField;
  4. public class JTextFieldKeyListener extends KeyAdapter {
  5. private final JTextField textField;
  6. public JTextFieldKeyListener(JTextField textField) {
  7. this.textField = textField;
  8. }
  9. @Override
  10. public void keyTyped(KeyEvent e) {
  11. super.keyTyped(e);
  12. char key = e.getKeyChar();
  13. String text = textField.getText().trim();
  14. if ((text.indexOf('.') > -1) && key == '.') {
  15. e.consume();
  16. }
  17. if (!Character.isDigit(key) && key != '.' && key != '-') {
  18. e.consume();
  19. }
  20. if ((text.indexOf('-') > -1) && key == '-') {
  21. e.consume();
  22. }
  23. if ((text.indexOf('-') == -1) && key == '-' && !text.equals("")
  24. && !text.equals(".")) {
  25. textField.setText(String.valueOf(
  26. (Double.parseDouble(text)) * (-1)));
  27. e.consume();
  28. }
  29. }
  30. }

然后,创建所需数量的示例。

  1. f1TextField.addKeyListener(new JTextFieldKeyListener(f1TextField));
  2. f2TextField.addKeyListener(new JTextFieldKeyListener(f2TextField));
  3. f3TextField.addKeyListener(new JTextFieldKeyListener(f3TextField));
  4. ...

如果您使用的是GUI构建器,那么您必须弄清楚如何添加新的类和示例调用,这就是为什么我总是建议您手工编写Swing代码。

展开查看全部

相关问题