epubjs
Version:
Render ePub documents in the browser, across many devices
91 lines (86 loc) • 16.7 kB
HTML
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Borders</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="Borders"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-17-SECT-6"/>Borders</h1></div></div></div><p><a id="idx10972" class="indexterm"/> <a id="idx10990" class="indexterm"/> Any Swing component can have a decorative border. <code class="literal">JComponent</code> includes a method called <a id="I_indexterm17_id795802" class="indexterm"/><code class="literal">setBorder()</code> ; all you
have to do is call it, passing it an appropriate implementation of the
<a id="I_indexterm17_id795814" class="indexterm"/><code class="literal">Border</code> interface.</p><p>Swing provides many useful <code class="literal">Border</code>
implementations in the <a id="I_indexterm17_id795833" class="indexterm"/><code class="literal">javax.swing.border</code>
package. You could create an instance of one of these classes and pass it
to a component’s <code class="literal">setBorder()</code> method,
but there’s an even simpler technique.</p><p>The <code class="literal">BorderFactory</code> class creates
any kind of border for you using static “factory” methods. Creating and
setting a component’s border, then, is simple:</p><a id="I_17_tt1019"/><pre class="programlisting"> <code class="n">JLabel</code> <code class="n">labelTwo</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"I have an etched border."</code><code class="o">);</code>
<code class="n">labelTwo</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code><code class="n">BorderFactory</code><code class="o">.</code><code class="na">createEtchedBorder</code><code class="o">());</code></pre><p>Every component has a <code class="literal">setBorder()</code>
method, from simple labels and buttons right up to the fancy text and
table components that we cover in <a class="xref" href="ch18.html" title="Chapter 18. More Swing Components">Chapter 18</a>.</p><p><code class="literal">BorderFactory</code> is convenient, but
it does not offer every option of every border type. For example, if you
want to create a raised <a id="I_indexterm17_id795892" class="indexterm"/><code class="literal">EtchedBorder</code> instead of
the default lowered border, you’ll need to use <code class="literal">EtchedBorder</code>’s constructor, like this:</p><a id="I_17_tt1020"/><pre class="programlisting"> <code class="n">JLabel</code> <code class="n">labelTwo</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"I have a raised etched border."</code><code class="o">);</code>
<code class="n">labelTwo</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code> <code class="k">new</code> <code class="n">EtchedBorder</code><code class="o">(</code><code class="n">EtchedBorder</code><code class="o">.</code><code class="na">RAISED</code><code class="o">)</code> <code class="o">);</code></pre><p>The <code class="literal">Border</code> implementation classes
are listed and briefly described here:</p><div class="variablelist"><dl><dt><span class="term"><code class="literal">BevelBorder</code></span></dt><dd><p><a id="I_indexterm17_id795936" class="indexterm"/>This border draws raised or lowered beveled edges,
giving an illusion of depth.</p></dd><dt><span class="term"><code class="literal">SoftBevelBorder</code></span></dt><dd><p><a id="I_indexterm17_id795952" class="indexterm"/>This border is similar to <code class="literal">BevelBorder</code>, but thinner.</p></dd><dt><span class="term"><code class="literal">EmptyBorder</code></span></dt><dd><p><a id="I_indexterm17_id795972" class="indexterm"/>Doesn’t do any drawing, but does take up space. You
can use it to give a component a little breathing room in a crowded
user interface.</p></dd><dt><span class="term"><code class="literal">EtchedBorder</code></span></dt><dd><p>A lowered etched border gives the appearance of a rectangle
that has been chiseled into a piece of stone. A raised etched border
looks like it is standing out from the surface of the screen.</p></dd><dt><span class="term"><code class="literal">LineBorder</code></span></dt><dd><p><a id="I_indexterm17_id796001" class="indexterm"/>Draws a simple rectangle around a component. You can
specify the color and width of the line in <code class="literal">LineBorder</code>’s constructor.</p></dd><dt><span class="term"><code class="literal">MatteBorder</code></span></dt><dd><p><a id="I_indexterm17_id796023" class="indexterm"/>A souped-up version of <code class="literal">LineBorder</code>. You can create a <code class="literal">MatteBorder</code> with a certain color and
specify the size of the border on the left, top, right, and bottom
of the component. <code class="literal">MatteBorder</code>
also allows you to pass in an <code class="literal">Icon</code> that will be used to draw the border.
This could be an image (<code class="literal">ImageIcon</code>) or any other implementation of
the <code class="literal">Icon</code> interface.</p></dd><dt><span class="term"><code class="literal">TitledBorder</code></span></dt><dd><p><a id="I_indexterm17_id796072" class="indexterm"/>A regular border with a title. <code class="literal">TitledBorder</code> doesn’t actually draw a
border; it just draws a title in conjunction with another border
object. You can specify the locations of the title, its
justification, and its font. This border type is particularly useful
for grouping different sets of controls in a complicated
interface.</p></dd><dt><span class="term"><code class="literal">CompoundBorder</code></span></dt><dd><p><a id="I_indexterm17_id796098" class="indexterm"/>A border that contains two other borders. This is
especially handy if you want to enclose a component in an <code class="literal">EmptyBorder</code> and then put something
decorative around it, such as an <code class="literal">EtchedBorder</code> or a <code class="literal">MatteBorder</code>.</p></dd></dl></div><p>The following example shows off some different border types. It’s
only a sampler, though; many more border types are available. Furthermore,
the example only encloses labels with borders. You can put a border around
any component in Swing. The example is shown in <a class="xref" href="ch17s05.html#learnjava3-CHP-17-FIG-6" title="Figure 17-6. A bevy of borders">Figure 17-6</a>.</p><div class="figure"><a id="learnjava3-CHP-17-FIG-6"/><div class="figure-contents"><div class="mediaobject"><a id="I_17_tt1021"/><img src="httpatomoreillycomsourceoreillyimages1707658.png.jpg" alt="A bevy of borders"/></div></div><p class="title">Figure 17-6. A bevy of borders</p></div><p>Here is the source code:<a id="I_indexterm17_id796155" class="indexterm"/><a id="I_indexterm17_id796162" class="indexterm"/></p><a id="I_17_tt1022"/><pre class="programlisting"> <code class="c1">//file: Borders.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">Borders</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="c1">// create a JFrame to hold everything</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">"Borders"</code><code class="o">);</code>
<code class="c1">// Create labels with borders.</code>
<code class="kt">int</code> <code class="n">center</code> <code class="o">=</code> <code class="n">SwingConstants</code><code class="o">.</code><code class="na">CENTER</code><code class="o">;</code>
<code class="n">JLabel</code> <code class="n">labelOne</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"raised BevelBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">labelOne</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code>
<code class="n">BorderFactory</code><code class="o">.</code><code class="na">createBevelBorder</code><code class="o">(</code><code class="n">BevelBorder</code><code class="o">.</code><code class="na">RAISED</code><code class="o">));</code>
<code class="n">JLabel</code> <code class="n">labelTwo</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"EtchedBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">labelTwo</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code><code class="n">BorderFactory</code><code class="o">.</code><code class="na">createEtchedBorder</code><code class="o">());</code>
<code class="n">JLabel</code> <code class="n">labelThree</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"MatteBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">labelThree</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code>
<code class="n">BorderFactory</code><code class="o">.</code><code class="na">createMatteBorder</code><code class="o">(</code><code class="mi">10</code><code class="o">,</code> <code class="mi">10</code><code class="o">,</code> <code class="mi">10</code><code class="o">,</code> <code class="mi">10</code><code class="o">,</code> <code class="n">Color</code><code class="o">.</code><code class="na">pink</code><code class="o">));</code>
<code class="n">JLabel</code> <code class="n">labelFour</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"TitledBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">Border</code> <code class="n">etch</code> <code class="o">=</code> <code class="n">BorderFactory</code><code class="o">.</code><code class="na">createEtchedBorder</code><code class="o">();</code>
<code class="n">labelFour</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code>
<code class="n">BorderFactory</code><code class="o">.</code><code class="na">createTitledBorder</code><code class="o">(</code><code class="n">etch</code><code class="o">,</code> <code class="s">"Title"</code><code class="o">));</code>
<code class="n">JLabel</code> <code class="n">labelFive</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"TitledBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">Border</code> <code class="n">low</code> <code class="o">=</code> <code class="n">BorderFactory</code><code class="o">.</code><code class="na">createLoweredBevelBorder</code><code class="o">();</code>
<code class="n">labelFive</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code>
<code class="n">BorderFactory</code><code class="o">.</code><code class="na">createTitledBorder</code><code class="o">(</code><code class="n">low</code><code class="o">,</code> <code class="s">"Title"</code><code class="o">,</code>
<code class="n">TitledBorder</code><code class="o">.</code><code class="na">RIGHT</code><code class="o">,</code> <code class="n">TitledBorder</code><code class="o">.</code><code class="na">BOTTOM</code><code class="o">));</code>
<code class="n">JLabel</code> <code class="n">labelSix</code> <code class="o">=</code> <code class="k">new</code> <code class="n">JLabel</code><code class="o">(</code><code class="s">"CompoundBorder"</code><code class="o">,</code> <code class="n">center</code><code class="o">);</code>
<code class="n">Border</code> <code class="n">one</code> <code class="o">=</code> <code class="n">BorderFactory</code><code class="o">.</code><code class="na">createEtchedBorder</code><code class="o">();</code>
<code class="n">Border</code> <code class="n">two</code> <code class="o">=</code>
<code class="n">BorderFactory</code><code class="o">.</code><code class="na">createMatteBorder</code><code class="o">(</code><code class="mi">4</code><code class="o">,</code> <code class="mi">4</code><code class="o">,</code> <code class="mi">4</code><code class="o">,</code> <code class="mi">4</code><code class="o">,</code> <code class="n">Color</code><code class="o">.</code><code class="na">blue</code><code class="o">);</code>
<code class="n">labelSix</code><code class="o">.</code><code class="na">setBorder</code><code class="o">(</code><code class="n">BorderFactory</code><code class="o">.</code><code class="na">createCompoundBorder</code><code class="o">(</code><code class="n">one</code><code class="o">,</code> <code class="n">two</code><code class="o">));</code>
<code class="c1">// add components to the content pane</code>
<code class="n">Container</code> <code class="n">c</code> <code class="o">=</code> <code class="n">f</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">c</code><code class="o">.</code><code class="na">setLayout</code><code class="o">(</code><code class="k">new</code> <code class="n">GridLayout</code><code class="o">(</code><code class="mi">3</code><code class="o">,</code> <code class="mi">2</code><code class="o">));</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelOne</code><code class="o">);</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelTwo</code><code class="o">);</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelThree</code><code class="o">);</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelFour</code><code class="o">);</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelFive</code><code class="o">);</code>
<code class="n">c</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">labelSix</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">pack</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></div></body></html>