Java JFrame FAQ: How do I properly create and display a JFrame? While you're at it, how do I center a JFrame?
In this Java tutorial I'll demonstrate how to create and display a JFrame Other than the comments in the source code, I'm going to keep the code as simple as possible, so I can demonstrate how this works.
Here's the complete source code for a Java class named SimpleJFrameDemo, that demonstrates how to construct and display a Java frame (a JFrame):
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
* A sample class that demonstrates how to create and display a JFrame.
*
*/
public class SimpleJFrameDemo
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
// create a jframe, giving it an initial title
JFrame frame = new JFrame("Simple JFrame Demo");
// set the jframe size. in a more complicated application you will
// probably call frame.pack() before displaying it.
frame.setSize(new Dimension(300,200));
// center the frame
frame.setLocationRelativeTo(null);
// set this so your application can easily be stopped/killed
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// display the frame
frame.setVisible(true);
}
});
}
}
Discussion
If you don't count all the import statements and boilerplate code, you can see that you can create and display a JFrame in less than 10 lines of code.
There are plenty of lines of comment in the source code, so I'll just add a few additional comments here:
- Execution starts in the
mainmethod of mySimpleJFrameDemoJava class. - I use the SwingUtilities
invokeLatermethod as a wrapper around most of myJFramecode. Unfortunately this is the most complicated line of code, and it comes first, but in general you use this technique to make sure you execute Swing code like this on the Event Dispatch Thread, or EDT. As I'll try to show in many examples on this blog, you only want to modify Swing (GUI) elements from the EDT (otherwise bad things will happen). - The
frame.setLocationRelativeTo(null)is a slightly-special way of centering theJFrameon screen. It's actually discussed in theJFrameJavadoc, but when you first start working with Swing andJFrame's this isn't obvious. - The
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)method sets up your application so that when the user presses the close button on the window they see, your entire application will shut down. This technique is fine for simple applications like this, but with more complicated applications you'll want to control that shutdown process more carefully.
I hope this source code makes sense. I usually find it's easier to learn a new programming language when I can see complete examples, so I'm trying to share more examples like this throughout my blog.

