Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38266

Re: how do you block the GUI repaints?

Newsgroups comp.lang.java.programmer
Date 2018-05-22 13:20 -0700
References <2ddef1c1-ac37-4384-a3a5-f9b94a1fcbf6@googlegroups.com> <pe1obt$8p6$1@dont-email.me>
Message-ID <6762ff5e-8846-4ea7-be57-7518f2d7ff42@googlegroups.com> (permalink)
Subject Re: how do you block the GUI repaints?
From Eric Douglas <e.d.programmer@gmail.com>

Show all headers | View raw


On Tuesday, May 22, 2018 at 2:43:21 PM UTC-4, Eric Sosman wrote:
> On 5/22/2018 1:59 PM, Eric Douglas wrote:
> > I made a custom JTable, but it has a separate model.  I wanted to be able to update a lot of cell values and just have it repaint the whole table when I'm done, so I just made a custom model, overrode the fire method to not tell it to repaint while I'm loading it, and call one fireTableChanged when I'm done.
> > 
> > Now what's the easiest way to do this with other controls?  I made a custom JTextArea, I try to insert a lot of text one chunk at a time, and it locks up the EDT issuing repaint requests.
> 
>      You're on the right track: Do it in the model.  For example,
> the TableModel you implemented replaces
> 
> 	update cell
> 	fire event
> 	update cell
> 	fire event
> 	update cell
> 	fire event
> 	...
> 
> with
> 
> 	update cell
> 	update cell
> 	update cell
> 	...
> 	fire mega-event
> 
> and you could, perhaps, go on to
> 
> 	bulk-update many cells
> 	fire mega-event
> 
>      Do similarly with the other controls that bother you.
> 
>      Also (and depending on the nature of your updates), you may
> gain by firing "specific" events instead of "catch-all" events.
> For example, a JTable might be more responsive if its model fired
> events reporting updates to three individual cells than if it
> fired "the whole table changed" events.  (This goes somewhat
> against the "fire mega-event" suggestion above, but that just
> means that engineering is the art of striking balances.)
> 

My JTable is working great.  I just ran a query and it took me about 10 seconds to return 59990 rows and put it all in the table.  That's 25 columns, individually doing a setValue for 1499750 cells.  This takes a lot longer if it's trying to repaint the table after every set.  If you're doing a full load you can just fireTableChanged one time at the end.  If you already have thousands of rows and you're updating a few dozen, a fireTableRowsUpdated may be more efficient, though there wasn't really a noticeable delay with my "fire mega event".

JTextArea is my next big control.  Normally we just do one insert, as we just use it to display about a dozen lines of text at a time.  Now I'm trying to make a file viewer.  I tried loading a text file into any number of text file editors but they just crash because it's too big (email dump).  I wanted to see if I can load the whole thing at once into a JTextArea.  If not I want to get as much as possible, then I can remove text if necessary to add more, with first/previous/next/last buttons to scroll through the file.  I have no problem reading multiple chunks from any point in the file, but I can't call the JTextArea insert multiple times in a row without locking up the EDT because it wants to repaint every time.

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-22 10:59 -0700
  Re: how do you block the GUI repaints? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2018-05-22 13:22 -0500
    Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-22 13:00 -0700
      Re: how do you block the GUI repaints? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-05-22 16:29 -0400
        Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-22 13:51 -0700
          Re: how do you block the GUI repaints? Martin Gregorie <martin@mydomain.invalid> - 2018-05-22 21:41 +0000
          Re: how do you block the GUI repaints? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-05-22 18:03 -0400
            Re: how do you block the GUI repaints? Andreas Leitgeb <avl@logic.at> - 2018-05-22 22:22 +0000
              Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 07:55 -0700
                Re: how do you block the GUI repaints? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-05-23 11:06 -0400
                Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 08:19 -0700
  Re: how do you block the GUI repaints? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-05-22 14:43 -0400
    Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-22 13:20 -0700
      Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-22 22:47 +0200
        Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-22 13:58 -0700
          Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-23 04:30 +0200
            Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 05:54 -0700
              Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-23 15:58 +0200
                Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 07:26 -0700
                Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-23 16:30 +0200
                Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 07:48 -0700
                Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-23 18:46 +0200
                Re: how do you block the GUI repaints? Eric Douglas <e.d.programmer@gmail.com> - 2018-05-23 10:51 -0700
                Re: how do you block the GUI repaints? Daniele Futtorovic <da.futt.news@laposte.net> - 2018-05-23 22:35 +0200

csiph-web