首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swing监视器未保存的更改

Swing监视器未保存的更改
EN

Stack Overflow用户
提问于 2014-11-06 12:12:06
回答 1查看 218关注 0票数 0

我开发了一个由12个JPanels组成的图形界面,每个界面都包含4到10个 JTextFields。,我想实现一个,以防用户更改了某些JTextFields的内容,但没有将更改提交到数据库。

如何做到这一点?我的第一个想法是使用ItemListener并注册所有JTextFields。我可以为每个面板存储一个变量boolean ,并检查所有面板是否为false。

你能想象另一个更有效的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-06 16:04:25

你有两个选择。

  1. 您可以在每个DocumentListener的文档上注册一个JTextField。 textField.getDocument().addDocumentListener(documentListener) 缺点:即使用户将值更改为原始值,也会将文本字段标记为已更改。要处理此问题,可以将原始值保存在自己的文档侦听器中,并将新值与其进行比较。hasChanged()方法为您提供了想要的信息。 导入javax.swing.Ev.*;导入javax.swing.text.*;公共类DocumentChangeListener实现DocumentListener {私有布尔值更改;私有最终字符串originalValue;公共DocumentChangeListener(字符串originalValue) { this.originalValue = originalValue;}受保护的void (DocumentEvent e) { if (e.getDocument() instanceof PlainDocument) { PlainDocument doc = ((PlainDocument)e.getDocument());尝试{ String value = doc.getText(0,doc.getLength());changed = originalValue == null DocumentEvent!originalValue.equals(值);} catch(BadLocationException exc) { exc.printStackTrace();}}公共void (DocumentEvent e) { changed(e);}公共布尔hasChanged() {返回this.changed;}公共空insertUpdate(DocumentEvent e) { changed( e);} public void removeUpdate(DocumentEvent E){ changed(e);}}
  2. 您可以将文本字段中显示的原始值保存到地图或类似于此的数据库中。在检查面板时,必须将文本字段的内容与原始值进行比较。

编辑

要收集每个文本字段的更改信息,可以使用这样的类。在框架中创建它的一个实例,并将其传递给所有面板。

代码语言:javascript
运行
复制
import java.util.*;
import javax.swing.text.*;

public class ChangeManager {

    private final Collection<DocumentChangeListener> listeners;

    public ChangeManager() {
        listeners = new HashSet<>();
    }

    public boolean hasChanged() {
        for(DocumentChangeListener listener : listeners) {
            if(listener.hasChanged()) {
                return true;
            }
        }
        return false;
    }

    public void register(JTextComponent textComponent, String originalValue) {
        DocumentChangeListener listener = new DocumentChangeListener(
                originalValue);
        textComponent.getDocument().addDocumentListener(listener);
        listeners.add(listener);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26779189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档