UNPKG

epubjs

Version:

Render ePub documents in the browser, across many devices

212 lines (195 loc) 34.2 kB
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Dialogs</title><link rel="stylesheet" href="core.css" type="text/css"/><meta name="generator" content="DocBook XSL Stylesheets V1.74.0"/></head><body><div class="sect1" title="Dialogs"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-17-SECT-14"/>Dialogs</h1></div></div></div><p><a id="idx10976" class="indexterm"/> <a id="idx10994" class="indexterm"/> A dialog is another standard feature of user interfaces. Dialogs are frequently used to present information to the user (“Your fruit salad is ready.”) or to ask a question (“Shall I bring the car around?”). Dialogs are used so commonly in GUI applications that Swing includes a handy set of prebuilt dialogs. These are accessible from static methods in the <a id="I_indexterm17_id798115" class="indexterm"/><code class="literal">JOptionPane</code> class. Many variations are possible; <code class="literal">JOptionPane</code> groups them into four basic types:</p><div class="variablelist"><dl><dt><span class="term">Message dialog</span></dt><dd><p>Displays a message to the user, usually accompanied by an OK button.</p></dd><dt><span class="term">Confirmation dialog</span></dt><dd><p>Ask a question and displays answer buttons—usually Yes, No, and Cancel.</p></dd><dt><span class="term">Input dialog</span></dt><dd><p>Asks the user to type in a string.</p></dd><dt><span class="term">Option dialogs</span></dt><dd><p>The most general type. You pass it your own components, which are displayed in the dialog.</p></dd></dl></div><p>A confirmation dialog is shown in <a class="xref" href="ch17s12.html#learnjava3-CHP-17-FIG-13" title="Figure 17-13. Using a confirmation dialog">Figure 17-13</a>.</p><div class="figure"><a id="learnjava3-CHP-17-FIG-13"/><div class="figure-contents"><div class="mediaobject"><a id="I_17_tt1043"/><img src="httpatomoreillycomsourceoreillyimages1707665.png.jpg" alt="Using a confirmation dialog"/></div></div><p class="title">Figure 17-13. Using a confirmation dialog</p></div><p>Let’s look at examples of each kind of dialog. The following code produces a message dialog:</p><a id="I_17_tt1044"/><pre class="programlisting"> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showMessageDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="s">"You have mail."</code><code class="o">);</code></pre><p>The first parameter to <a id="I_indexterm17_id798204" class="indexterm"/><code class="literal">showMessageDialog()</code> is the parent component (in this case, <code class="literal">frame</code>, an existing <code class="literal">JFrame</code>). The dialog will be centered on the parent component. If you pass <code class="literal">null</code> for the parent component, the dialog is centered in your screen. The dialogs that <code class="literal">JOptionPane</code> displays are <span class="emphasis"><em>modal</em></span>, which means they block other input to your application while they are showing.</p><p>Here’s a slightly fancier message dialog. We’ve specified a title for the dialog and a message type, which affects the icon that is displayed:</p><a id="I_17_tt1045"/><pre class="programlisting"> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showMessageDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="s">"You are low on memory."</code><code class="o">,</code> <code class="s">"Apocalyptic message"</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">WARNING_MESSAGE</code><code class="o">);</code></pre><p>Here’s how to display the confirmation dialog shown in <a class="xref" href="ch17s12.html#learnjava3-CHP-17-FIG-13" title="Figure 17-13. Using a confirmation dialog">Figure 17-13</a>:</p><a id="I_17_tt1046"/><pre class="programlisting"> <code class="kt">int</code> <code class="n">result</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showConfirmDialog</code><code class="o">(</code><code class="kc">null</code><code class="o">,</code> <code class="s">"Do you want to remove Windows now?"</code><code class="o">);</code></pre><p>In this case, we’ve passed <code class="literal">null</code> for the parent component and it will be displayed centered on the screen. Special values are returned from <a id="I_indexterm17_id798282" class="indexterm"/><code class="literal">showConfirmDialog()</code> to indicate which button was pressed. A full example later in this section shows how to use this return value.</p><p>Sometimes you need to ask the user to type some input. The following code puts up a dialog requesting the user’s name:</p><a id="I_17_tt1047"/><pre class="programlisting"> <code class="n">String</code> <code class="n">name</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showInputDialog</code><code class="o">(</code><code class="kc">null</code><code class="o">,</code> <code class="s">"Please enter your name."</code><code class="o">);</code></pre><p>Whatever the user types is returned as a <code class="literal">String</code> or <code class="literal">null</code> if the user presses the Cancel button.</p><p>The most general type of dialog is the option dialog. You supply an array of objects you wish to be displayed; <code class="literal">JOptionPane</code> takes care of formatting them and displaying the dialog. The following example displays a text label, a <code class="literal">JTextField</code>, and a <code class="literal">JPasswordField</code>. (Text components are described in the next chapter.)</p><a id="I_17_tt1048"/><pre class="programlisting"> <code class="n">JTextField</code> <code class="n">userField</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JTextField</code><code class="o">();</code> <code class="n">JPasswordField</code> <code class="n">passField</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JPasswordField</code><code class="o">();</code> <code class="n">String</code> <code class="n">message</code> <code class="o">=</code> <code class="s">"Please enter your user name and password."</code><code class="o">;</code> <code class="n">result</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showOptionDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="k">new</code> <code class="n">Object</code><code class="o">[]</code> <code class="o">{</code> <code class="n">message</code><code class="o">,</code> <code class="n">userField</code><code class="o">,</code> <code class="n">passField</code> <code class="o">},</code> <code class="s">"Login"</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">OK_CANCEL_OPTION</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">QUESTION_MESSAGE</code><code class="o">,</code> <code class="kc">null</code><code class="o">,</code> <code class="kc">null</code><code class="o">,</code> <code class="kc">null</code><code class="o">);</code></pre><p>We’ve also specified a dialog title (“Login”) in the call to <a id="I_indexterm17_id798357" class="indexterm"/><code class="literal">showOptionDialog()</code>. We want OK and Cancel buttons, so we pass <a id="I_indexterm17_id798368" class="indexterm"/><code class="literal">OK_CANCEL_OPTION</code> as the dialog type. The <a id="I_indexterm17_id798380" class="indexterm"/><code class="literal">QUESTION_MESSAGE</code> argument indicates we’d like to see the question mark icon. The last three items are optional: an <code class="literal">Icon</code>, an array of different choices, and a current selection. Because the icon parameter is <code class="literal">null</code>, a default is used. If the array of choices and the current selection parameters were not <code class="literal">null</code>, <code class="literal">JOptionPane</code> might try to display the choices in a list or combo box.</p><p>The following application includes all the examples we’ve covered:</p><a id="I_17_tt1049"/><pre class="programlisting"> <code class="kn">import</code> <code class="nn">javax.swing.*</code><code class="o">;</code> <code class="kd">public</code> <code class="kd">class</code> <code class="nc">ExerciseOptions</code> <code class="o">{</code> <code class="kd">public</code> <code class="kd">static</code> <code class="kt">void</code> <code class="nf">main</code><code class="o">(</code><code class="n">String</code><code class="o">[]</code> <code class="n">args</code><code class="o">)</code> <code class="o">{</code> <code class="n">JFrame</code> <code class="n">frame</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JFrame</code><code class="o">(</code><code class="s">"ExerciseOptions v1.0"</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setSize</code><code class="o">(</code><code class="mi">200</code><code class="o">,</code> <code class="mi">200</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setVisible</code><code class="o">(</code><code class="kc">true</code><code class="o">);</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showMessageDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="s">"You have mail."</code><code class="o">);</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showMessageDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="s">"You are low on memory."</code><code class="o">,</code> <code class="s">"Apocalyptic message"</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">WARNING_MESSAGE</code><code class="o">);</code> <code class="kt">int</code> <code class="n">result</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showConfirmDialog</code><code class="o">(</code><code class="kc">null</code><code class="o">,</code> <code class="s">"Do you want to remove Windows now?"</code><code class="o">);</code> <code class="k">switch</code> <code class="o">(</code><code class="n">result</code><code class="o">)</code> <code class="o">{</code> <code class="k">case</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">YES_OPTION</code><code class="o">:</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="s">"Yes"</code><code class="o">);</code> <code class="k">break</code><code class="o">;</code> <code class="k">case</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">NO_OPTION</code><code class="o">:</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="s">"No"</code><code class="o">);</code> <code class="k">break</code><code class="o">;</code> <code class="k">case</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">CANCEL_OPTION</code><code class="o">:</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="s">"Cancel"</code><code class="o">);</code> <code class="k">break</code><code class="o">;</code> <code class="k">case</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">CLOSED_OPTION</code><code class="o">:</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="s">"Closed"</code><code class="o">);</code> <code class="k">break</code><code class="o">;</code> <code class="o">}</code> <code class="n">String</code> <code class="n">name</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showInputDialog</code><code class="o">(</code><code class="kc">null</code><code class="o">,</code> <code class="s">"Please enter your name."</code><code class="o">);</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="n">name</code><code class="o">);</code> <code class="n">JTextField</code> <code class="n">userField</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JTextField</code><code class="o">();</code> <code class="n">JPasswordField</code> <code class="n">passField</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JPasswordField</code><code class="o">();</code> <code class="n">String</code> <code class="n">message</code> <code class="o">=</code> <code class="s">"Please enter your user name and password."</code><code class="o">;</code> <code class="n">result</code> <code class="o">=</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">showOptionDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="k">new</code> <code class="n">Object</code><code class="o">[]</code> <code class="o">{</code> <code class="n">message</code><code class="o">,</code> <code class="n">userField</code><code class="o">,</code> <code class="n">passField</code> <code class="o">},</code> <code class="s">"Login"</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">OK_CANCEL_OPTION</code><code class="o">,</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">QUESTION_MESSAGE</code><code class="o">,</code> <code class="kc">null</code><code class="o">,</code> <code class="kc">null</code><code class="o">,</code> <code class="kc">null</code><code class="o">);</code> <code class="k">if</code> <code class="o">(</code><code class="n">result</code> <code class="o">==</code> <code class="n">JOptionPane</code><code class="o">.</code><code class="na">OK_OPTION</code><code class="o">)</code> <code class="n">System</code><code class="o">.</code><code class="na">out</code><code class="o">.</code><code class="na">println</code><code class="o">(</code><code class="n">userField</code><code class="o">.</code><code class="na">getText</code><code class="o">()</code> <code class="o">+</code> <code class="s">" "</code> <code class="o">+</code> <code class="k">new</code> <code class="n">String</code><code class="o">(</code><code class="n">passField</code><code class="o">.</code><code class="na">getPassword</code><code class="o">()));</code> <code class="n">System</code><code class="o">.</code><code class="na">exit</code><code class="o">(</code><code class="mi">0</code><code class="o">);</code> <code class="o">}</code> <code class="o">}</code></pre><div class="sect2" title="File Selection Dialog"><div class="titlepage"><div><div><h2 class="title"><a id="learnjava3-CHP-17-SECT-15"/>File Selection Dialog</h2></div></div></div><p><a id="idx10977" class="indexterm"/> A <a id="I_indexterm17_id798459" class="indexterm"/><code class="literal">JFileChooser</code> is a standard file selection box. As with other Swing components, <code class="literal">JFileChooser</code> is implemented in pure Java, so it can look and act the same on different platforms or take on the native appearance of the operating system, depending on what look and feel is in effect.</p><p>Selecting files all day can be pretty boring without a greater purpose, so we’ll exercise the <code class="literal">JFileChooser</code> in a mini-editor application. <code class="literal">Editor</code> provides a text area in which we can load and work with files. (The <code class="literal">JFileChooser</code> created by <code class="literal">Editor</code> is shown in <a class="xref" href="ch17s12.html#learnjava3-CHP-17-FIG-14" title="Figure 17-14. Using a JFileChooser">Figure 17-14</a>.) We’ll stop just shy of the capability to save and let you fill in the blanks (with a few caveats).</p><div class="figure"><a id="learnjava3-CHP-17-FIG-14"/><div class="figure-contents"><div class="mediaobject"><a id="I_17_tt1050"/><img src="httpatomoreillycomsourceoreillyimages1707666.png" alt="Using a JFileChooser"/></div></div><p class="title">Figure 17-14. Using a JFileChooser</p></div><p>Here’s the code:</p><a id="I_17_tt1051"/><pre class="programlisting"> <code class="kn">import</code> <code class="nn">java.awt.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">java.awt.event.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">java.io.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">javax.swing.*</code><code class="o">;</code> <code class="kd">public</code> <code class="kd">class</code> <code class="nc">Editor</code> <code class="kd">extends</code> <code class="n">JFrame</code> <code class="kd">implements</code> <code class="n">ActionListener</code> <code class="o">{</code> <code class="kd">private</code> <code class="n">JEditorPane</code> <code class="n">textPane</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JEditorPane</code><code class="o">();</code> <code class="kd">public</code> <code class="nf">Editor</code><code class="o">()</code> <code class="o">{</code> <code class="kd">super</code><code class="o">(</code><code class="s">"Editor v1.0"</code><code class="o">);</code> <code class="n">Container</code> <code class="n">content</code> <code class="o">=</code> <code class="n">getContentPane</code><code class="o">();</code> <code class="c1">// unnecessary in 5.0+</code> <code class="n">content</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JScrollPane</code><code class="o">(</code><code class="n">textPane</code><code class="o">),</code> <code class="n">BorderLayout</code><code class="o">.</code><code class="na">CENTER</code><code class="o">);</code> <code class="n">JMenu</code> <code class="n">menu</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JMenu</code><code class="o">(</code><code class="s">"File"</code><code class="o">);</code> <code class="n">menu</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">makeMenuItem</code><code class="o">(</code><code class="s">"Open"</code><code class="o">));</code> <code class="n">menu</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">makeMenuItem</code><code class="o">(</code><code class="s">"Save"</code><code class="o">));</code> <code class="n">menu</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">makeMenuItem</code><code class="o">(</code><code class="s">"Quit"</code><code class="o">));</code> <code class="n">JMenuBar</code> <code class="n">menuBar</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JMenuBar</code><code class="o">();</code> <code class="n">menuBar</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">menu</code><code class="o">);</code> <code class="n">setJMenuBar</code><code class="o">(</code><code class="n">menuBar</code><code class="o">);</code> <code class="n">setSize</code><code class="o">(</code><code class="mi">300</code><code class="o">,</code> <code class="mi">300</code><code class="o">);</code> <code class="n">setDefaultCloseOperation</code><code class="o">(</code> <code class="n">JFrame</code><code class="o">.</code><code class="na">EXIT_ON_CLOSE</code> <code class="o">);</code> <code class="o">}</code> <code class="kd">public</code> <code class="kt">void</code> <code class="nf">actionPerformed</code><code class="o">(</code><code class="n">ActionEvent</code> <code class="n">e</code><code class="o">)</code> <code class="o">{</code> <code class="n">String</code> <code class="n">command</code> <code class="o">=</code> <code class="n">e</code><code class="o">.</code><code class="na">getActionCommand</code><code class="o">();</code> <code class="k">if</code> <code class="o">(</code><code class="n">command</code><code class="o">.</code><code class="na">equals</code><code class="o">(</code><code class="s">"Quit"</code><code class="o">))</code> <code class="n">System</code><code class="o">.</code><code class="na">exit</code><code class="o">(</code><code class="mi">0</code><code class="o">);</code> <code class="k">else</code> <code class="nf">if</code> <code class="o">(</code><code class="n">command</code><code class="o">.</code><code class="na">equals</code><code class="o">(</code><code class="s">"Open"</code><code class="o">))</code> <code class="n">loadFile</code><code class="o">();</code> <code class="k">else</code> <code class="nf">if</code> <code class="o">(</code><code class="n">command</code><code class="o">.</code><code class="na">equals</code><code class="o">(</code><code class="s">"Save"</code><code class="o">))</code> <code class="n">saveFile</code><code class="o">();</code> <code class="o">}</code> <code class="kd">private</code> <code class="kt">void</code> <code class="nf">loadFile</code> <code class="o">()</code> <code class="o">{</code> <code class="n">JFileChooser</code> <code class="n">chooser</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JFileChooser</code><code class="o">();</code> <code class="kt">int</code> <code class="n">result</code> <code class="o">=</code> <code class="n">chooser</code><code class="o">.</code><code class="na">showOpenDialog</code><code class="o">(</code><code class="k">this</code><code class="o">);</code> <code class="k">if</code> <code class="o">(</code><code class="n">result</code> <code class="o">==</code> <code class="n">JFileChooser</code><code class="o">.</code><code class="na">CANCEL_OPTION</code><code class="o">)</code> <code class="k">return</code><code class="o">;</code> <code class="k">try</code> <code class="o">{</code> <code class="n">File</code> <code class="n">file</code> <code class="o">=</code> <code class="n">chooser</code><code class="o">.</code><code class="na">getSelectedFile</code><code class="o">();</code> <code class="n">java</code><code class="o">.</code><code class="na">net</code><code class="o">.</code><code class="na">URL</code> <code class="n">url</code> <code class="o">=</code> <code class="n">file</code><code class="o">.</code><code class="na">toURL</code><code class="o">();</code> <code class="n">textPane</code><code class="o">.</code><code class="na">setPage</code><code class="o">(</code><code class="n">url</code><code class="o">);</code> <code class="o">}</code> <code class="k">catch</code> <code class="o">(</code><code class="n">Exception</code> <code class="n">e</code><code class="o">)</code> <code class="o">{</code> <code class="n">textPane</code><code class="o">.</code><code class="na">setText</code><code class="o">(</code><code class="s">"Could not load file: "</code> <code class="o">+</code> <code class="n">e</code><code class="o">);</code> <code class="o">}</code> <code class="o">}</code> <code class="kd">private</code> <code class="kt">void</code> <code class="nf">saveFile</code><code class="o">()</code> <code class="o">{</code> <code class="n">JFileChooser</code> <code class="n">chooser</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JFileChooser</code><code class="o">();</code> <code class="n">chooser</code><code class="o">.</code><code class="na">showSaveDialog</code><code class="o">(</code><code class="k">this</code><code class="o">);</code> <code class="c1">// Save file data...</code> <code class="o">}</code> <code class="kd">private</code> <code class="n">JMenuItem</code> <code class="nf">makeMenuItem</code><code class="o">(</code> <code class="n">String</code> <code class="n">name</code> <code class="o">)</code> <code class="o">{</code> <code class="n">JMenuItem</code> <code class="n">m</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JMenuItem</code><code class="o">(</code> <code class="n">name</code> <code class="o">);</code> <code class="n">m</code><code class="o">.</code><code class="na">addActionListener</code><code class="o">(</code> <code class="k">this</code> <code class="o">);</code> <code class="k">return</code> <code class="n">m</code><code class="o">;</code> <code class="o">}</code> <code class="kd">public</code> <code class="kd">static</code> <code class="kt">void</code> <code class="nf">main</code><code class="o">(</code><code class="n">String</code><code class="o">[]</code> <code class="n">s</code><code class="o">)</code> <code class="o">{</code> <code class="k">new</code> <code class="nf">Editor</code><code class="o">().</code><code class="na">setVisible</code><code class="o">(</code><code class="kc">true</code><code class="o">);</code> <code class="o">}</code> <code class="o">}</code></pre><p><code class="literal">Editor</code> is a <code class="literal">JFrame</code> that lays itself out with a <code class="literal">JEditorPane</code> (which is covered in <a class="xref" href="ch18.html" title="Chapter 18. More Swing Components">Chapter 18</a>) and a pull-down menu. From the pull-down File menu, we can Open, Save, or Quit. The <code class="literal">actionPerformed()</code> method catches the events associated with these menu selections and takes the appropriate action.</p><p>The interesting parts of <code class="literal">Editor</code> are the <code class="literal">private</code> methods <code class="literal">loadFile()</code> and <code class="literal">saveFile()</code>. The <code class="literal">loadFile()</code> method creates a new <code class="literal">JFileChooser</code> and calls its <a id="I_indexterm17_id798619" class="indexterm"/><code class="literal">showOpenDialog()</code> method.</p><p>A <code class="literal">JFileChooser</code> does its work when the <code class="literal">showOpenDialog()</code> method is called. This method blocks the caller until the dialog completes its job, at which time the file chooser disappears. After that, we can retrieve the designated file with the <code class="literal">getFile()</code> method. In <code class="literal">loadFile()</code>, we convert the selected <code class="literal">File</code> to a <code class="literal">URL</code> and pass it to the <code class="literal">JEditorPane</code>, which displays the selected file. As you’ll learn in the next chapter, <code class="literal">JEditorPane</code> can display HTML and RTF files.</p><p>You can fill out the unfinished <code class="literal">saveFile()</code> method if you wish, but it would be prudent to add the standard safety precautions. For example, you could use one of the confirmation dialogs we just looked at to prompt the user before overwriting an existing file.<a id="I_indexterm17_id798689" class="indexterm"/></p></div><div class="sect2" title="The Color Chooser"><div class="titlepage"><div><div><h2 class="title"><a id="learnjava3-CHP-17-SECT-16"/>The Color Chooser</h2></div></div></div><p><a id="idx10979" class="indexterm"/> Swing is chock full of goodies. <code class="literal">JColorChooser</code> is yet another ready-made dialog supplied with Swing; it allows your users to choose colors. The following brief example shows how easy it is to use <code class="literal">JColorChooser</code>:</p><a id="I_17_tt1052"/><pre class="programlisting"> <code class="kn">import</code> <code class="nn">java.awt.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">java.awt.event.*</code><code class="o">;</code> <code class="kn">import</code> <code class="nn">javax.swing.*</code><code class="o">;</code> <code class="kd">public</code> <code class="kd">class</code> <code class="nc">LocalColor</code> <code class="o">{</code> <code class="kd">public</code> <code class="kd">static</code> <code class="kt">void</code> <code class="nf">main</code><code class="o">(</code><code class="n">String</code><code class="o">[]</code> <code class="n">args</code><code class="o">)</code> <code class="o">{</code> <code class="kd">final</code> <code class="n">JFrame</code> <code class="n">frame</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JFrame</code><code class="o">(</code><code class="s">"LocalColor v1.0"</code><code class="o">);</code> <code class="kd">final</code> <code class="n">Container</code> <code class="n">content</code> <code class="o">=</code> <code class="n">frame</code><code class="o">.</code><code class="na">getContentPane</code><code class="o">();</code> <code class="c1">// unnecessary in 5.0+</code> <code class="n">content</code><code class="o">.</code><code class="na">setLayout</code><code class="o">(</code><code class="k">new</code> <code class="n">GridBagLayout</code><code class="o">());</code> <code class="n">JButton</code> <code class="n">button</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"Change color..."</code><code class="o">);</code> <code class="n">content</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">button</code><code class="o">);</code> <code class="n">button</code><code class="o">.</code><code class="na">addActionListener</code><code class="o">(</code><code class="k">new</code> <code class="n">ActionListener</code><code class="o">()</code> <code class="o">{</code> <code class="kd">public</code> <code class="kt">void</code> <code class="nf">actionPerformed</code><code class="o">(</code><code class="n">ActionEvent</code> <code class="n">e</code><code class="o">)</code> <code class="o">{</code> <code class="n">Color</code> <code class="n">c</code> <code class="o">=</code> <code class="n">JColorChooser</code><code class="o">.</code><code class="na">showDialog</code><code class="o">(</code><code class="n">frame</code><code class="o">,</code> <code class="s">"Choose a color"</code><code class="o">,</code> <code class="n">content</code><code class="o">.</code><code class="na">getBackground</code><code class="o">());</code> <code class="k">if</code> <code class="o">(</code><code class="n">c</code> <code class="o">!=</code> <code class="kc">null</code><code class="o">)</code> <code class="n">content</code><code class="o">.</code><code class="na">setBackground</code><code class="o">(</code><code class="n">c</code><code class="o">);</code> <code class="o">}</code> <code class="o">});</code> <code class="n">frame</code><code class="o">.</code><code class="na">setSize</code><code class="o">(</code><code class="mi">200</code><code class="o">,</code> <code class="mi">200</code><code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setDefaultCloseOperation</code><code class="o">(</code> <code class="n">JFrame</code><code class="o">.</code><code class="na">EXIT_ON_CLOSE</code> <code class="o">);</code> <code class="n">frame</code><code class="o">.</code><code class="na">setVisible</code><code class="o">(</code><code class="kc">true</code><code class="o">);</code> <code class="o">}</code> <code class="o">}</code></pre><p>This example shows a frame window with a single button. When you click on the button, a color chooser pops up. After you select a color, it becomes the background color of the frame window.</p><p>Basically, all we have to do is call <code class="literal">JColorChooser</code>’s static method <a id="I_indexterm17_id798753" class="indexterm"/><code class="literal">showDialog()</code>. In this example, we specified a parent component, a dialog title, and an initial color value. But you can get away with just specifying a parent component. Whatever color the user chooses is returned; if the user presses the Cancel button, <code class="literal">null</code> is returned.<a id="I_indexterm17_id798772" class="indexterm"/><a id="I_indexterm17_id798779" class="indexterm"/><a id="I_indexterm17_id798786" class="indexterm"/></p></div></div></body></html>