epubjs
Version:
Render ePub documents in the browser, across many devices
58 lines (56 loc) • 10.2 kB
HTML
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>BoxLayout</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="BoxLayout"><div class="titlepage"><div><div><h1 class="title"><a id="learnjava3-CHP-19-SECT-4"/>BoxLayout</h1></div></div></div><p><a id="idx11045" class="indexterm"/> <a id="idx11065" class="indexterm"/> Most layout managers are part of the <a id="I_indexterm19_id805798" class="indexterm"/><code class="literal">java.awt</code> package and were
defined back when Java was first released. Swing adds a couple of new
general-purpose layout managers in the <a id="I_indexterm19_id805810" class="indexterm"/><code class="literal">javax.swing</code> package; one
is <code class="literal">BoxLayout</code>. This layout manager is
useful for creating simple toolbars or vertical button bars. It lays out
components in a single row or column. It is similar to <code class="literal">FlowLayout</code> except that it does not wrap
components into new rows.</p><p>Although you can use <code class="literal">BoxLayout</code>
directly, Swing includes a handy container called <code class="literal">Box</code> that takes care of the details for you.
Every <code class="literal">Box</code> uses <code class="literal">BoxLayout</code>, but you don’t really have to worry
about it; the <a id="I_indexterm19_id805859" class="indexterm"/><code class="literal">Box</code> class includes some
very useful methods for laying out components.</p><p>You can create a horizontal or vertical box using <code class="literal">Box</code>’s static methods.</p><a id="I_19_tt1113"/><pre class="programlisting"> <code class="n">Container</code> <code class="n">horizontalBox</code> <code class="o">=</code> <code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalBox</code><code class="o">();</code>
<code class="n">Container</code> <code class="n">verticalBox</code> <code class="o">=</code> <code class="n">Box</code><code class="o">.</code><code class="na">createVerticalBox</code><code class="o">();</code></pre><p>Once the <code class="literal">Box</code> is created, you can
<code class="literal">add()</code> components as usual:</p><a id="I_19_tt1114"/><pre class="programlisting"> <code class="n">Container</code> <code class="n">box</code> <code class="o">=</code> <code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalBox</code><code class="o">();</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"In the"</code><code class="o">));</code></pre><p><code class="literal">Box</code> includes several other static
methods that create special invisible components that can be used to guide
the <code class="literal">BoxLayout</code>. The first of these is
<span class="emphasis"><em>glue</em></span>; glue is really space between components in the
<code class="literal">Box</code>. When the <code class="literal">Box</code> is resized, glue expands or contracts as
more or less space is available. The other special invisible component
type is a <span class="emphasis"><em>strut</em></span>. Like glue, a strut represents space
between components, but it doesn’t resize.</p><p>The following example creates a horizontal <code class="literal">Box</code> (shown in <a class="xref" href="ch19s04.html#learnjava3-CHP-19-FIG-6" title="Figure 19-6. Using the Box class">Figure 19-6</a>) that includes both glue and struts.
Play around by resizing the window to see the effect of the glue and the
struts.</p><a id="I_19_tt1115"/><pre class="programlisting"> <code class="c1">//file: Boxer.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">Boxer</code> <code class="kd">extends</code> <code class="n">JPanel</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">"Boxer"</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">setSize</code><code class="o">(</code><code class="mi">250</code><code class="o">,</code> <code class="mi">250</code><code class="o">);</code>
<code class="n">frame</code><code class="o">.</code><code class="na">setLocation</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">Container</code> <code class="n">box</code> <code class="o">=</code> <code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalBox</code><code class="o">();</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalGlue</code><code class="o">());</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"In the"</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalGlue</code><code class="o">());</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"clearing"</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalStrut</code><code class="o">(</code><code class="mi">10</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"stands"</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalStrut</code><code class="o">(</code><code class="mi">10</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"a"</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalGlue</code><code class="o">());</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="k">new</code> <code class="n">JButton</code><code class="o">(</code><code class="s">"boxer"</code><code class="o">));</code>
<code class="n">box</code><code class="o">.</code><code class="na">add</code><code class="o">(</code><code class="n">Box</code><code class="o">.</code><code class="na">createHorizontalGlue</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="n">box</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">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 class="figure"><a id="learnjava3-CHP-19-FIG-6"/><div class="figure-contents"><div class="mediaobject"><a id="I_19_tt1116"/><img src="httpatomoreillycomsourceoreillyimages1707683.png.jpg" alt="Using the Box class"/></div></div><p class="title">Figure 19-6. Using the Box class</p></div><p>Components are added sequentially for display from left to right or
top to bottom with optional glue or strut constraints placed between them.
By default, components simply line up one after another with no space
between them. Glue acts like a spring, allowing its adjacent components to
move to occupy the space evenly. A strut imposes a fixed space between
adjacent components.<a id="I_indexterm19_id806002" class="indexterm"/><a id="I_indexterm19_id806010" class="indexterm"/></p></div></body></html>