I want to add the new button with an icon of a question mark to the left of buttons "maximize", "hide" and "close". how to make it (like in a pic)?
You need to create a custom RootPane/TitleBar.
This means you need to set your JFrame to undecorated and then set your custom instance of what extends RootPane to your JFrame
It is hard to change native Title bar, because it is originating from the operating system. But you can remove native Title-bar setUndecorated(true); and create your own Title-bar , See simple tutorial here
OR
You can see an another way in Substance look-and-feel
Related
So far I got that we can remove the minimize/maximize etc buttons from a jframe (header).
How can I remove just the Maximize button from a JFrame?
How to hide the default minimize/maximize and close buttons on JFrame window in Java?
Is there a way to add a custom button in a jframe(header)? I am trying to extend the default available jframe buttons feature and add my own "always on top" into it. If this is not possible then I would like to add some pinning icon into the jframe (header) to replicate "always on top" feature for a jframe (or jinternalframe).
This feature that I am trying to implement is similar to what we see on a linux machines with gui which enable us to keep a folder always in top.
enter image description here
Here's a thought, how about instead, you remove the JFrame header:
frameName.setUndecorated(true);
And simply create your own using a JPanel. With this method, you can fully customize a JFrame header!
I need to make a custom ui which looks like the following image :-
I know how to change the button to that arrow shape and everything else.But I can't understand how to move those close ,restore and minimize buttons to the center and give them round shape (on Windows).
On Googling ,I found how to make custom shape windows but it doesn't meet my requirements.
Can anyone please tell me how to do this or any link.??
You will need to create your own title bar as another panel with buttons and then remove the window decoration on the frame.
JFrame frame = new JFrame(...);
frame.setUndecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//This will close the frame and exit
To minimize and maximize, listen for button events and use:
frame.setState(Frame.ICONIFIED);//minimizes
frame.setState(Frame.NORMAL);//restores
See Frame.setState(int) for details.
I have an open-source java swing application like this:
http://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)
http://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)
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...
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.
I had skimming the source codes, I saw that the AWindow.java has internal panel (APanel.java) to hold the window's content, and it also has a public method to return the content panel object (getAPanel()). With this, I can use it for fetching the window's contents into other container.
Finally, I decided to use JTabbedPane in the right area of VTreePanel for displaying the pop-up window's contents.
You cannot put a Jframe into a JPanel. Instead you should try to create a separate panel that has functionalities like your JFrame and embed that into your JPanel.
Since you can put a JPanel into another JPanel but not a JFrame into another JPanel
How to disable iconified button in JFrame Window ?
something like setResizable, but for minimize button
At First, you can use the method setUndecorated(boolean). It may disable the title bar and the border.
In the end, you will create the icon label and close button at your frame top or the others position.
But this way will lose the border look and feel for the frame. If you choose this way, you must create a lot of code.
In fact, If you could not use JNI, this way may be the only.
You could use a JDialog, which natively does not have a minimize button.
In fact, the minimize, close and maximize/un-maximize buttons are drawn by the Operating System itself. This means you can't really disable them within Java.
That's why my suggestion is to use a JDialog.
Using this JDialog constructor, where I specify the owning JFrame instance, I find that the JDialog is not centered over it's owner component. Instead, it appears in the top-left corner. In order to get this to work, I must specify the owner component in the setLocationRelativeTo method.
Why is this?
Work Environment:
Dual monitors
Windows XP OS
JDK 1.6.0_29
Note that for the JFrame instance, I use setLocationRelativeTo(null).
JDialog is very general I think. If you want quick ways to pop a general dialog box then look at JOptionPane. It has methods to easily create a centred JDialog component or immediately pop up a blocking dialog window.
e.g.
JDialog dialog = new JOptionPane("message", JOptionPane.INFORMATION_MESSAGE)
.createDialog(jFrameOwner, "window title");
Though you probably really want to look at the JOptionPane.showXxxDialog static methods. Very useful and convenient.
And you may wish to take a look at the dialog tutorial. All the dialogs produced by the java web start application can be produced using the JOptionPane class.
Sounds like a design decision. Sometimes you want to give the dialog a reference to it's parent, without to center the location over it.