我想在我的程序中實現一個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
你到底在做什麼?一旦你捕捉到這些詞,你會怎麼做?您是否嘗試過使用掃描儀檢索文本?或者做簡單的測試尋找空白? –