Solved

Multiple JFrame Overlap Problem

Posted on 2009-05-14
13
402 Views
Last Modified: 2013-12-22
Hi there,

I have a problem with 2 JFrames that I display - if I place their windows to overlap each other, and then select the one from behind the other, I then get the contents of the alternate frame showing in the the selected JFrame.

If I then move the misbehaving JFrame around a few times and play around with it, it comes back to normal again.

Any ideas why this would happen?
0
Comment
Question by:TheOwner
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
  • 2
13 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 24388343
Sounds like its painting is being inhibited. Are you doing any processing in event handlers?
0
 
LVL 92

Expert Comment

by:objects
ID: 24390643
you have a problem with your gui painting, you either have an exception occurring or you are blocking the painting.

0
 

Author Comment

by:TheOwner
ID: 24391212
Hi there objects,

I do not think I am throwing an exception. I tried searching for blocking painter, etc but I can't find any information on that.

Could you please explain what might block a painting?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:TheOwner
ID: 24391217
@CEHJ

My event EventHandlers do very basic things - nothing too intensive at all. They are not being fired off from what I can see though.
0
 
LVL 92

Expert Comment

by:objects
ID: 24391285
can you post an example that demonstrates the problem.
do you do any custom painting?

0
 

Author Comment

by:TheOwner
ID: 24391315
Hi objects,

That is correct - I am using Substance LookAndFeel (I am sure you know it). I don't have any custom painting that I have written myself.

If I turn if off, I still get the problem though. I tried just making test JFrame with a button and another with nothing and I still get the same problem. I just made a new JFrame and added the button, followed by the other JFrame with an empty JPanel.

My theory is this has something to do with my threading, do you think this may be the case?
0
 
LVL 92

Expert Comment

by:objects
ID: 24391343
if you have additional threads you need to ensure you do not update your gui from those threads. All gui updates need to be done from the event dispatch thread.


0
 

Author Comment

by:TheOwner
ID: 24391361
Hi Objects,

I think we're on to something here - that may be the problem. You see, the problem though is my application generates new JComponents on the fly and I don't see a means to have that inside the EDT.

For example, the application listens on the network for particular responses and then generates GUI JComponents - it can only know what and how many to make once the response has been received.

A little off - topic but just checking if you got my mail I sent through your site?
0
 
LVL 92

Accepted Solution

by:
objects earned 250 total points
ID: 24391387
EventQueue has 2 methods you can use invokeLater() and invokeAndWait()

http://helpdesk.objects.com.au/java/how-do-i-update-my-gui-from-any-thread

> A little off - topic but just checking if you got my mail I sent through your site?

A am just in the process of reading my inbox

0
 

Author Comment

by:TheOwner
ID: 24391443
Hi objects,

Well basically I have tried those methods but I still can't understand how to do a dynamic GUI using that methodology. For instance, mine works as follows:

(Pseudocode as it will make it easier to understand)

Network Thread {

while(true) {

read();

if (isGuiInformation) {
JLabel label = new JLabel(<dataFromRead()>)
}

}

}

I can maybe see if I can just use a normal thread instead of a ED Thread.
0
 
LVL 92

Assisted Solution

by:objects
objects earned 250 total points
ID: 24391459

while(true) {

read();

EventQueue.invokeAndWait(new Runnable() {
   public void run() {
        // update gui here
   }
});


0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24392894
See the well-documented SwingWorker class for multiple threading with correct handling of the gui
0

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

695 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question