[Patch] javax.swing.text.JTextComponent

Michael Koch konqueror@gmx.de
Tue Apr 19 10:56:00 GMT 2005


Hi list,


I just commited the attached patch from GNU classpath to HEAD to fox
some repaint problems with Swing text widgets.


Michael


2005-04-19  Roman Kennke  <roman@kennke.org>

	* javax/swing/text/JTextComponent.java
	(JTextComponent): Added repaintListener which issues repaint
	requests when the underlying document changes.
	(setDocument): Adds repaintListener to document when the
	document is changed.
	* javax/swing/text/DefaultEditorKit.java:
	Removed repaint calls on JTextComponent. This is now handled
	through a DocumentListener in JTextComponent that repaints
	the component when needed.

-------------- next part --------------
Index: javax/swing/text/JTextComponent.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/JTextComponent.java,v
retrieving revision 1.13
diff -u -r1.13 JTextComponent.java
--- javax/swing/text/JTextComponent.java	31 Mar 2005 15:29:47 -0000	1.13
+++ javax/swing/text/JTextComponent.java	19 Apr 2005 10:54:37 -0000
@@ -894,11 +894,30 @@
   private Insets margin;
   private boolean dragEnabled;
 
+  /** Issues repaint request on document changes. */
+  private DocumentListener repaintListener;
+
   /**
    * Creates a new <code>JTextComponent</code> instance.
    */
   public JTextComponent()
   {
+    repaintListener = new DocumentListener()
+      {
+	public void changedUpdate(DocumentEvent ev)
+	{
+	  repaint();
+	}
+	public void insertUpdate(DocumentEvent ev)
+	{
+	  repaint();
+	}
+	public void removeUpdate(DocumentEvent ev)
+	{
+	  repaint();
+	}
+      };
+
     Keymap defkeymap = getKeymap(DEFAULT_KEYMAP);
     boolean creatingKeymap = false;
     if (defkeymap == null)
@@ -932,6 +951,13 @@
   {
     Document oldDoc = doc;
     doc = newDoc;
+
+    // setup document listener
+    if (oldDoc != null)
+      oldDoc.removeDocumentListener(repaintListener);
+    if (newDoc != null)
+      newDoc.addDocumentListener(repaintListener);
+
     firePropertyChange("document", oldDoc, newDoc);
     revalidate();
     repaint();
Index: javax/swing/text/DefaultEditorKit.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/DefaultEditorKit.java,v
retrieving revision 1.8
diff -u -r1.8 DefaultEditorKit.java
--- javax/swing/text/DefaultEditorKit.java	16 Feb 2005 20:03:09 -0000	1.8
+++ javax/swing/text/DefaultEditorKit.java	19 Apr 2005 10:54:37 -0000
@@ -110,7 +110,6 @@
               t.getDocument().insertString(t.getCaret().getDot(), event.getActionCommand(), null);
               t.getCaret().setDot(Math.min(t.getCaret().getDot() + 1,
                                            t.getDocument().getEndPosition().getOffset()));
-              t.repaint();
             }
           catch (BadLocationException be)
             {
@@ -251,7 +250,6 @@
                 if (pos < t.getDocument().getEndPosition().getOffset())
                   {
                     t.getDocument().remove(t.getCaret().getDot(), 1);
-                    t.repaint();
                   }
               }
             catch (BadLocationException e)
@@ -275,7 +273,6 @@
                   {
                     t.getDocument().remove(pos - 1, 1);
                     t.getCaret().setDot(pos - 1);
-                    t.repaint();
                   }
               }
             catch (BadLocationException e)


More information about the Java-patches mailing list