Creating a new JFrame
The way to create a new instance of a JFrame
is pretty simple.
All you have to do is:
JFrame myFrame = new JFrame("Frame Title");
But now the Window
is hidden, to see the Window
you must use the setVisible(boolean flag)
method. Like this:
myFrame.setVisible(true);
Adding Components
There are many ways to add a Component
to a JFrame
.
The simplest way is:
myFrame.getContentPane().add(new JButton());//in this case we are adding a Button
This will just add a new Component
that will fill the JFrame()
.
If you do not want the Component
to fill the screen then you should either make the ContentPane
of the JFrame
a new custom Container
myFrame.getContentPane() = new JPanel();
OR add a custom Container
to the ContentPane
and add everything else there.
JPanel mainPanel = new JPanel();
myFrame.getContentPane().add(mainPanel);
If you do not want to write the myFrame.getContentPane()
every time then you could just keep an instance of the ContentPane
.
JPanel pane = myFrame.getContentPane();
Basic Properties
The most basic properties of the JFrame are:
- Size
- Location
- CloseOperation
You can either set the Size
by using:
myFrame.setSize(new Dimension(300, 200));//in pixels
Or packing
the JFrame
after adding all the components (Better practice).
myFrame.pack();
You can set the Location
by using:
myFrame.setLocation(new Point(100, 100));// starting from top left corner
Finally you can set the CloseOperation
(what happens when X
is pressed) by
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
There are 4 different actions that you can choose from:
DO_NOTHING_ON_CLOSE //Nothing happens
HIDE_ON_CLOSE //setVisible(false)
DISPOSE_ON_CLOSE //Closes JFrame, Application still runs
EXIT_ON_CLOSE //Closes Application
Using Event Dispatch Thread
You should initialize all GUI
in Event Dispatch Thread
, you can do this by simply doing:
class GUI implements Runnable {
public static void main(String[] args) {
EventQueue.invokeLater(new GUI());
}
@Override
public void run() {
JFrame myFrame = new JFrame("Frame Title");
myFrame.setLocation(new Point(100, 100));
myFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
myFrame.getContentPane().add(mainPanel);
mainPanel.add(new JButton("Button Text"), BorderLayout.CENTER);
myFrame.pack();
myFrame.setLocationByPlatform(true);
myFrame.setVisible(true);
}
}