我正在开发一个应用程序,我希望通过用户更新JTextArea的内容或者通过按JButton来手动触发一些东西。
我已经使用DocumentListener完成了第一部分,并将相关代码放入其insertUpdate方法中。
我以前没有使用过Action,但是我听说它们对于需要由多个控件触发的情况很有用。是否有可能触发来自DocumentListener的操作?使用操作是个好主意,还是应该将代码放在一个正常的方法中?
(在构造函数中):
textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
// do something
}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {}
});行动,这是一个领域:
Action doSomething = new AbstractAction("Do Something!") {
@Override
public void actionPerformed(ActionEvent e) {
// do it
}
};clarification:
JTextArea将接收用户粘贴的文本,我想要自动解析这些文本。解析依赖于GUI中其他设置的其他值;如果用户更改了这些其他值,他可能希望重新解析文本,因此需要通过按一个按钮来执行相同的操作。
发布于 2011-09-07 01:13:57
您可以调用actionPerformed()方法,不管它是否在Action中。有一个例子,这里。
发布于 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“方法。这样,您就不需要一个单独的按钮,并且组件将始终保持同步,因为解析是自动的。
发布于 2011-09-07 03:17:21
我认为您不需要创建Action对象。您可以向按钮添加ActionListener,就像将DocumentListener添加到输入的文档一样。如果我正确理解你的问题,也许你应该这样做:
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()是一种方法,在这种方法中,您将做您想做的事情。
https://stackoverflow.com/questions/7327846
复制相似问题