Compiling and Running Swing Programs
This section gives you detailed instructions on where to obtain the latest JDK and how to create, compile and run a program that uses Swing components.If you are interested in using the JavaFX package to create your UI, see the JavaFX Documentation. To deploy, see Deploying JavaFX Applications.
About the JFC and Swing
Feature | Description |
---|---|
Swing GUI Components | Includes everything from buttons to split panes to tables. Many components are capable of sorting, printing, and drag and drop, to name a few of the supported features. |
Pluggable Look-and-Feel Support | The look and feel of Swing applications is pluggable, allowing a choice of look and feel. For example, the same program can use either the Java or the Windows look and feel. Additionally, the Java platform supports the GTK+ look and feel, which makes hundreds of existing look and feels available to Swing programs. Many more look-and-feel packages are available from various sources. |
Accessibility API | Enables assistive technologies, such as screen readers and Braille displays, to get information from the user interface. |
Java 2D API | Enables developers to easily incorporate high-quality 2D graphics, text, and images in applications and applets. Java 2D includes extensive APIs for generating and sending high-quality output to printing devices. |
Internationalization | Allows developers to build applications that can interact with users worldwide in their own languages and cultural conventions. With the input method framework developers can build applications that accept text in languages that use thousands of different characters, such as Japanese, Chinese, or Korean. |
Which Swing Packages Should I Use?
The Swing API is powerful, flexible — and immense. The Swing API has 18 public packages:javax.accessibility |
javax.swing.plaf |
javax.swing.text |
javax.swing |
javax.swing.plaf.basic |
javax.swing.text.html |
javax.swing.border |
javax.swing.plaf.metal |
javax.swing.text.html.parser |
javax.swing.colorchooser |
javax.swing.plaf.multi |
javax.swing.text.rtf |
javax.swing.event |
javax.swing.plaf.synth |
javax.swing.tree |
javax.swing.filechooser |
javax.swing.table |
javax.swing.undo |
javax.swing
Compiling and Running Swing Programs
This section explains how to compile and run a Swing application from
the command line. For information on compiling and running a Swing
application using NetBeans IDE, see
Running Tutorial Examples in NetBeans IDE.
The compilation instructions work for all Swing programs — applets, as
well as applications. Here are the steps you need to follow:
The
This means you must put the
If you prefer, you may compile the example from within the
but you must remember to leave the
If you are unable to compile, make sure you are using the compiler in a recent release of the Java platform. You can verify the version of your compiler or Java Runtime Environment (JRE) using these commands
Once you've updated your JDK, you should be able to use the programs
in this trail without changes. Another common mistake is installing the
JRE and not the full Java Development Kit (JDK) needed to compile these
programs. Refer to the
Getting Started trail to help you solve any compiling problems you encounter. Another resource is the
Troubleshooting Guide for Java™ SE 6 Desktop Technologies.
- Install the latest release of the Java SE platform, if you haven't already done so.
- Create a program that uses Swing components.
- Compile the program.
- Run the program.
Install the Latest Release of the Java SE Platform
You can download the latest release of the JDK for free from http://www.oracle.com/technetwork/java/javase/downloads/index.html.Create a Program That Uses Swing Components
You can use a simple program we provide, called HelloWorldSwing, that brings up the GUI shown in the figure below. The program is in a single file,HelloWorldSwing.java
. When you save this file, you must match the spelling and capitalization of its name exactly.The
HelloWorldSwing.java
example, like all of our Swing
tutorial examples, is created inside a package. If you look at the
source code, you see the following line at the beginning of the file:package start;
HelloWorldSwing.java
file inside of a start
directory. You compile and run the example from the directory above the start
directory. The tutorial examples from the Using Swing Components lesson are inside of a components
package and the examples from the Writing Event Listeners lesson are inside a events
package, and so on. For more information, you might want to see the
Packages
lesson.Compile the Program
Your next step is to compile the program. To compile the example, from the directory above theHelloWorldSwing.java
file:javac start/HelloWorldSwing.java
start
directory:javac HelloWorldSwing.java
start
directory to execute the program.If you are unable to compile, make sure you are using the compiler in a recent release of the Java platform. You can verify the version of your compiler or Java Runtime Environment (JRE) using these commands
javac -version java -version
Run the Program
After you compile the program successfully, you can run it. From the directory above thestart
directory:java start.HelloWorldSwing
Lesson: Learning Swing with the NetBeans IDE
Examples Index
This lesson provides an introduction to Graphical User Interface (GUI) programming with Swing and the NetBeans IDE. As you learned in the "Hello World!" lesson, the NetBeans IDE is a free, open-source, cross-platform integrated development environment with built-in support for the Java programming language. It offers many advantages over coding with a text editor; we recommend its use whenever possible. If you have not yet read the above lesson, please take a moment to do so now. It provides valuable information about downloading and installing the JDK and NetBeans IDE.
The goal of this lesson is to introduce the Swing API by designing a simple application that converts temperature from Celsius to Fahrenheit. Its GUI will be basic, focusing on only a subset of the available Swing components. We will use the NetBeans IDE GUI builder, which makes user interface creation a simple matter of drag and drop. Its automatic code generation feature simplifies the GUI development process, letting you focus on the application logic instead of the underlying infrastructure.
Because this lesson is a step-by-step checklist of specific actions to take, we recommend that you run the NetBeans IDE and perform each step as you read along. This will be the quickest and easiest way to begin programming with Swing. If you are unable to do so, simply reading along should still be useful, since each step is illustrated with screenshots.
If you prefer the traditional approach of programming each component manually (without the assistance of an IDE), think of this lesson as an entry point into the lower-level discussions already provided elsewhere in the tutorial. Hyperlinks in each discussion will take you to related lessons, should you wish to learn such lower-level details.
The finished GUI for this application will look as follows:
Click the Launch button to run CelsiusConverter using
Java™ Web Start (download JDK 7 or later). Alternatively, to compile and run the example yourself, consult the example index.
From an end-user's perspective, usage is simple: enter a temperature (in Celsius) into the text box, click the "Convert" button, and watch the converted temperature (in Fahrenheit) appear on screen. The minimize, maximize, and close buttons will behave as expected, and the application will also have a title that appears along the top of the window.
From a programmer's perspective, we will write the application in two main stages. First, we will populate the GUI with the various Swing components and arrange them as shown above. Then, we will add the application logic, so that the program actually performs a conversion when the user presses the "Convert" button.
If you are interested in using JavaFX to create your GUI, see the JavaFX Documentation and JavaFX - NetBeans Wiki .
This lesson provides an introduction to Graphical User Interface (GUI) programming with Swing and the NetBeans IDE. As you learned in the "Hello World!" lesson, the NetBeans IDE is a free, open-source, cross-platform integrated development environment with built-in support for the Java programming language. It offers many advantages over coding with a text editor; we recommend its use whenever possible. If you have not yet read the above lesson, please take a moment to do so now. It provides valuable information about downloading and installing the JDK and NetBeans IDE.
The goal of this lesson is to introduce the Swing API by designing a simple application that converts temperature from Celsius to Fahrenheit. Its GUI will be basic, focusing on only a subset of the available Swing components. We will use the NetBeans IDE GUI builder, which makes user interface creation a simple matter of drag and drop. Its automatic code generation feature simplifies the GUI development process, letting you focus on the application logic instead of the underlying infrastructure.
Because this lesson is a step-by-step checklist of specific actions to take, we recommend that you run the NetBeans IDE and perform each step as you read along. This will be the quickest and easiest way to begin programming with Swing. If you are unable to do so, simply reading along should still be useful, since each step is illustrated with screenshots.
If you prefer the traditional approach of programming each component manually (without the assistance of an IDE), think of this lesson as an entry point into the lower-level discussions already provided elsewhere in the tutorial. Hyperlinks in each discussion will take you to related lessons, should you wish to learn such lower-level details.
The finished GUI for this application will look as follows:
The CelsiusConverter Application.
From an end-user's perspective, usage is simple: enter a temperature (in Celsius) into the text box, click the "Convert" button, and watch the converted temperature (in Fahrenheit) appear on screen. The minimize, maximize, and close buttons will behave as expected, and the application will also have a title that appears along the top of the window.
From a programmer's perspective, we will write the application in two main stages. First, we will populate the GUI with the various Swing components and arrange them as shown above. Then, we will add the application logic, so that the program actually performs a conversion when the user presses the "Convert" button.
If you are interested in using JavaFX to create your GUI, see the JavaFX Documentation and JavaFX - NetBeans Wiki .
Setting up the CelsiusConverter Project
If you have worked with the NetBeans IDE in the past, much of this
section will look familiar, since the initial steps are similar for most
projects. Still, the following steps describe settings that are
specific to this application, so take care to follow them closely.
Keyboard
shortcuts for each command appear on the far right of each menu item.
The look and feel of the NetBeans IDE may vary across platforms, but the
functionality will remain the same.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
You
may notice mention of "J2SE" in the description pane; that is the old
name for what is now known as the "Java SE" platform. Press the button
labeled "Next" to proceed.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Make
sure to deselect the "Create Main Class" checkbox; leaving this option
selected generates a new class as the main entry point for the
application, but our main GUI window (created in the next step) will
serve that purpose, so checking this box is not necessary. Click the
"Finish" button when you are done.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
When
the IDE finishes loading, you will see a screen similar to the above.
All panes will be empty except for the Projects pane in the upper left
hand corner, which shows the newly created project.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Now right-click the CelsiusConverterProject name and choose New -> JFrame Form (
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
The remainder of the fields should automatically be filled in, as shown above. Click the Finish button when you are done.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
When the IDE finishes loading, the right pane will display a design-time, graphical view of the
Step 1: Create a New Project
To create a new project, launch the NetBeans IDE and choose New Project from the File menu:
Creating a New Project
Step 2: Choose General -> Java Application
Next, select General from the Categories column, and Java Application from the Projects column:This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Step 3: Set a Project Name
Now enter "CelsiusConverterProject" as the project name. You can leave the Project Location and Project Folder fields set to their default values, or click the Browse button to choose an alternate location on your system.This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Step 4: Add a JFrame Form
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
JFrame
is the Swing class responsible for the main frame for your
application.) You will learn how to designate this class as the
application's entry point later in this lesson.Step 5: Name the GUI Class
Next, typeCelsiusConverterGUI
as the class name, and learn
as the package name. You can actually name this package anything you
want, but here we are following the tutorial convention of naming the
package after the lesson in which is resides.This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
CelsiusConverterGUI
. It is on this screen that you will visually drag, drop, and manipulate the various Swing components.NetBeans IDE Basics
It is not necessary to learn every feature of the NetBeans IDE before
exploring its GUI creation capabilities. In fact, the only features
that you really need to understand are the Palette, the Design Area, the Property Editor, and the Inspector. We will discuss these features below.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
From this list, our application will use only
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
The figure above shows a single
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
A quick look at the source view reveals that the IDE has created a private method named
Don't feel that you need to understand this code in any detail; we mention it here simply to explore the source tab. For more information about these components, see:
How to Make Frames (Main Windows) and Laying Out Components Within a Container.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
The screenshot above shows the various properties of this object, such as background color, foreground color, font, and cursor.
The
Inspector provides a graphical representation of your application's
components. We will use the Inspector only once, to change a few
variable names to something other than their defaults.
The Palette
The Palette contains all of the components offered by the Swing API. You can probably already guess what many of these components are for, even if this is your first time using them (JLabel
is a text label, JList
is a drop-down list, etc.)This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
JLabel
(a basic text label), JTextField
(for the user to enter the temperature), and JButton
(to convert the temperature from Celsius to Fahrenheit.)The Design Area
The Design Area is where you will visually construct your GUI. It has two views: source view, and design view. Design view is the default, as shown below. You can toggle between views at any time by clicking their respective tabs.This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
JFrame
object, as represented by the large shaded rectangle with blue border.
Commonly expected behavior (such as quitting when the user clicks the
"close" button) is auto-generated by the IDE and appears in the source
view between uneditable blue sections of code known as guarded blocks.This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
initComponents
,
which initializes the various components of the GUI. It also tells the
application to "exit on close", performs some layout-specific tasks,
then packs the (soon to be added) components together on screen.Don't feel that you need to understand this code in any detail; we mention it here simply to explore the source tab. For more information about these components, see:
How to Make Frames (Main Windows) and Laying Out Components Within a Container.
The Property Editor
The Property Editor does what its name implies: it allows you to edit the properties of each component. The Property Editor is intuitive to use; in it you will see a series of rows — one row per property — that you can click and edit without entering the source code directly. The following figure shows the Property Editor for the newly addedJFrame
object:This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
The Inspector
The last component of the NetBeans IDE that we will use in this lesson is the Inspector:
The Inspector
Creating the CelsiusConverter GUI
This section explains how to use the NetBeans IDE to create the
application's GUI. As you drag each component from the Palette to the
Design Area, the IDE auto-generates the appropriate source code.
Then, set its title with the Property Editor:
You can set the title by either double-clicking the title property and entering the new text directly, or by clicking the button and entering the title in the provided field. Or, as a shortcut, you could single-click the
You
may be tempted to erase the default text "JTextField1", but just leave
it in place for now. We will replace it later in this lesson as we make
the final adjustments to each component. For more information about this
component, see
How to Use Text Fields.
For more information about this component, see
How to Use Labels.
You may be tempted to manually adjust the width of the
Finally, add a second
Step 1: Set the Title
First, set the title of the application'sJFrame
to "Celsius Converter", by single-clicking the JFrame
in the Inspector:
Selecting the JFrame
Setting the Title
JFrame
of the inspector and enter its new text directly without using the property editor. Step 2: Add a JTextField
Next, drag aJTextField
from the Palette to the upper
left corner of the Design Area. As you approach the upper left corner,
the GUI builder provides visual cues (dashed lines) that suggest the
appropriate spacing. Using these cues as a guide, drop a JTextField
into the upper left hand corner of the window as shown below:
Adding a JTextField
Step 3: Add a JLabel
Next, drag aJLabel
onto the Design Area. Place it to the right of the JTextField
,
again watching for visual cues that suggest an appropriate amount of
spacing. Make sure that text base for this component is aligned with
that of the JTextField
. The visual cues provided by the IDE should make this easy to determine.
Adding a JLabel
Step 4: Add a JButton
Next, drag aJButton
from the Palette and position it to the left and underneath the JTextField
. Again, the visual cues help guide it into place.
Adding a JButton
JButton
and JTextField
,
but just leave them as they are for now. You will learn how to
correctly adjust these components later in this lesson. For more
information about this component, see
How to Use Buttons. Step 5: Add a Second JLabel
Adding a Second JLabel
JLabel
, repeating the process in step 2. Place this second label to the right of the JButton
, as shown above.Adjusting the CelsiusConverter GUI
With the GUI components now in place, it is time to make the final
adjustments. There are a few different ways to do this; the order
suggested here is just one possible approach.
The GUI portion of this application is now complete! If the NetBeans IDE has done its job, you should feel that creating this GUI was a simple, if not trivial, task. But take a minute to click on the source tab; you might be surprised at the amount of code that has been generated.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
To
see the code in its entirety, scroll up and down within the IDE as
necessary. You can expand or collapse certain blocks of code (such as
method bodies) by clicking the + or - symbol on the left-hand side of
the source editor.
Step 1: Set the Component Text
First, double-click theJTextField
and JButton
to change the default text that was inserted by the IDE. When you erase the text from the JTextField
, it will shrink in size as shown below. Change the text of the JButton
from "JButton1" to "Convert." Also change the top JLabel
text to "Celsius" and the bottom to "Fahrenheit."
Setting the Component Text
Step 2: Set the Component Size
Next, shift-click theJTextField
and JButton
components. This will highlight each showing that they are selected.
Right-click (control-click for mac users) Same Size -> Same Width.
The components will now be the same width, as shown below. When you
perform this step, make sure that JFrame
itself is not also selected. If it is, the Same Size menu will not be active.
Setting the JTextField and JButton Sizes
Step 3: Remove Extra Space
Finally, grab the lower right-hand corner of theJFrame
and adjust its size to eliminate any extra whitespace. Note that if you
eliminate all of the extra space (as shown below) the title (which only
appears at runtime) may not show completely. The end-user is free to
resize the application as desired, but you may want to leave some extra
space on the right side to make sure that everything fits correctly.
Experiment, and use the screenshot of the finished GUI as a guide.
The Completed GUI
The GUI portion of this application is now complete! If the NetBeans IDE has done its job, you should feel that creating this GUI was a simple, if not trivial, task. But take a minute to click on the source tab; you might be surprised at the amount of code that has been generated.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Adding the Application Logic
It is now time to add in the application logic.
The
default names are not very relevant in the context of this application,
so it makes sense to change them from their defaults to something that
is more meaningful. Right-click each variable name and choose "Change
variable name." When you are finished, the variable names should appear
as follows:
The
new variable names are "tempTextField", "celsiusLabel",
"convertButton", and "fahrenheitLabel." Each change that you make in the
Inspector will automatically propagate its way back into the source
code. You can rest assured that compilation will not fail due to typos
or mistakes of that nature — mistakes that are common when editing by
hand.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
In the Design Area, click on the Convert button to select it. Make sure that only
the Convert button is selected (if the JFrame itself is also selected,
this step will not work.) Right-click the Convert button and choose
Events -> Action -> ActionPerformed. This will generate the
required event-handling code, leaving you with empty method bodies in
which to add your own functionality:
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
There
are many different event types representing the various kinds of
actions that an end-user can take (clicking the mouse triggers one type
of event, typing at the keyboard triggers another, moving the mouse yet
another, and so on.) Our application is only concerned with the
ActionEvent; for more information about event handling, see
Writing Event Listeners.
Note: This example is not localizable because the
Simply copy this code and paste it into the convertButtonActionPerformed method as shown below:
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
With the conversion code in place, the application is now complete.
Congratulations! You have completed your first Swing application!
Step 1: Change the Default Variable Names
The figure below shows the default variable names as they currently appear within the Inspector. For each component, the variable name appears first, followed by the object's type in square brackets. For example,jTextField1 [JTextField]
means that "jTextField1" is the variable name and "JTextField" is its type.
Default Variable Names
New Variable Names
Step 2: Register the Event Listeners
When an end-user interacts with a Swing GUI component (such as clicking the Convert button), that component will generate a special kind of object — called an event object — which it will then broadcast to any other objects that have previously registered themselves as listeners for that event. The NetBeans IDE makes event listener registration extremely simple:This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Step 3: Add the Temperature Conversion Code
The final step is to simply paste the temperature conversion code into the empty method body. The following code is all that is necessary to convert a temperature from Celsius to Fahrenheit:Note: This example is not localizable because the
parseDouble
method is not localizable. This code snippet is for illustration purposes only. A more robust implementation would use the
Scanner class to parse the user input.//Parse degrees Celsius as a double and convert to Fahrenheit. int tempFahr = (int)((Double.parseDouble(tempTextField.getText())) * 1.8 + 32); fahrenheitLabel.setText(tempFahr + " Fahrenheit");
This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
Step 4: Run the Application
Running the application is simply a matter of choosing Run -> Run Main Project within the NetBeans IDE. The first time you run this application, you will be prompted with a dialog asking to setCelsiusConverterGUI
as the main class for this project. Click the OK button, and when the
program finishes compiling, you should see the application running in
its own window.Congratulations! You have completed your first Swing application!
No comments:
Post a Comment