我想在我的程序中实现一个Document Listener。到目前为止,每当用户输入一个新单词时,我都会获取整个文本并将其保存。我想要做的只是输入新的单词/单词并处理它们。你能给我一些建议吗?在jTextArea中处理文本
回答
下面提出类似的代码到你上面:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
//public class DocumentListener { // Fix: not a good name for the class since it is part of JVM
public class DocumentEventDemo extends JFrame { // easier than extends JPanel
JPanel txtPanel, centerPanel;
GridLayout grid;
JTextField txtField;
JTextArea txtArea;
JFrame frame;
JComponent newContentPane;
FlowLayout flow;
public DocumentEventDemo() {
txtArea = new JTextArea();
txtArea.getDocument().addDocumentListener(new MyDocumentListener());
txtArea.getDocument().putProperty("txtArea", "MyDocumentListener");
// txtField = new JTextField(10); // 10 chars max
// txtField.setText("12345");
centerPanel = new JPanel();
grid = new GridLayout(2,1,1,1);
txtPanel = new JPanel();
flow = new FlowLayout(FlowLayout.CENTER);
txtPanel.setLayout(flow);
//Adding control GUI fields to the only panel
// txtPanel.add(txtArea);
// txtPanel.add(txtField);
// Forming the center view with GUI controls
centerPanel.setLayout(grid);
// centerPanel.add(txtPanel);
centerPanel.add(txtArea);
// Add Panels to the Frame
getContentPane().add(centerPanel,"Center");
this.setSize(500,200);
this.validate();
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// newContentPane = getRootPane();
// newContentPane.setOpaque(true);
// frame.setContentPane(newContentPane);
}
//MyEditor editor = new MyEditor(); // what is MyEditor?
//javax.swing.event.DocumentListener mydocumentListener = new javax.swing.event.DocumentListener()
// Make a class to define the inherited abstract methods, which are also events.
class MyDocumentListener implements DocumentListener {
String[] word=new String[50];
String text;
int i=0;
int y;
int l;
int len;
public void changedUpdate(DocumentEvent documentEvent) {
System.out.println("The text has been changed.");
}
public void insertUpdate(DocumentEvent documentEvent) {
try {
GetWord(documentEvent);
} catch (BadLocationException ex) {
Logger.getLogger(DocumentListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void removeUpdate(DocumentEvent documentEvent) {
System.out.println("A character has been removed!");
}
private void GetWord(DocumentEvent documentEvent) throws BadLocationException {
//get the type of event
DocumentEvent.EventType type = documentEvent.getType();
//check what is the event, hence what is the user doing
if (type.equals(DocumentEvent.EventType.INSERT)) {
Document source = documentEvent.getDocument();
y=documentEvent.getOffset();
l=documentEvent.getLength();
len=source.getLength();
text = source.getText(y,l);
if(text.equals(" "))
{
for (int z=0;z<len;z++)
{
System.out.print(word[z]);
}
System.out.println("\n");
Arrays.fill(word,null);
i=0;
}
word[i]=text;
i++;
} else {
System.out.println("A character has been removed!");
}
}
}; // DocumentListener class instantiation
// editor. editArea.getDocument().addDocumentListener(mydocumentListener);
public static void main(String args[]){
new DocumentEventDemo();
}
} // TOP class
注:
- 我最外类扩展JFrame中,创建窗口&听众最简单的方式,我觉得。
- DocumentEventDemo是一个构造函数,用于创建UI控件和外观。
- 我创建了一个实现DocumentListener的类。这样我可以重写抽象事件。
- 我的主要功能是在类DocumentEventDemo的底部,就像你的实际一样。
- 我没有看到类MyEditor的代码。因此,我用JTextArea替换了它,表现得像一个编辑器。
- 您的代码GetWord似乎运作良好。恭喜!
- 您使用System.out.println的技术不起作用,因为该应用程序是Windows GUI应用程序而不是控制台,与System.out很好地协作。
- 显然,您仍然可以使用Listener函数来进行更改和删除。
玩得开心!
Tommy Kwee
@不好意思,我想提一个建议。我注意到你似乎很沮丧别人可能会对你生气,尤其是当你看到这个问题的分数为-4。原因之一是这个问题太广泛或模糊。它没有指定你的问题。这个问题看起来像一个有家庭作业的学生,或者是一个有任务的专业人员,但不想花费精力去学习。我们希望看到人们努力学习。 如果我看到提问者的代码,那么我可以更好地理解问题和问题。当然,我会更加同情这个人。继续... –
@真诚,续...在原始问题中,我认为有两个问题。首先,从Document对象获取文本,其次,与侦听器一起创建UI。原来的问题并不明显。但至少现在,在我们之间的情侣圈之后,我们达到了这个阶段。 btw,我也在学习Swing UI库。我认为一个很好的Sun Oracle文档是http://docs.oracle.com/javase/1.4.2/docs/api/overview-tree.html。 –
非常感谢解释。我很欣赏这一点。当我寻求帮助时,我会尝试从现在开始上传代码。我之前并没有在这里上传任何东西,因为我并没有要求修复,而是寻求替代方案,但也许当你看到我的代码时,你对我需要的东西有了更好的了解:)我很高兴听到其他人正在学习Swing UI就像我:)我会检查其他线程,并尝试帮助其他人以及:) – curious
如何在http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html文件? 基本上,insertUpdate事件的参数DocumentEvent包含文本。您将不得不从对象e中检索文本。
我的建议是尝试一些代码,我们会看看您对DocumentListener了解多少,好吗?
@curious,我在下面检查了你的代码,它与http://docs.oracle.com/javase/tutorial/uiswing/examples/events/DocumentEventDemoProject/src/events/DocumentEventDemo.java的代码结构不一样。这将适用于事件处理。除此之外,我会提出类似于你的代码。请耐心等待。 –
谢谢:)我实际上试图按照上面链接中的代码,但是...无论如何,现在我正在改进它的代码是有用的。 – curious
@原创Android,我终于明白你的意思了“它不是一样的结构”!!!!!!此评论帮助我理清了与我的代码一起出现的问题!感谢您注意! – curious
- 1. 在JTextArea中插入文本
- 2. MouseListener - 无法处理JTextArea
- 3. 文本去JTextArea
- 4. 在php中处理文本
- 5. 文本在处理
- 6. 在JTextArea中检测文本选择
- 7. 显示在JTextArea中的文本
- 8. 在JTextArea中格式化文本颜色
- 9. 在JTextArea /字段中未设置文本
- 10. 在JTextArea中选择文本片段
- 11. 在Java的JTextArea中附加文本
- 12. 在csv文档中处理文本
- 13. 在R中处理大文本文件
- 14. 在C中处理大文本文件#
- 15. 在C中处理大文本文件#
- 16. 在Python中处理大文本文件
- 17. 文本处理
- 18. 在JTextArea或JTextPane中居中文本 - 水平文本对齐
- 19. JTextArea - 如何在指定的偏移处设置文本?
- 20. Ruby中的文本处理
- 21. Java中的文本处理
- 22. 在文本文件中读取第n行并在MS批处理中处理
- 23. 从java中的JTextArea中读取文本
- 24. 在批处理文件中运行批处理脚本
- 25. 在net beans中处理文本字段
- 26. 在Python中处理文本菜单
- 27. 在TextView中处理溢出文本
- 28. 在python中的文本处理
- 29. 在C中处理大文本#
- 30. 在Nodejs和PHP中处理文本
我认为DocumentListener提供了非常清晰的API(插入/删除)。你不知道哪一部分?你试过什么了? –
我了解DocumentListener的工作原理。我没有得到的是如何捕捉输入的整个单词。目前,我正在捕捉每个单独的字母,以便用户输入。这就是为什么要处理文本中的每个单词,我需要每次发生变化时都可以获取文档的全部文本。 – curious
你到底在做什么?一旦你捕捉到这些词,你会怎么做?您是否尝试过使用扫描仪检索文本?或者做简单的测试寻找空白? –