| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <!-- |
| Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. |
| --> |
| |
| <head> |
| <title>Adding Functionality to Buttons: A Beginners Guide</title> |
| <meta name="description" content="Adding Functionality to Buttons with the NetBeans GUI Builder Matisse: This tutorial teaches you how to build a simple GUI with back-end functionality. This tutorial is geared to the beginner and introduces the basic construction of a GUI with functionality. We will work through the layout and design of a GUI and add a few Buttons and Text Boxes. The Text Boxes will be used for receiving user input and also for displaying the program output. The Button will initiate the functionality built into the front end."> |
| <link rel="stylesheet" href="../../netbeans.css"> |
| <meta name="author" content="Saleem Gul, Tomas Pavek, Ruth Kusterer"> |
| </head> |
| |
| <body> |
| <h1>Adding Functionality to Buttons: A Beginners Guide</h1> |
| |
| |
| <div class="articledate" style="margin-left: 0px;">Contributed |
| by <a href="mailto:sguls2@hotmail.com">Saleem Gul</a> and Tomas Pavek, maintained by Ruth Kusterer</div> |
| |
| <p> |
| This beginner tutorial teaches you how to build a simple GUI with back-end functionality. |
| You will learn how to develop a graphical user interface |
| and how to add functionality to the buttons and fields used. |
| A basic understanding of the Java Programming Language is required. |
| </p> |
| |
| <p> |
| This document takes you through the fundamental concepts of GUI creation and |
| takes the approach taken in many self learning books. We will work through the |
| layout and design of a GUI and add a few Buttons and Text Boxes. The Text Boxes |
| will be used for receiving user input and also for displaying the program output. |
| The Button will initiate the functionality built into the front end. |
| The application we create will be a simple but functional calculator. |
| </p> |
| |
| <p class="align-center"><B>Expected duration: 15 minutes</B></p> |
| |
| <div class="indent"> |
| <h3>Tutorial Exercises</h3> |
| |
| <ul> |
| <li><A HREF="#Exercise_1">Exercise 1: Creating a Project</A></li> |
| <li><A HREF="#Exercise_2">Exercise 2: Building the Front End</A></li> |
| <li><A HREF="#Exercise_3">Exercise 3: Adding Functionality</A></li> |
| <li><A HREF="#Exercise_4">Exercise 4: Running the Program</A></li> |
| <li><A HREF="#how">How Event Handling Works</A></li> |
| <li><A HREF="#nextsteps">Next Steps</A></li> |
| </ul> |
| |
| <h3>Prerequisites</h3> |
| <ul> |
| <li>The use should have basic skills in the Java language. |
| <li>The user should be comfortable with using the NetBeans IDE. |
| <li>The user should have already completed |
| the tutorial <A HREF="../60/java/quickstart-gui.html">GUI Building in Netbeans IDE 6.0</A>. |
| </ul> |
| |
| <h3><a name="getting"></a>Software Needed for This Tutorial</h3> |
| |
| <p>The NetBeans GUI Builder comes bundled with NetBeans IDE, |
| and no special setup is necessary.</p> |
| |
| <p>Make sure you have the following software installed on your computer:</p> |
| |
| <ul> |
| <li>NetBeans IDE 6.0 (<a href="https://netbeans.org/community/releases/60/index.html">download</a>)</li> |
| <li>In order to install and run NetBeans IDE 6.0, you also |
| require the Java SE Development Kit (JDK) version 5.0 or higher. You can get |
| a version of JDK for your platform at: |
| <a href="http://java.sun.com/javase/downloads/index.jsp">http://java.sun.com</a>. |
| </li> |
| </ul> |
| </div> |
| |
| <p> |
| <h2><a name="Exercise_1"></a>Exercise 1: Creating a Project</h2> |
| |
| <p>The first step is to create a Project, we will name our project NumberAddition. |
| <ol> |
| <p> |
| <LI> |
| <P>Choose File > New Project. Alternately, you can click the New Project |
| icon in the IDE toolbar.</P> |
| <LI> |
| <P>In the Categories pane, select the General node. In the Projects pane, |
| choose Java Application. Click Next. </P> |
| <LI> |
| <P>Enter NumberAddition in the Project Name field and specify a path |
| e.g. in your home directory as the project |
| location. </P> |
| <LI> |
| <P>Ensure that the Set as Main Project checkbox is selected. Deselect Create |
| Main Class if it is selected. </P> |
| <LI> |
| <P>Click Finish.</P> |
| </ol> |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2><a name="Exercise_2"></a>Exercise 2: Building the Front End</h2> |
| |
| <p>After creating the new application, you may have noticed that the Source Packages |
| folder in the Projects window contains an empty <code><default package></code> |
| node. To proceed with building our interface, we need to create a Java container |
| within which we will place the other required GUI components. In this step we'll |
| create a container using the <code>JFrame</code> component and place the container |
| in a new package.</p> |
| |
| <div class="indent"> |
| <h3 class="tutorial">Create a JFrame container</h3> |
| <ol> |
| <p> |
| <li>In the Projects window, right-click the NumberAddition node and choose |
| New > JFrame Form.</li> |
| <p> |
| <li>Enter NumberAdditionUI as the Class Name.</li> |
| <p> |
| <li>Enter <code>my.NumberAddition</code> as the package. </li> |
| <p> |
| <li>Click Finish.</li> |
| </ol> |
| |
| <p>The IDE creates the <code>NumberAdditionUI</code> form and the |
| <code>NumberAdditionUI</code> class within the <code>NumberAdditionUI.java</code> |
| application, and opens the <code>NumberAdditionUI</code> form in the |
| GUI Builder. Notice that the <code>my.NumberAddition</code> |
| package replaces the default package.</p> |
| |
| <h3 class="tutorial">Adding Components: Making of the Front End</h3> |
| <p> |
| Next we are going to populate our application's front end with one JPanel, |
| and three JLabels, JTextFields and JButtons each. |
| The JFrame with the aforementioned components will look like this. |
| |
| <p class="align-center"><img class="b-none" src="../../images_www/gui-functionality/Figure1.png" width="309" height="230"><br> |
| <p>Select Windows > Palette to open the Palette if you don't see it. |
| You use the Palette to drag and drop UI components to the design area. |
| <ol> |
| <li>Start by selecting a JPanel from the Palette and drop it onto the JFrame. |
| <li>While the JPanel is highlighted, go to the Properties window |
| and click the "..." button next to Border to choose a border style. |
| <li>In the Border dialog, select Titled Border from the list, |
| and type in <code>Number Addition</code> in the Title field. |
| Click OK to save the changes and exit the dialog. |
| <li>You should now see an empty titled JFrame that says Number Addition |
| like in the screenshot. Look at the screenshot and add three |
| JLabels, three JTextFields and three JButtons as you see above. |
| </ol> |
| |
| <h3 class="tutorial">Renaming the Components</h3> |
| <p>In this step we are going to rename the components that were just added to the |
| JFrame.</p> |
| <ol> |
| <li>Double-click on jLabel1 and change the text property to <code>First |
| Number</code></li> |
| <p> |
| <li>Double-click on jLabel2 and change the text to <code>Second Number</code></li> |
| <p> |
| <li>Double-click on jLabel3 and change the text to <code>Result</code> </li> |
| <p> |
| <li>Double-click on jTextField1 and remove the sample text in the text |
| field. You may have to resize the jTextField1 to its original size. Repeat |
| this step for jTextField2 and jTextField3. </li> |
| <P> |
| <LI> Double-click on jButton1 and rename it <code>Clear</code></P> |
| <P> |
| <LI> Double-click on jButton2 and rename it <code>Add</code></P> |
| <P> |
| <LI> Double-click on jButton3 and rename it <code>Exit</code></P> |
| </ol> |
| <p>Your Finished GUI should now look like this:</p> |
| <p class="align-center" class="tutorial"><img class="b-none" src="../../images_www/gui-functionality/Figure2.png" width="309" height="230"><BR> |
| </p> |
| |
| </div> |
| |
| <br /> |
| |
| <!-- ======================================================================================= --> |
| |
| <h2><a name="Exercise_3"></a>Exercise 3: Adding Functionality</h2> |
| |
| <p>In this exercise we are going to give functionality to the Add, Clear, and |
| Exit buttons. The jTextField1 and jTextField2 boxes will be used for user input |
| and jTextField3 for program output - what we are creating is a very simple calculator. |
| Let's begin.</p> |
| |
| <div class="indent"> |
| <h3 class="tutorial">Making the Exit Button Work</h3> |
| |
| <p>In order to give function to the buttons, we have to assign an event |
| handler to each, responding to an event. |
| In our case we want to know when the button is pressed, either by mouse |
| click or via keyboard. So we will use ActionListener responding to ActionEvent. |
| |
| <OL> |
| <LI><p>Right Click on the Exit button. |
| From the pop-up menu choose Events --> Action --> ActionPerformed. |
| Note that the menu contains many more events you can respond to! |
| When you select the actionPerformed event, the IDE will automatically |
| add an ActionListener to the Exit button and generate a handler method |
| for handling the listener's actionPerformed method. |
| <li>The IDE will open up the Source Code window and scroll to |
| where you implement the action |
| you want the button to do when the button is pressed (either by mouse |
| click or via keyboard). |
| Your Source Code window should contain the following lines: |
| <PRE class="examplecode">private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { |
| <font color="#555555">//TODO: Add your handling code here:</font> |
| }</PRE> |
| |
| <li>We |
| are now going to add code for what we want the Exit Button to do. You will have to type |
| System.exit(0); to the above code, replacing the TODO line. |
| Your finished Exit button code should look like this: |
| |
| <PRE class="examplecode">private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { |
| System.exit(0); |
| } </PRE> |
| </OL> |
| |
| <h3 class="tutorial">Making the Clear Button Work</h3> |
| <p> |
| <ol> |
| <li>Click on the Design tab at the top of your work area to go back to the |
| Form Design</li> |
| <p> |
| <li>Right Click on the Clear button (jButton1). From the pop-up menu select |
| Events --> Action --> actionPerformed. |
| <p> |
| <li>We are going to have the Clear button erase all text from the jTextFields. |
| To do this, you will add some code like above. Your finished source code should look |
| like this: </p></li> |
| <PRE class="examplecode">private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ |
| jTextField1.setText(""); |
| jTextField2.setText(""); |
| jTextField3.setText(""); |
| }</PRE> |
| </ol> |
| The above code changes the text in all three |
| of our jTextFields to nothing, in essence it is overwriting the existing |
| Text with a blank. |
| |
| <h3 class="tutorial">Making the Add Button Work</h3> |
| <p>The Add button will perform |
| three actions. |
| <ol><li>It is going to accept user input from jTextField1 and jTextField2 and |
| convert the input from a type String to a float. <li>It will then perform |
| addition of the two numbers and finally, <li>it will convert the sum to a type String |
| and place it in jTextField3.</ol> |
| Lets get started! |
| |
| <OL> |
| <LI>Click on the Design tab at the top of your work area to go back to the |
| Form Design.</li> |
| <LI>Right-click on the Add button (jButton3). From the pop-up menu, select Events --> |
| Action --> actionPerformed</li> |
| <LI>We are going to add some code to have our Add button work. The |
| finished source code shall look like this: |
| <pre class="examplecode">private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){ |
| <font color="#555555">// First we define float variables.</font> |
| float num1, num2, result; |
| <font color="#555555">// We have to parse the text to a type float.</font> |
| num1 = Float.parseFloat(jTextField1.getText()); |
| num2 = Float.parseFloat(jTextField2.getText()); |
| <font color="#555555">// Now we can perform the addition.</font> |
| result = num1+num2; |
| <font color="#555555">// We will now pass the value of result to jTextField3. |
| // At the same time, we are going to |
| // change the value of result from a float to a string.</font> |
| jTextField3.setText(String.valueOf(result)); |
| }</PRE> |
| </li> |
| </OL> |
| |
| <p>Our Program is now complete we can now build and run it to see it in action. </p> |
| </div> |
| |
| <P><!-- ===================================================================================== --><BR> |
| |
| </P> |
| |
| <h2><a name="Exercise_4"></a>Exercise 4: Running the Program</h2> |
| |
| <p>The final step is to build and run the program. |
| |
| <OL> |
| <LI>Click on Build in the Main Menu |
| and Choose --> Build Main Project.</li> |
| <LI>When the Build output is finished, |
| click on Run in the Main Menu and Choose --> Run Main Project |
| </li> |
| <LI>If you get a window informing you |
| that Project NumberAddition does not have a main class set, then |
| you should select my.NumberAddition.NumberAdditionUI as the main |
| class in the same window and click the OK button.</li> |
| <LI>Your created program is now running.</li> |
| </OL> |
| |
| <p>In this tutorial you learned how you hook up functionality to |
| GUI components with the NetBeans GUI Builder Matisse. |
| |
| <P><!-- ======================================================================================== --><BR> |
| </P> |
| |
| <h2><a name="how"></a>How Event Handling Works</h2> |
| |
| <p>This tutorial showed how to respond to a simple button event. |
| There are many more events you can have your application respond to. The IDE can help you find the |
| list of available events your GUI components can handle: |
| <ol> |
| <li><p>Go back to the file <code>NumberAdditionUI.java</code> in the Editor. |
| Click the Design tab to see the GUI's layout in the GUI Builder Matisse. |
| <li><p>Right-click any GUI component, and select Events from the pop-up menu. |
| For now, just browse the menu to see what's there, you don't need to select anything. |
| <li><p>Alternatively, you can select Properties from the Window menu. In the Properties window, click the Events tab. |
| In the Events tab, you can view and edit events handlers associated with the currently active GUI component. |
| <li><p>You can have your application respond to key presses, single, |
| double and triple mouse clicks, mouse motion, window size and focus changes. |
| You can generate event handlers for all of them from the Events menu. |
| The most common event you will use is an Action event. |
| (Learn <a href="http://java.sun.com/docs/books/tutorial/uiswing/events/generalrules.html#twokinds">best practices for Event handling</a> from Sun's <a href="http://java.sun.com/docs/books/tutorial/uiswing/events/index.html">Java Events Tutorial</a>.) |
| </ol> |
| |
| <p> |
| How does event handling work? Everytime you select an event from the Event menu, |
| the IDE automatically creates a so-called event listener for you, and hooks it up to your component. |
| Go through the following steps to see how event handling works. |
| |
| <ol> |
| <li><p>Go back to the file <code>NumberAdditionUI.java</code> in the Editor. Click the Source tab to see the GUI's source. |
| <li><p>Scroll down and note the methods <code>jButton1ActionPerformed()</code>, |
| <code>jButton2ActionPerformed()</code>, and <code>jButton3ActionPerformed()</code> that you just implemented. |
| These methods are called event handlers. |
| <li><p>Now scroll to a method called <code>initComponents()</code>. If you do not see this method, |
| look for a line that says <code>Generated Code</code>; click the + sign next to it |
| to expand the collapsed <code>initComponents()</code> method. |
| <li><p>First, note the blue block around the <code>initComponents()</code> method. This code was auto-generated |
| by the IDE and you cannot edit it. |
| <li><p>Now, browse through the <code>initComponents()</code> method. Among other things, |
| it contains the code that initializes and places your GUI components on the form. |
| This code is generated and updated automatically while you place and edit components in the Design view. |
| <li><p>In <code>initComponents()</code>, scroll down to where it says |
| <pre class="examplecode">jButton3.setText("Exit"); |
| jButton3.addActionListener(new java.awt.event.ActionListener() { |
| public void actionPerformed(java.awt.event.ActionEvent evt) { |
| jButton3ActionPerformed(evt); |
| } |
| });</pre> |
| |
| This is the spot where an event listener object is added to the GUI component; |
| in this case, you register an ActionListener to the jButton3. |
| The ActionListener interface has an actionPerformed method taking ActionEvent |
| object which is implemented simply by calling your <code>jButton3ActionPerformed</code> event handler. |
| The button is now listening to action events. Everytime it is pressed an |
| ActionEvent is generated and passed to the listener's actionPerformed method |
| which in turn executes code that you provided in the event handler for this event. |
| </ol> |
| <p> |
| Generally speaking, to be able to respond, each interactive GUI component |
| needs to register to an event listener and needs to implement an event handler. |
| As you can see, NetBeans IDE handles hooking up the event listener for you, so you can concentrate |
| on implementing the actual business logic that should be triggered by the event. |
| </p> |
| |
| <P><!-- ======================================================================================== --><BR> |
| </P> |
| |
| <h2><a name="nextsteps"></a>Next Steps</h2> |
| |
| <ul> |
| <li><a href="http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-GUIEditorMatisse">Matisse |
| GUI Builder - Frequently Asked Questions</a> |
| <li><a href="http://java.sun.com/docs/books/tutorial/uiswing/events/generalrules.html#twokinds">Best |
| practices for Event handling</a> from Sun's |
| <a href="http://java.sun.com/docs/books/tutorial/uiswing/events/index.html">Java Events Tutorial</a>. |
| <li><a href="https://netbeans.org/kb/60/java/gui-db.html">Building a Java Desktop Database Application</a> |
| <li>Code Samples can be found at <a href="http://javaalmanac.com/egs/java.awt.event/pkg.html">Java Almanac: Java Events</a> |
| </ul> |
| |
| <div class="feedback-box"><a href="/about/contact_form.html?to=3&subject=Feedback:Add%20Functionality%20to%20Buttons%20GUI%20Building%20Beginners%20Guide">Feedback</a> |
| </div> |
| <p> |
| If you have questions or need support, |
| and want to keep yourself informed on the latest |
| developments on the NetBeans IDE features, |
| join the <a href="mailto:nbusers@netbeans.org">nbusers@netbeans.org</a> mailing list by |
| sending an empty message to |
| <a href="mailto:nbusers-digest-subscribe@netbeans.org">nbusers-digest-subscribe@netbeans.org</a>. |
| </p> |
| |
| </body> |
| |
| </html> |