UNPKG

epubjs

Version:

Render ePub documents in the browser, across many devices

53 lines (49 loc) 8.53 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>The JScrollPane Class</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="The JScrollPane Class"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-17-SECT-10"/>The JScrollPane Class</h1></div></div></div><p><a id="idx10980" class="indexterm"/> <a id="idx10995" class="indexterm"/> We used <code class="literal">JScrollPane</code> earlier in this chapter without explaining much about it. In this section, we’ll remedy the situation.</p><p>A <code class="literal">JScrollPane</code> is a container that can hold one component. Said another way, a <code class="literal">JScrollPane</code><span class="emphasis"><em>wraps</em></span> another component. By default, if the wrapped component is larger than the <code class="literal">JScrollPane</code> itself, the <code class="literal">JScrollPane</code> supplies scrollbars. <code class="literal">JScrollPane</code> handles the events from the scrollbars and displays the appropriate portion of the contained component.</p><p>Technically, <code class="literal">JScrollPane</code> is a <code class="literal">Container</code>, but it’s a funny one. It has its own layout manager, which can’t be changed, and it accommodates only one component at a time. This isn’t really a limitation. If you want to put a lot of stuff in a <code class="literal">JScrollPane</code>, just collect your components in a <code class="literal">JPanel</code>, with whatever layout manager you like, and put that panel into the <code class="literal">JScrollPane</code>.</p><p>When you create a <code class="literal">JScrollPane</code>, you specify the conditions under which its scrollbars are displayed. This is called the <span class="emphasis"><em>scrollbar display policy</em></span>; a separate policy is used for the horizontal and vertical scrollbars. The following constants can be used to specify the policy for each of the scrollbars:</p><div class="variablelist"><dl><dt><span class="term"><code class="literal">HORIZONTAL_SCROLLBAR_AS_NEEDED<a id="I_indexterm17_id797178" class="indexterm"/></code><br/></span><span class="term"><code class="literal">VERTICAL_SCROLLBAR_AS_NEEDED</code></span></dt><dd><p><a id="I_indexterm17_id797191" class="indexterm"/>Displays a scrollbar only if the wrapped component doesn’t fit.</p></dd><dt><span class="term"><code class="literal">HORIZONTAL_SCROLLBAR_ALWAYS<a id="I_indexterm17_id797206" class="indexterm"/></code><br/></span><span class="term"><code class="literal">VERTICAL_SCROLLBAR_ALWAYS</code></span></dt><dd><p><a id="I_indexterm17_id797220" class="indexterm"/>Always shows a scrollbar, regardless of the contained component’s size.</p></dd><dt><span class="term"><code class="literal">HORIZONTAL_SCROLLBAR_NEVER<a id="I_indexterm17_id797234" class="indexterm"/></code><br/></span><span class="term"><code class="literal">VERTICAL_SCROLLBAR_NEVER</code></span></dt><dd><p><a id="I_indexterm17_id797248" class="indexterm"/>Never shows a scrollbar, even if the contained component won’t fit. If you use this policy, you should provide some other way to manipulate the <code class="literal">JScrollPane</code>.</p></dd></dl></div><p>By default, the policies are <code class="literal">HORIZONTAL_SCROLLBAR_AS_NEEDED</code> and <code class="literal">VERTICAL_SCROLLBAR_AS_NEEDED</code>.</p><p>Support for scrolling with mouse wheels is automatic as of Java 1.4. You do not have to do anything explicit in your application to get this to work.</p><p>The following example uses a <code class="literal">JScrollPane</code> to display a large image (see <a class="xref" href="ch17s08.html#learnjava3-CHP-17-FIG-9" title="Figure 17-9. The ScrollPaneFrame application">Figure 17-9</a>). The application itself is very simple; all we do is place the image in a <code class="literal">JLabel</code>, wrap a <code class="literal">JScrollPane</code> around it, and put the <code class="literal">JScrollPane</code> in a <code class="literal">JFrame</code>’s content pane.</p><div class="figure"><a id="learnjava3-CHP-17-FIG-9"/><div class="figure-contents"><div class="mediaobject"><a id="I_17_tt1033"/><img src="httpatomoreillycomsourceoreillyimages1707661.png.jpg" alt="The ScrollPaneFrame application"/></div></div><p class="title">Figure 17-9. The ScrollPaneFrame application</p></div><p>Here’s the code:</p><a id="I_17_tt1034"/><pre class="programlisting"> <code class="c1">//file: ScrollPaneFrame.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="kd">public</code> <code class="kd">class</code> <code class="nc">ScrollPaneFrame</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">String</code> <code class="n">filename</code> <code class="o">=</code> <code class="s">"Piazza di Spagna.jpg"</code><code class="o">;</code> <code class="k">if</code> <code class="o">(</code><code class="n">args</code><code class="o">.</code><code class="na">length</code> <code class="o">&gt;</code> <code class="mi">0</code><code class="o">)</code> <code class="n">filename</code> <code class="o">=</code> <code class="n">args</code><code class="o">[</code><code class="mi">0</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">"ScrollPaneFrame v1.0"</code><code class="o">);</code> <code class="n">JLabel</code> <code class="n">image</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code> <code class="k">new</code> <code class="n">ImageIcon</code><code class="o">(</code><code class="n">filename</code><code class="o">)</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="na">add</code><code class="o">(</code> <code class="k">new</code> <code class="n">JScrollPane</code><code class="o">(</code><code class="n">image</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">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>To hold the image, we have used a <code class="literal">JLabel</code> and <code class="literal">ImageIcon</code>. The <code class="literal">ImageIcon</code> class preloads the image using a <a id="I_indexterm17_id797379" class="indexterm"/><code class="literal">MediaTracker</code> and determines its dimensions. It’s also possible to have the <code class="literal">ImageIcon</code> show the image as it loads or to ask it for information on the status of loading the image. We’ll discuss image management in <a class="xref" href="ch21.html" title="Chapter 21. Working with Images and Other Media">Chapter 21</a>.<a id="I_indexterm17_id797403" class="indexterm"/><a id="I_indexterm17_id797410" class="indexterm"/></p></div></body></html>