Я пытаюсь реализовать прослушиватель документов в своей программе. Пока каждый пользователь вводит новое слово, я получаю весь текст и сохраняю его. То, что я хочу сделать, это получить только новое слово/слова, набранные и обработанные ими. Можете ли вы дать мне советы, как я могу это сделать?Обработка текста в 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 - это конструктор, который создает элементы управления и внешний вид пользовательского интерфейса.
- Я создал класс, который реализует DocumentListener. Таким образом, я могу переопределить абстрактные события.
- Моя основная функция находится на дне внутри класса DocumentEventDemo, как и на самом деле.
- Я не вижу код для класса MyEditor. Поэтому я заменил это на JTextArea, ведет себя как редактор.
- Ваш код GetWord работает хорошо. Поздравления!
- Ваша технология использования System.out.println не работает, поскольку приложение представляет собой приложение с графическим интерфейсом Windows, а не консоль, что хорошо работает с System.out.
- Очевидно, что у вас все еще есть работа с функциями прослушивателя для изменения и удаления.
Удачи!
Tommy Kwee
@ curious, я хотел бы дать предложение. Я заметил, что вы расстроены тем, что другие могут сердиться на вас, особенно когда вы видите бал в -4 для вопроса. Одна из причин заключается в том, что вопрос слишком широк или неопределен. Он не указывает вашу проблему. Вопрос кажется студентом с домашним заданием или профессионалом с заданием, но не хочет прикладывать усилий для изучения. Нам нравится, когда люди стараются учиться. Если я вижу код у собеседника, тогда я могу лучше понять проблему и вопрос. И я буду больше сочувствовать этому человеку. Продолжайте ... –
@ curious, Продолжение ... В исходной проблеме возникли две проблемы. Во-первых, получение текстов из объекта Document и во-вторых, создание пользовательского интерфейса с прослушивателями. Это не было очевидно из первоначального вопроса. Но по крайней мере сейчас, мы добираемся до этого этапа после пары циклов между нами. Кстати, я тоже изучаю библиотеку Swing UI. Хороший документ Sun Oracle, я думаю, это http://docs.oracle.com/javase/1.4.2/docs/api/overview-tree.html. –
Большое спасибо за объяснения. Я действительно ценю это. Я попробую загрузить код с этого момента, когда я попрошу о помощи. Я ничего не загружал здесь раньше, потому что я не просил исправления, а не альтернативы, но, возможно, когда вы увидели мой код, у вас появилось лучшее представление о том, что мне нужно :) Я рад слышать, что другие изучают интерфейс Swing как и я :) Я буду проверять другие темы и попытаться помочь другим людям :) – curious
Как насчет документа на http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html? В принципе, параметр DocumentEvent из события insertUpdate содержит текст. Вам нужно будет извлечь тексты из объекта e.
Мое предложение - попробовать какой-то код, и мы увидим, насколько вы знаете о DocumentListener, хорошо?
@ curious, я рассмотрел ваш код ниже и это не та же структура кода, что и http://docs.oracle.com/javase/tutorial/uiswing/examples/events/DocumentEventDemoProject/src/events/DocumentEventDemo.java. Это будет работать для обработки событий. Кроме того, я предлагаю код, похожий на ваш. Pls быть терпеливым. –
спасибо :) Я на самом деле пытался следовать коду в ссылке выше, но ...Во всяком случае, код сейчас работает, сейчас я в процессе его улучшения. – curious
@ Оригинальный Android, я наконец понял, что вы имели в виду под «это не такая же структура» !!!!!! Этот комментарий помог мне разобраться с проблемой, которая появляется с моим кодом !!!! Спасибо, что заметили это !!! – curious
- 1. Цвет текста в JTextArea
- 2. Изменение текста в JTextArea
- 3. Добавление текста в Java JTextArea
- 4. Форматирование текста Цвет в JTextArea
- 5. Обнаружение выбора текста в JTextArea
- 6. Попытка эха текста из JTextArea
- 7. Ввод текста в текст в JTextArea
- 8. Выравнивание текста в JtextArea в java
- 9. Java - настройка цвета качания текста в JTextArea
- 10. Как изменить положение текста в JTextArea
- 11. Как центрировать выравнивание текста в JTextArea?
- 12. Hightlight и изменение Цвет текста в JTextArea
- 13. Как добавить поле текста в JTextArea?
- 14. Укладка текста в JTextArea или JTextPane
- 15. Выравнивание текста в JTextArea и JTextPane
- 16. позволяет умнее перенос текста в JTextArea
- 17. Выбор/выделение текста в JTextArea, принадлежащем JOptionPane
- 18. Как отключить выбор текста в JTextArea Swing
- 19. Как изменить цвет текста в JtextArea?
- 20. Как установить цвет частичного текста в JTextArea?
- 21. Обработка текста в прологе
- 22. Обработка текста в playbook
- 23. Обработка текста в php
- 24. Обработка текста в Ruby
- 25. Обработка текста в ant
- 26. Центрирование текста в JTextArea или JTextPane - Горизонтальное выравнивание текста
- 27. Ограничение размера JTextArea до размера его текста
- 28. ActionListener для конкретного текста внутри JTextArea?
- 29. JTextArea Не прокручиватьRectToVisible после повторного набора текста
- 30. JLabel обертывание обычного текста как JTextArea
Я думаю, что DocumentListener предоставляет довольно чистый API (вставка/удаление). Какую часть вы не получите? что ты уже испробовал? –
Я понимаю, как работает DocumentListener. То, что я не получаю, - это то, как поймать целое слово, набранное. На данный момент я улавливаю каждое отдельное письмо, которое пользователь вводит. Вот почему для обработки каждого слова текста мне нужно получить весь текст документа каждый раз, когда есть изменения. – curious
Что именно вы пытаетесь сделать? Что вы будете делать с этими словами после их захвата? Вы пытались использовать сканер в извлеченном тексте? Или делать простые тесты, которые ищут пробелы? –