Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to put JFrame into existing JPanel in Java Swing?

I have an open-source java swing application like this: enter image description herehttp://i47.tinypic.com/dff4f7.jpg

You can see in the screenshot, there is a JPanel divided into two area, left and right area. The left area has many text links. When I click the SLA Criteria link, it will pop-up the SLA Criteria window. The pop-up window is JFrame object.

Now, I'm trying to put the pop-up window into right area of the JPanel, so that means no pop-up window anymore, i.e. when I click the SLA Criteria link, its contents will be displayed at the right area of the JPanel. The existing content of the right area of JPanel will not be used anymore. The concept is just same like in the java api documentation page: http://docs.oracle.com/javase/6/docs/api. You click the link in the left frame, you'll get the content displayed at the right frame.

The example illustration is like this:

(note: it's made and edited using image editor, this is not a real screenshot of working application)

enter image description herehttp://i48.tinypic.com/5vrxaa.jpg

So, I would like to know is there a way to put JFrame into JPanel?

I'm thinking of using JInternalFrame, is it possible? Or is there another way?

UPDATE:
Source code:
http://pastebin.com/tiqRbWP8 (VTreePanel.java, this is the panel with left & right area divisions)
http://pastebin.com/330z3yuT (CPanel.java, this is the superclass of VTreePanel and also subclass from JPanel)
http://pastebin.com/MkNsbtjh (AWindow.java, this is the pop-up window)
http://pastebin.com/2rsppQeE (CFrame.java, this is the superclass of AWindow and also subclass from JFrame)

like image 840
null Avatar asked Dec 20 '22 14:12

null


2 Answers

Instead of trying to embed the frame, you want to embed the frame's content.

There is (at least) one issue I can see with this.

The menu bar is controlled by the frame's RootPane.

Create you're self a new JPanel. Set it's layout to BorderLayout.

Get the menu bar from the frame (using JFrame#getJMenuBar) and added to the north position of you new panel.

Get the frames ContentPane and add it to the center position of the panel.

There is undoubtedly countless other, application specific issues you will run into trying to do this...

like image 168
MadProgrammer Avatar answered Dec 24 '22 01:12

MadProgrammer


No, you don't want to "put a JFrame into a JPanel" and your illustration above doesn't demonstrate this either. Instead it's showing a subordinate window on top of (not inside of) another window. If you absolutely need to display a new subordinate window, I'd recommend that you create and display a JDialog. The tutorials will explain how to do this, or if you get stuck post your code attempt and we'll help you work with this.


Edit 1
You state:

I need to convert from the pop-up window style into the jpanel content style. It's just like the java api documentation page style: docs.oracle.com/javase/6/docs/api When you click the text in left frame, it doesn't show any pop-up, right? The content is displayed at right frame directly. So that's basicly my goal. The source code is quite big. I will try to paste the source code if possible.

What you are looking for is to simply implement a MouseListener in a JList or JTable, and when responding to the click get the content based on the selection made. This has nothing to do with placing a JFrame in a JPanel and all to do with writing the correct program logic. Again, display it in a modal JDialog -- but that's all secondary to your writing the correct non-GUI logic. You're really barking up the wrong tree here. Forget about JFrames, forget about JPanels for the moment and instead concentrate on how you're going to extract the SLA Criteria data when it is clicked on.


Edit 2
I think I see what you're trying to do -- instead of JFrames and JDialogs, use JPanels and swap them using a CardLayout which would allow you to swap views.

like image 36
Hovercraft Full Of Eels Avatar answered Dec 24 '22 01:12

Hovercraft Full Of Eels