UNPKG

epubjs

Version:

Render ePub documents in the browser, across many devices

58 lines (56 loc) 10.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>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>