classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] FYI: JTextComponent repaint fix


From: Roman Kennke
Subject: [cp-patches] FYI: JTextComponent repaint fix
Date: Fri, 08 Apr 2005 10:07:38 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204

Hi,

I committed the attached patch that fixes JTextComponent repaint. The problem I encountered was that JTextComponent were only repainted on direct user input. I changed this behaviour so that the JTextComponent is repainted on every change of the underlying Document. This is accomplished by using a DocumentListener that triggers repaint() requests.

Of course I removed the repaint requests that were triggered on user input in DefaultEditorKit.

2005-04-08  Roman Kennke  <address@hidden>

       * 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.

/Roman

? java/util/LocaleData.java
? lib/classes.locale
? scripts/classpath.spec
Index: javax/swing/text/DefaultEditorKit.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/DefaultEditorKit.java,v
retrieving revision 1.13
diff -u -r1.13 DefaultEditorKit.java
--- javax/swing/text/DefaultEditorKit.java      21 Jan 2005 09:20:55 -0000      
1.13
+++ javax/swing/text/DefaultEditorKit.java      8 Apr 2005 07:53: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)
Index: javax/swing/text/JTextComponent.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/JTextComponent.java,v
retrieving revision 1.25
diff -u -r1.25 JTextComponent.java
--- javax/swing/text/JTextComponent.java        31 Mar 2005 22:17:17 -0000      
1.25
+++ javax/swing/text/JTextComponent.java        8 Apr 2005 07:53: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();

reply via email to

[Prev in Thread] Current Thread [Next in Thread]