blob: 2ce3c78f3a26f9e438d2677dfa7159f500de0682 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Using the Visual Debugger</title>
<link rel="stylesheet" href="../../../netbeans.css">
<link rel="stylesheet" type="text/css" href="../../../print.css" media="print">
<link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen">
<script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script>
<meta name="description" content="A guide to using the visual debugger in NetBeans IDE to locate source code in GUI applications."/>
</head>
<body>
<h1>Using the Visual Debugger in NetBeans IDE</h1>
<p>This document describes how to use the Visual Debugger to
help you locate and debug the code for visual elements in your GUI application.
You can use the visual debugger in Java and JavaFX GUI applications.
</p>
<p>In this document you will use the Visual Debugger to explore the Anagram Game sample project.
This document will demonstrate how to take a GUI snapshot of the application and then work with the snapshot
to locate source code, add listeners to events and view the event log of GUI components.
</p>
<p><b>Contents</b></p>
<img src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" class="stamp" alt="Content on this page applies to NetBeans IDE 7.2, 7.3, 7.4 and 8.0" title="Content on this page applies to the NetBeans IDE 7.2, 7.3, 7.4 and 8.0" >
<ul>
<li><a href="#Exercise_10">Taking a GUI Snapshot</a></li>
<li><a href="#Exercise_20">Working with the Visual Debugger</a>
<ul>
<li><a href="#Exercise_21">Locating Sources</a></li>
<li><a href="#Exercise_22">Exploring Component Events</a></li>
</ul>
</li>
</ul>
<p><b>To follow this tutorial, you need the following software and resources.</b></p>
<table>
<tr>
<th class="tblheader" scope="col">Software or Resource</th>
<th class="tblheader" scope="col">Version Required</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">7.2, 7.3, 7.4, 8.0</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Development Kit (JDK)</a></td>
<td class="tbltd1">version 7 or 8</td>
</tr>
</table>
<p class="notes"><strong>Note about JUnit.</strong> If JUnit libraries were not installed when you
installed the IDE you will be prompted to resolve missing resources and install JUnit when you try to debug the application.</p>
<!-- ===================================================================================== -->
<a name="Exercise_10"></a>
<h2>Taking a GUI Snapshot</h2>
<p>In this tutorial you will use the Anagram Game sample application, a Java desktop application
with a simple GUI that is available as a sample in the New Project wizard.
After you create the project you will start a debugging session and take a GUI snapshot of the application.
</p>
<ol>
<li>Choose File &gt; New Project from the main menu (Ctrl-Shift-N; &#8984;-Shift-N
on Mac) to open the New Project wizard.</li>
<li>Select Anagram Game in the Samples &gt; Java category. Click Next.</li>
<li>Specify a location for the project. Click Finish.
<p>When you click Finish, the IDE creates the project and opens the project in the Projects window.</p>
</li>
<li>Click the Debug button in the toolbar (Ctrl-F5; &#8984;-F5 on Mac) to start the debugging session.
<p>Alternatively, right-click the project node in the Projects window and choose Debug.</p>
<p>When you start the session, the IDE will launch the Anagram Game application
and open the Debugging window.</p>
<p>For more on running the debugger, see <a href="http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG798">About Running and Debugging Java Application Projects</a> in <em>Developing Applications with NetBeans IDE</em>.</p>
</li>
<li>Choose Debug &gt; Take GUI Snapshot from the main menu.
<p>When you choose Take GUI Snapshot, the IDE will take a snapshot of the GUI
and will open the snapshot in the main window.</p>
</li>
</ol>
<a href="../../../images_www/articles/74/java/visualdebug/debug-fullscreen.png" rel="lytebox"
title="The GUI snapshot is displayed in the main window of the IDE">
<img src="../../../images_www/articles/74/java/visualdebug/debug-fullscreen.png"
class="margin-around b-all" alt="screenshot of GUI snapshot" style="width:600px"
title="Click to enlarge"></a>
<p>In this guide to the visual debugger you will not use the Debugging window.</p>
<a name="Exercise_20"></a>
<h2>Working with the Visual Debugger</h2>
<p>The GUI snapshot is a visual debugging tool that can help you locate the source code for GUI components.
The source code for GUI components can sometimes be difficult to locate and the snapshot
provides a way for you to locate the code based on the GUI instead of searching through the code.
You can select components in the snapshot and invoke tasks from the popup menu to view the source code
for the component, show the listeners and set breakpoints on components.
</p>
<div class="indent">
<a name="Exercise_21"></a>
<h3>Locating the Source Code for Components</h3>
<p>This exercise will demonstrate how to use the GUI snapshot to navigate to the lines in the source code
where a component is declared and defined. When you select a component in the GUI snapshot,
you can use the popup menu to invoke various commands.
</p>
<p class="tips">The commands can also be invoked from the Navigator window by right-clicking the component and choosing the command in the popup menu.</p>
<ol>
<li>In the GUI snapshot, select the Guess button.
<p>When you select a component in the snapshot, the IDE displays details about the selected component in the Properties window.
If the Properties window is not visible you can choose Window &gt; Properties from the main menu to open the window.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-snapshot.png" alt="Screenshot of GUI snapshot" title="GUI Snapshot" class="margin-around b-all" >
<p>The IDE also displays the location of the component in the form hierarchy in the Navigator window.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-navigator.png" alt="Screenshot of GUI snapshot" title="GUI Snapshot" class="margin-around b-all" >
</li>
<li>Right-click the Guess button in the snapshot and choose Go to Component Declaration
from the popup menu.
<p>When you choose Go to Component Declaration the IDE opens the source file
in the editor and moves the cursor to the line in the code where <tt>guessButton</tt> is declared.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-gotodeclaration.png" alt="Screenshot of source code in editor" title="Line of code where component is declared" class="margin-around b-all" >
</li>
<li>Right-click the Guess button in the snapshot again and choose Go to Component Source.
<p>When you choose Go to Component Source the IDE opens the source file
in the editor and moves the cursor to the line in the source code for the JButton component.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-gotosource.png" alt="Screenshot of source code in editor" title="Line of source code for component" class="margin-around b-all" />
</li>
</ol>
<p>
You can use the Go to Hierarchy Addition command in the GUI snapshot to locate the line in the source code where a component is added to its container.
The Go to Hierarchy Addition command is disabled by default.
You can enable the command in the Options window.
</p>
<ol>
<li>Open the Options window.</li>
<li>Click the Java Debugger tab in the Java category in the Options window.
<p class="notes"><strong>Note.</strong> In NetBeans IDE 7.1 the Java Debugger tab is located in the Miscellaneous category in the Options window.</p></li>
<li>Select Visual Debugging in the list of categories and select <strong>Track locations of component hierarchy changes</strong>. Click OK.</li>
<li>Stop your debugging session (if one is running).
<p class="notes"><strong>Note.</strong> After you enable the command in the Options window
you will need to restart your debugging session and take a new GUI snapshot
before you can use the Go to Hierarchy Addition command.</p>
</li>
<li>Start a new debugging session and take a GUI snapshot.</li>
<li>Right-click a component in the GUI snapshot and choose Go to Hierarchy Addition.
<p>The IDE will open the source code in the editor at the line where the component is added.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-hierarchy.png" alt="Screenshot of source code in editor" title="Line of source code where component is added to container" class="margin-around b-all" />
</li>
</ol>
<a name="Exercise_22"></a>
<h3>Exploring Component Events</h3>
<p>This exercise will demonstrate how you can use the GUI snapshot and the Events window to explore component events,
enabling you to locate component listeners and the events that are triggered by the components.</p>
<ol>
<li>Right-click the Guess button in the snapshot and choose Show Listeners from the popup menu.
<p>When you choose Show Listeners, the IDE opens the Events window.
You can see that the Custom Listeners node is expanded.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-customlisteners.png" alt="Screenshot of source code in editor" title="Line of source code where component is added to container" class="margin-around b-all" />
</li>
<li>Right-click <strong>com.toy.anagrams.ui.Anagrams$3</strong> below the Custom Listeners node and choose
Go to Component Source in the popup menu.
<p>The source code opens in the editor at the line where the listener is defined.</p>
</li>
<li>Select the empty text field in the snapshot.
<p>Alternatively, you can select the <tt>guessedWord</tt> text field in the Navigator window.</p>
<p>When you select the text field, the items in the Events window will change
automatically to display the listeners for the selected component.</p></li>
<li>In the Events window, double-click the Event Log node to open the Select Listener window.
<p>Alternatively, you can right-click the Event Log node and choose Set Logging Events from the popup menu.</p></li>
<li>Select the <tt>java.awt.event.KeyListener</tt> listener from the dialog. Click OK.<br/>
<img src="../../../images_www/articles/74/java/visualdebug/debug-select-listener.png" alt="Screenshot of source code in editor" title="Line of source code where component is added to container" class="margin-around b-all" />
<p>This listener is now listening for keyboard events in the text field.</p>
</li>
<li>In the Anagram Game application, type some characters in the text field.
<p>When you type a character in the text field, the event is recorded in the events log.
If you expand the Event Log node you can see that each keystroke is now logged.
New events appear each time that you type in the Anagram Game application text field.
If you expand an individual event, for example <tt>keyPressed</tt>, you can see the properties of that event in the log.</p>
<img src="../../../images_www/articles/74/java/visualdebug/debug-eventlog.png" alt="Screenshot of source code in editor" title="Line of source code where component is added to container" class="margin-around b-all" />
<p>If you expand the "Called From..." node for an event you can see the stack trace for the event.</p>
</li>
</ol>
</div>
<!-- ===================================================================================== -->
<p>This tutorial was a basic introduction to the visual debugger in the IDE.
The visual debugger enables you to easily locate the source code and log events for GUI components.
This can be extremely helpful when you are debugging GUI applications.
</p>
<!-- End Content Area -->
<br>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Using%20the%20Visual%20Debugger">Send Feedback on This Tutorial</a></div>
<br style="clear:both;" />
<!-- ======================================================================================= -->
<h2><a name="nextsteps"></a>See Also</h2>
<p>For more information about developing and testing Java applications in NetBeans IDE, see the following resources:</p>
<ul>
<li><a href="gui-functionality.html">Introduction to Java GUI Building</a></li>
<li>Demo: <a href="debug-visual-screencast.html">Using the Visual Debugger</a></li>
<li>Demo: <a href="debug-multithreaded-screencast.html">Debugging a Multithreaded Application</a></li>
<li>Demo: <a href="debug-stepinto-screencast.html">Visual Step Into Action in NetBeans Debugger</a></li>
<li>Demo: <a href="debug-deadlock-screencast.html">Deadlock Detection Using the NetBeans Debugger</a></li>
<li>Demo: <a href="debug-evaluator-screencast.html">Using the Code Snippet Evaluator in the NetBeans Debugger</a></li>
<li><a href="../../trails/java-se.html">Basic IDE and Java Programming Learning Trail</a></li>
</ul>
</body>
</html>