Re: Problem with DocumentEvent.GetChange
In article
<6332e879-ea0d-42bf-aeab-86e07e3d2020@x16g2000prn.googlegroups.com>,
mick.heywood@gmail.com wrote:
On Dec 5 2008, 5:18?pm, Andrew Thompson <andrewtho...@gmail.com>
wrote:
On Dec 5, 4:57?pm, mick.heyw...@gmail.com wrote:
[...]
* <http://pscode.org/sscce.html>
[...]
Fair call, example follows. I'm sure it could be shorter, but this
compiles and should show what the problem is.
Try this. I modified your example for compatibility and style: 1.5,
case, layout, StringBuilder, etc. I re-factored your getAllXXX methods,
which were coming up empty.
OT: For some reason the document element "bidi" (bi-directional text)
always reminds me of the homonymous Hindi word:
<http://en.wikipedia.org/wiki/Beedi>
<sscce>
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class MainJFrame extends JFrame {
private JTextPane editPane = new javax.swing.JTextPane();
private JScrollPane editScroll = new javax.swing.JScrollPane();
private JTextArea logArea = new javax.swing.JTextArea();
private JScrollPane logScroll = new javax.swing.JScrollPane();
public MainJFrame() {
initComponents();
addListener();
}
private void initComponents() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
editPane.setPreferredSize(new Dimension(0, 60));
editScroll.setViewportView(editPane);
logArea.setColumns(32);
logArea.setRows(24);
logScroll.setViewportView(logArea);
this.add(editScroll, BorderLayout.NORTH);
this.add(logScroll, BorderLayout.CENTER);
pack();
}
private void addListener() {
Document doc = editPane.getDocument();
doc.addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
logChange(e);
}
public void insertUpdate(DocumentEvent e) {
logChange(e);
}
public void removeUpdate(DocumentEvent e) {
logChange(e);
}
private void logChange(DocumentEvent e) {
StringBuilder s = new StringBuilder();
s.append(e.getType());
s.append(": ");
Document doc = e.getDocument();
try {
int offset = e.getOffset();
int length = e.getLength();
s.append(doc.getText(offset, length));
s.append(" at [");
s.append(offset);
s.append(",");
s.append(length);
s.append("]\n");
List<Element> eList = getAllElements(doc);
for (Element elem : eList) {
s.append("Found: ");
s.append(elem.getName());
s.append("\n");
}
} catch (Exception ex) {
logArea.append(ex.getMessage());
}
logArea.append(s.toString());
}
});
}
private List<Element> getAllElements(Document doc) {
List<Element> list = new ArrayList<Element>();
Element[] roots = doc.getRootElements();
for (Element root : roots) {
list.add(root);
getAllChildren(root, list);
}
return list;
}
private void getAllChildren(Element root, List<Element> list) {
for (int i = 0; i < root.getElementCount(); i++) {
list.add(root.getElement(i));
getAllChildren(root.getElement(i), list);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainJFrame().setVisible(true);
}
});
}
}
</sscce>
--
John B. Matthews
trashgod at gmail dot com
http://home.roadrunner.com/~jbmatthews/