UNPKG

epubjs

Version:

Render ePub documents in the browser, across many devices

49 lines (45 loc) 7.76 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>Desktops</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="Desktops"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-18-SECT-4"/>Desktops</h1></div></div></div><p><a id="idx11006" class="indexterm"/> <a id="idx11023" class="indexterm"/>At this point, you might be thinking that there’s nothing more that Swing could possibly do, but it just keeps getting better. If you’ve ever wished that you could have windows within windows in Java, Swing makes it possible with <a id="I_indexterm18_id803618" class="indexterm"/><code class="literal">JDesktopPane</code> and <code class="literal">JInternalFrame</code>. <a class="xref" href="ch18s04.html#learnjava3-CHP-18-FIG-10" title="Figure 18-10. Using internal frames on a JDesktopPane">Figure 18-10</a> shows how this appears.</p><p>You get a lot of behavior for free from <a id="I_indexterm18_id803642" class="indexterm"/><code class="literal">JInternalFrame</code>. Internal frames can be moved by clicking and dragging the titlebar. They can be resized by clicking and dragging on the window’s borders. Internal frames can be iconified, which means reducing them to a small icon representation on the desktop. Internal frames may also be made to fit the entire size of the desktop (maximized). To you, the programmer, the internal frame is just a kind of special container. You can put your application’s data inside an internal frame just as with any other type of container.</p><div class="figure-float"><div class="figure"><a id="learnjava3-CHP-18-FIG-10"/><div class="figure-contents"><div class="mediaobject"><a id="I_18_tt1095"/><img src="httpatomoreillycomsourceoreillyimages1707676.png.jpg" alt="Using internal frames on a JDesktopPane"/></div></div><p class="title">Figure 18-10. Using internal frames on a JDesktopPane</p></div></div><p>The following brief example shows how to create the windows shown in <a class="xref" href="ch18s04.html#learnjava3-CHP-18-FIG-10" title="Figure 18-10. Using internal frames on a JDesktopPane">Figure 18-10</a>:</p><a id="I_18_tt1096"/><pre class="programlisting"> <code class="c1">//file: Desktop.java</code> <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="kn">import</code> <code class="nn">javax.swing.border.*</code><code class="o">;</code> <code class="kd">public</code> <code class="kd">class</code> <code class="nc">Desktop</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">"Desktop"</code><code class="o">);</code> <code class="n">JDesktopPane</code> <code class="n">desktop</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JDesktopPane</code><code class="o">();</code> <code class="k">for</code> <code class="o">(</code><code class="kt">int</code> <code class="n">i</code> <code class="o">=</code> <code class="mi">0</code><code class="o">;</code> <code class="n">i</code> <code class="o">&lt;</code> <code class="mi">5</code><code class="o">;</code> <code class="n">i</code><code class="o">++)</code> <code class="o">{</code> <code class="n">JInternalFrame</code> <code class="n">internal</code> <code class="o">=</code> <code class="k">new</code> <code class="nf">JInternalFrame</code><code class="o">(</code><code class="s">"Frame "</code> <code class="o">+</code> <code class="n">i</code><code class="o">,</code> <code class="kc">true</code><code class="o">,</code> <code class="kc">true</code><code class="o">,</code> <code class="kc">true</code><code class="o">,</code> <code class="kc">true</code><code class="o">);</code> <code class="n">internal</code><code class="o">.</code><code class="na">setSize</code><code class="o">(</code><code class="mi">180</code><code class="o">,</code> <code class="mi">180</code><code class="o">);</code> <code class="n">internal</code><code class="o">.</code><code class="na">setLocation</code><code class="o">(</code><code class="n">i</code> <code class="o">*</code> <code class="mi">20</code><code class="o">,</code> <code class="n">i</code> <code class="o">*</code> <code class="mi">20</code><code class="o">);</code> <code class="n">internal</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">desktop</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">internal</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">300</code><code class="o">,</code> <code class="mi">300</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">setContentPane</code><code class="o">(</code><code class="n">desktop</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>All we’ve done here is to create a <code class="literal">JDesktopPane</code> and add internal frames to it. When each <code class="literal">JInternalFrame</code> is constructed, we specify a window title. The four <code class="literal">true</code> values passed in the constructor specify that the new window should be resizable, closable, maximizable, and iconifiable.</p><p><code class="literal">JInternalFrame</code>s fire off their own set of events. However, <code class="literal">InternalFrameEvent</code> and <code class="literal">InternalFrameListener</code> are just like <code class="literal">WindowEvent</code> and <code class="literal">WindowListener</code> with the names changed. If you want to hear about a <code class="literal">JInternalFrame</code> closing, just register an <a id="I_indexterm18_id803769" class="indexterm"/><code class="literal">InternalFrameListener</code> and define the <a id="I_indexterm18_id803781" class="indexterm"/><code class="literal">internalFrameClosing()</code> method. This is just like defining the <code class="literal">windowClosing()</code> method for a <code class="literal">JFrame</code>.<a id="I_indexterm18_id803803" class="indexterm"/><a id="I_indexterm18_id803810" class="indexterm"/></p></div></body></html>