I would like to apply my own close and minimize buttons. Is there any way to change the JFrame
design?

- 168,117
- 40
- 217
- 433

- 1,175
- 6
- 24
- 44
-
1think you are after a JWindow http://docs.oracle.com/javase/7/docs/api/javax/swing/JWindow.html – pengibot Jun 06 '12 at 11:38
-
thnx andrew i'll do nxt time.. – BDeveloper Jun 07 '12 at 14:22
-
please do some more research first? – PulsePanda Oct 03 '12 at 02:50
4 Answers
The trick lies in the PLAF and setDefaultLookAndFeelDecorated(true)
(Specifying Window Decorations).
E.G.
import java.awt.BorderLayout;
import javax.swing.*;
public class FrameCloseButtonsByLookAndFeel {
FrameCloseButtonsByLookAndFeel() {
String[] names = {
UIManager.getSystemLookAndFeelClassName(),
UIManager.getCrossPlatformLookAndFeelClassName()
};
for (String name : names) {
try {
UIManager.setLookAndFeel(name);
} catch (Exception e) {
e.printStackTrace();
}
// very important to get the window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame f = new JFrame(UIManager.getLookAndFeel().getName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel gui = new JPanel(new BorderLayout());
f.setContentPane(gui);
JTree tree = new JTree();
tree.setVisibleRowCount(4);
gui.add(tree, BorderLayout.LINE_START);
gui.add(new JScrollPane(new JTextArea(3,15)));
JToolBar toolbar = new JToolBar();
gui.add(toolbar, BorderLayout.PAGE_START);
for (int ii=1; ii<5; ii++) {
toolbar.add(new JButton("Button " + ii));
if (ii%2==0) {
toolbar.addSeparator();
}
}
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new FrameCloseButtonsByLookAndFeel();
}
});
}
}

- 168,117
- 40
- 217
- 433
think you are after a JWindow
http://docs.oracle.com/javase/7/docs/api/javax/swing/JWindow.html
You can then create your own buttons which actions can minimize/close your window

- 1,492
- 3
- 15
- 35
-
-
no, custom GUI can be anything you want, you override them and implement them however you want and apply your own look and feel for how you want it to look – pengibot Jun 06 '12 at 11:48
-
if you want to use a JFrame you can still and use JFrame.setDefaultLookAndFeelDecorated(true); recursively to get rid of close/minimize buttons etc. though would be a little more work – pengibot Jun 06 '12 at 11:49
-
You can also recycle the corresponding internal frame icons, as shown [here](http://stackoverflow.com/a/10360374/230513). – trashgod Jun 06 '12 at 16:04
The only thing I'm aware that can be done is to add a WindowListener
to the JFrame
and handle closing events in that listener. You can make virtually anything, like displaying dialogs or even cancelling the closing of the JFrame
.
See this tutorial for more details about how to write such listeners.
As for minimizing: as far as I know, there is no way to control or modify such behaviour, it's completely controlled by the operating system.
The only way to change the aspect of the minimize/close/maximize buttons is to use a custom LookAndFeel and setting JFrame.setDefaultLookAndFeelDecorated (true);
.

- 10,724
- 10
- 47
- 69
-
i don't wanna change the events handlers.. i want to change it's image, background, the main frame layout of the application?? – BDeveloper Jun 06 '12 at 11:42
- Set
jframe undecorated
. - Place a
jlabel
for each button. - Put own icon for each
Btn
. - Put
mouseListeners
for eachjlabel
and specify code eg,System.exit(0);/set ICONIFIED option

- 32,436
- 11
- 76
- 145
-
this has nothing to do with LaF's.It's a customized way!For more info go to the Vertex Digital Arts Channel on YouTube – IsmailVawda Dec 29 '13 at 12:51