• Post Reply Bookmark Topic Watch Topic
  • New Topic

Returning a value from a pop-up window  RSS feed

 
Luigi Plinge
Ranch Hand
Posts: 441
IntelliJ IDE Scala Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sorry if this is obvious, but I haven't done this before.

I've made a JFrame subclass that, upon the user clicking the Input button on the main GUI, will pop up and allow the user to enter some data, after which the user clicks OK or Cancel to return that data to the main GUI.



Sounds easy enough, but how to implement it? The button on my main Frame can call a method to create the pop-up instance of a JFrame subclass that I've called InputFrame, but how to get the data back, when the user clicks the "Done" button?

I could pass a reference (this) to the InputFrame which could be stored as a private variable and used to invoke a method on the GUI when the user hits Done. But this isn't exactly the same as just returning the data I need to the method that called it. And doesn't seem like good encapsulation, since I need to hard code into the InputFrame the name of the method in the GUI I want to use to handle the value returned. Whereas perhaps I want to access this data from several different places for different purposes (OK, I don't, but you see what I mean). There must be a standard way to do this - any pointers? Thanks.
 
Darryl Burke
Bartender
Posts: 5167
11
Java Netbeans IDE Opera
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
First off, it's usually better to show data entry forms in a modal dialog, not a second frame. FWIW, here's a generalization of how I might tackle this (typed here, not compiled nor tested)Hm, I'm not happy with the return null but it doesn't directly detract from a demonstration of an approach to the issue.

Also, subclassing a JFrame or any other class where there isn't a need to change the default behavior is a misuse of inheritance. Favor composition.
 
Luigi Plinge
Ranch Hand
Posts: 441
IntelliJ IDE Scala Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Great, thanks. A JOptionPane / JDialog looks like just what I need (I haven't used them before). Your example makes it clearer, the message being to create the component from which you want to get the data within your method for retrieving data.

The main thing I didn't understand was modality - basically how to get the application to wait for the user input. Not understanding that, the source for JOptionPane.showOptionDialog(...) (below) looks a bit strange with


in the middle! The show() method seems to deal with the business of locking up threads and using the Object.wait() method beind the scenes.

It seems I would be barking up the wrong tree with JFrame since there doesn't seem to be a way to make them modal.

I'll have a go at implementing JDialog and report back if I have problems. (Incidentally I did get it working with a JFrame but in the way I described in the OP, so it's a bit of a kludge.)

 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!