4

I had build big application for my client in Android. The new project is to build the same app for PC in Java. So i have started developing with use of swing. When building in Android i use classes with activities that had content views and i could switch between activities. In java i have build multiple classes that extends JFrame and i wish to switch between them. What is the right way to to this?

is this:

new_class.setVisible(true);
old_class.setVisible(false);

the correct way?

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
DanM
  • 1,530
  • 4
  • 23
  • 44

2 Answers2

9

The general approach using Swing would be to either combine all the GUI elements 'screens' in one top level container using the appropriate strategy (generally a CardLayout, but the devil is in the details). This GUI shows some other options (JSplitPane & nested layouts):

See also this answer for many other alternatives.


For any other functionality which would logically be in a different container, use a (possibly) modal dialog or a JOptionPane. E.G. a log-in, popped from the main frame:


Another thing to take into account is that Swing (with a desktop monitor) allows us to offer a richer set of components to the user. For instance, surfing around the Android SD card file system would generally be achieved by using one list per directory, and either changing the content of the list or view on entering a new directory. In Swing you might use a single JTree for that. So there is much less need for 'different screens' in a desktop GUI toolkit, over one designed to be used on a tablet or phone.

Here is a tree as used in a file browser.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • 1
    `CardLayout, but the devil is in the details` ???, I can't see any significant in compare with add / remove JPanels on the fly +1 – mKorbel May 28 '12 at 08:52
  • 1
    @mKorbel Sorry, was never thinking of 'add/remove', but just all the other possibilities (of which there are about a dozen). The use-case really does (scream) ***`CardLayout`*** though, I'll give you that. – Andrew Thompson May 28 '12 at 08:55
0

The right way is to create instances from these JFrames and set it's visibility.

 new Fram1().setVisible(true);

 new Fram2().setVisible(true);
Sleiman Jneidi
  • 22,907
  • 14
  • 56
  • 77