gpt4 book ai didi

java - 大量 JTextField 的一键监听器

转载 作者:行者123 更新时间:2023-11-30 03:44:30 25 4
gpt4 key购买 nike

我的英语很差,所以我在 Google 上找不到任何内容,我有一个 JFrame 和一个 JPanel,其中包含很多 JTextField.当我创建“保存文件”功能时,我必须为每个 JTextField 放置一个 KeyListener。有没有更有效的方法?

编辑:测试自上次保存以来是否有任何字段被修改

最佳答案

关于,

EDIT: is to test if any of the fields have been modified since last save

然后使用 DocumentListener。通过这种方式,您可以监听按键之外发生的更改(例如剪切和粘贴),并且仍然做出相同的响应。

你问:

this looks cool, but is there any way of adding it to the JPanel or I need to add it to all the fields?

您需要将监听器添加到每个字段的文档中,但如果将字段放入列表或数组中,则使用简单的 for 循环即可轻松完成。例如运行以下代码。每当按下保存按钮时,或者通过按 Alt-s 激活它时,它就会被禁用。对任何 JTextField 所保存的文档进行任何更改都会自动启用它。

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class DocListenerEg extends JPanel {
private static final int FIELD_COUNT = 10;
private static final int COLUMNS = 8;
private JButton saveButton = new JButton(new SaveAction("Save", KeyEvent.VK_S));
private List<JTextField> fieldList = new ArrayList<>();

public DocListenerEg() {
MyDocListener docListener = new MyDocListener();
add(saveButton);
for (int i = 0; i < FIELD_COUNT; i++) {
JTextField field = new JTextField(COLUMNS);
add(field);
fieldList.add(field);

field.getDocument().addDocumentListener(docListener);
}
}

public void documentChange() {
saveButton.setEnabled(true);
}

private class MyDocListener implements DocumentListener {
private boolean changed = false;

@Override
public void changedUpdate(DocumentEvent dEvt) {
documentChange();
}

@Override
public void insertUpdate(DocumentEvent dEvt) {
documentChange();
}

@Override
public void removeUpdate(DocumentEvent dEvt) {
documentChange();
}

}

private class SaveAction extends AbstractAction {

public SaveAction(String name, int mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}

@Override
public void actionPerformed(ActionEvent evt) {
// TODO: save the data
((AbstractButton) evt.getSource()).setEnabled(false);
}

}

private static void createAndShowGui() {
DocListenerEg mainPanel = new DocListenerEg();

JFrame frame = new JFrame("DocListenerEg");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - 大量 JTextField 的一键监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080000/

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