首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与DocumentListener一起使用操作

与DocumentListener一起使用操作
EN

Stack Overflow用户
提问于 2011-09-07 01:02:41
回答 3查看 1.6K关注 0票数 7

我正在开发一个应用程序,我希望通过用户更新JTextArea的内容或者通过按JButton来手动触发一些东西。

我已经使用DocumentListener完成了第一部分,并将相关代码放入其insertUpdate方法中。

我以前没有使用过Action,但是我听说它们对于需要由多个控件触发的情况很有用。是否有可能触发来自DocumentListener的操作?使用操作是个好主意,还是应该将代码放在一个正常的方法中?

(在构造函数中):

代码语言:javascript
复制
    textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {
            // do something
        }
        public void removeUpdate(DocumentEvent e) {}
        public void changedUpdate(DocumentEvent e) {}
    });

行动,这是一个领域:

代码语言:javascript
复制
Action doSomething = new AbstractAction("Do Something!") {
    @Override
    public void actionPerformed(ActionEvent e) {
        // do it
    }
};

clarification:

JTextArea将接收用户粘贴的文本,我想要自动解析这些文本。解析依赖于GUI中其他设置的其他值;如果用户更改了这些其他值,他可能希望重新解析文本,因此需要通过按一个按钮来执行相同的操作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-07 01:13:57

您可以调用actionPerformed()方法,不管它是否在Action中。有一个例子,这里

票数 3
EN

Stack Overflow用户

发布于 2011-09-07 01:22:33

我希望通过用户更新JTextArea的内容,或者通过按JButton来手动触发一些东西。

这对我来说毫无意义。

为什么单击按钮会调用与用户在文本区域中键入文本相同的操作?

我以前没有使用过操作,但我听说它们对于需要由多个控件触发的情况很有用

该语句用于用户单击的控件,如JMenuItems、JButtons或在文本字段上单击Enter。通常,当您使用ActionListner时,可以使用它们。

DocumentListener不是ActionListener,所以正如我前面所说的,使用Action似乎不合适。

我认为你需要澄清你的要求。

编辑,基于澄清

如果用户更改了这些其他值,他可能需要重新解析文本。

为什么用户有选择?如果您更改文本区域的字体、文本、前景、背景,以及它自动重新绘制的组件,则不必要求这样做。如果您查看这些方法的代码,它们最终总是调用revalidate()和repaint()方法。

解析依赖于GUI中其他设置的其他值;

听起来你需要一个定制的课程。可能是ParsedTextArea或ParsedDocument。这个类将包含可以在GUI其他地方设置的“属性”。这将使DocumentListener陷入困境。它还将支持您的"parseTheText“方法。因此,每当更改属性或生成DocumentEvent时,都会自动调用"parseTheText“方法。这样,您就不需要一个单独的按钮,并且组件将始终保持同步,因为解析是自动的。

票数 4
EN

Stack Overflow用户

发布于 2011-09-07 03:17:21

我认为您不需要创建Action对象。您可以向按钮添加ActionListener,就像将DocumentListener添加到输入的文档一样。如果我正确理解你的问题,也许你应该这样做:

代码语言:javascript
复制
textInput.getDocument().addDocumentListener(new DocumentListener(){             
    @Override
    public void insertUpdate(DocumentEvent e) {
        doIt();
    }               
    @Override
    public void removeUpdate(DocumentEvent e) {}                
    @Override
    public void changedUpdate(DocumentEvent e) {}
});

button.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        doIt();
    }
});

doIt()是一种方法,在这种方法中,您将做您想做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7327846

复制
相关文章

相似问题

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