<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSwing_JFC%2FScrollpane</id>
		<title>Java/Swing JFC/Scrollpane - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSwing_JFC%2FScrollpane"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Swing_JFC/Scrollpane&amp;action=history"/>
		<updated>2026-04-06T23:08:46Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Swing_JFC/Scrollpane&amp;diff=7395&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Swing_JFC/Scrollpane&amp;diff=7395&amp;oldid=prev"/>
				<updated>2010-06-01T06:42:14Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:42, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Swing_JFC/Scrollpane&amp;diff=7394&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Swing_JFC/Scrollpane&amp;diff=7394&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A simple JScrollPane demonstration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
Java Swing, 2nd Edition&lt;br /&gt;
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole&lt;br /&gt;
ISBN: 0-596-00408-7&lt;br /&gt;
Publisher: O&amp;quot;Reilly &lt;br /&gt;
*/&lt;br /&gt;
// ScrollDemo.java&lt;br /&gt;
//A simple JScrollPane demonstration.&lt;br /&gt;
//&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import javax.swing.ButtonGroup;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class ScrollDemo extends JFrame {&lt;br /&gt;
  JScrollPane scrollpane;&lt;br /&gt;
  public ScrollDemo() {&lt;br /&gt;
    super(&amp;quot;JScrollPane Demonstration&amp;quot;);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    init();&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void init() {&lt;br /&gt;
    JRadioButton form[][] = new JRadioButton[12][5];&lt;br /&gt;
    String counts[] = { &amp;quot;&amp;quot;, &amp;quot;0-1&amp;quot;, &amp;quot;2-5&amp;quot;, &amp;quot;6-10&amp;quot;, &amp;quot;11-100&amp;quot;, &amp;quot;101+&amp;quot; };&lt;br /&gt;
    String categories[] = { &amp;quot;Household&amp;quot;, &amp;quot;Office&amp;quot;, &amp;quot;Extended Family&amp;quot;,&lt;br /&gt;
        &amp;quot;Company (US)&amp;quot;, &amp;quot;Company (World)&amp;quot;, &amp;quot;Team&amp;quot;, &amp;quot;Will&amp;quot;,&lt;br /&gt;
        &amp;quot;Birthday Card List&amp;quot;, &amp;quot;High School&amp;quot;, &amp;quot;Country&amp;quot;, &amp;quot;Continent&amp;quot;,&lt;br /&gt;
        &amp;quot;Planet&amp;quot; };&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    p.setSize(600, 400);&lt;br /&gt;
    p.setLayout(new GridLayout(13, 6, 10, 0));&lt;br /&gt;
    for (int row = 0; row &amp;lt; 13; row++) {&lt;br /&gt;
      ButtonGroup bg = new ButtonGroup();&lt;br /&gt;
      for (int col = 0; col &amp;lt; 6; col++) {&lt;br /&gt;
        if (row == 0) {&lt;br /&gt;
          p.add(new JLabel(counts[col]));&lt;br /&gt;
        } else {&lt;br /&gt;
          if (col == 0) {&lt;br /&gt;
            p.add(new JLabel(categories[row - 1]));&lt;br /&gt;
          } else {&lt;br /&gt;
            form[row - 1][col - 1] = new JRadioButton();&lt;br /&gt;
            bg.add(form[row - 1][col - 1]);&lt;br /&gt;
            p.add(form[row - 1][col - 1]);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    scrollpane = new JScrollPane(p);&lt;br /&gt;
    getContentPane().add(scrollpane, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    new ScrollDemo();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== A simple JScrollPane for a JList component ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
Java Swing, 2nd Edition&lt;br /&gt;
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole&lt;br /&gt;
ISBN: 0-596-00408-7&lt;br /&gt;
Publisher: O&amp;quot;Reilly &lt;br /&gt;
*/&lt;br /&gt;
// ScrollList.java&lt;br /&gt;
//A simple JScrollPane for a JList component.&lt;br /&gt;
//&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JList;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class ScrollList extends JFrame {&lt;br /&gt;
  JScrollPane scrollpane;&lt;br /&gt;
  public ScrollList() {&lt;br /&gt;
    super(&amp;quot;JScrollPane Demonstration&amp;quot;);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    String categories[] = { &amp;quot;Household&amp;quot;, &amp;quot;Office&amp;quot;, &amp;quot;Extended Family&amp;quot;,&lt;br /&gt;
        &amp;quot;Company (US)&amp;quot;, &amp;quot;Company (World)&amp;quot;, &amp;quot;Team&amp;quot;, &amp;quot;Will&amp;quot;,&lt;br /&gt;
        &amp;quot;Birthday Card List&amp;quot;, &amp;quot;High School&amp;quot;, &amp;quot;Country&amp;quot;, &amp;quot;Continent&amp;quot;,&lt;br /&gt;
        &amp;quot;Planet&amp;quot; };&lt;br /&gt;
    JList list = new JList(categories);&lt;br /&gt;
    scrollpane = new JScrollPane(list);&lt;br /&gt;
    getContentPane().add(scrollpane, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    ScrollList sl = new ScrollList();&lt;br /&gt;
    sl.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Controlling the scrollbars in a JScrollPane ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
// : c14:JScrollPanes.java&lt;br /&gt;
// Controlling the scrollbars in a JScrollPane.&lt;br /&gt;
// &amp;lt;applet code=JScrollPanes width=300 height=725&amp;gt;&amp;lt;/applet&amp;gt;&lt;br /&gt;
// From &amp;quot;Thinking in Java, 3rd ed.&amp;quot; (c) Bruce Eckel 2002&lt;br /&gt;
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.BorderFactory;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.border.Border;&lt;br /&gt;
public class JScrollPanes extends JApplet {&lt;br /&gt;
  private JButton b1 = new JButton(&amp;quot;Text Area 1&amp;quot;), b2 = new JButton(&lt;br /&gt;
      &amp;quot;Text Area 2&amp;quot;), b3 = new JButton(&amp;quot;Replace Text&amp;quot;), b4 = new JButton(&lt;br /&gt;
      &amp;quot;Insert Text&amp;quot;);&lt;br /&gt;
  private JTextArea t1 = new JTextArea(&amp;quot;t1&amp;quot;, 1, 20), t2 = new JTextArea(&amp;quot;t2&amp;quot;,&lt;br /&gt;
      4, 20), t3 = new JTextArea(&amp;quot;t3&amp;quot;, 1, 20), t4 = new JTextArea(&amp;quot;t4&amp;quot;,&lt;br /&gt;
      10, 10), t5 = new JTextArea(&amp;quot;t5&amp;quot;, 4, 20), t6 = new JTextArea(&amp;quot;t6&amp;quot;,&lt;br /&gt;
      10, 10);&lt;br /&gt;
  private JScrollPane sp3 = new JScrollPane(t3,&lt;br /&gt;
      JScrollPane.VERTICAL_SCROLLBAR_NEVER,&lt;br /&gt;
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), sp4 = new JScrollPane(t4,&lt;br /&gt;
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,&lt;br /&gt;
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), sp5 = new JScrollPane(t5,&lt;br /&gt;
      JScrollPane.VERTICAL_SCROLLBAR_NEVER,&lt;br /&gt;
      JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS), sp6 = new JScrollPane(t6,&lt;br /&gt;
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,&lt;br /&gt;
      JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);&lt;br /&gt;
  class B1L implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      t5.append(t1.getText() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class B2L implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      t2.setText(&amp;quot;Inserted by Button 2&amp;quot;);&lt;br /&gt;
      t2.append(&amp;quot;: &amp;quot; + t1.getText());&lt;br /&gt;
      t5.append(t2.getText() + &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class B3L implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      String s = &amp;quot; Replacement &amp;quot;;&lt;br /&gt;
      t2.replaceRange(s, 3, 3 + s.length());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class B4L implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      t2.insert(&amp;quot; Inserted &amp;quot;, 10);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void init() {&lt;br /&gt;
    Container cp = getContentPane();&lt;br /&gt;
    cp.setLayout(new FlowLayout());&lt;br /&gt;
    // Create Borders for components:&lt;br /&gt;
    Border brd = BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK);&lt;br /&gt;
    t1.setBorder(brd);&lt;br /&gt;
    t2.setBorder(brd);&lt;br /&gt;
    sp3.setBorder(brd);&lt;br /&gt;
    sp4.setBorder(brd);&lt;br /&gt;
    sp5.setBorder(brd);&lt;br /&gt;
    sp6.setBorder(brd);&lt;br /&gt;
    // Initialize listeners and add components:&lt;br /&gt;
    b1.addActionListener(new B1L());&lt;br /&gt;
    cp.add(b1);&lt;br /&gt;
    cp.add(t1);&lt;br /&gt;
    b2.addActionListener(new B2L());&lt;br /&gt;
    cp.add(b2);&lt;br /&gt;
    cp.add(t2);&lt;br /&gt;
    b3.addActionListener(new B3L());&lt;br /&gt;
    cp.add(b3);&lt;br /&gt;
    b4.addActionListener(new B4L());&lt;br /&gt;
    cp.add(b4);&lt;br /&gt;
    cp.add(sp3);&lt;br /&gt;
    cp.add(sp4);&lt;br /&gt;
    cp.add(sp5);&lt;br /&gt;
    cp.add(sp6);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    run(new JScrollPanes(), 300, 725);&lt;br /&gt;
  }&lt;br /&gt;
  public static void run(JApplet applet, int width, int height) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.getContentPane().add(applet);&lt;br /&gt;
    frame.setSize(width, height);&lt;br /&gt;
    applet.init();&lt;br /&gt;
    applet.start();&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
} ///:~&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a scrollable list ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import javax.swing.JList;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JList list = new JList();&lt;br /&gt;
    JScrollPane scrollableList = new JScrollPane(list);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a JScrollPane Container ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    // Create a scrollable text area&lt;br /&gt;
    JTextArea textArea = new JTextArea();&lt;br /&gt;
    JScrollPane scrollableTextArea = new JScrollPane(textArea);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Customized ScrollPane ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.event.AdjustmentEvent;&lt;br /&gt;
import java.awt.event.AdjustmentListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.event.WindowListener;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollBar;&lt;br /&gt;
public class CustomScrollPane extends JPanel {&lt;br /&gt;
  protected JScrollBar verticalBar = new JScrollBar(JScrollBar.VERTICAL, 0, 0, 0, 0);&lt;br /&gt;
  protected JScrollBar horizontalBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 0, 0, 0);&lt;br /&gt;
  protected CustomViewport viewport = new CustomViewport();&lt;br /&gt;
  protected JComponent innerComponent;&lt;br /&gt;
  public CustomScrollPane(JComponent comp) {&lt;br /&gt;
    setLayout(null);&lt;br /&gt;
    &lt;br /&gt;
    add(viewport);&lt;br /&gt;
    innerComponent = comp;&lt;br /&gt;
    viewport.add(innerComponent);&lt;br /&gt;
    &lt;br /&gt;
    verticalBar.setUnitIncrement(5);&lt;br /&gt;
    add(verticalBar);&lt;br /&gt;
    horizontalBar.setUnitIncrement(5);&lt;br /&gt;
    add(horizontalBar);&lt;br /&gt;
    AdjustmentListener lst = new AdjustmentListener() {&lt;br /&gt;
      public void adjustmentValueChanged(AdjustmentEvent e) {&lt;br /&gt;
        viewport.doLayout();&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    verticalBar.addAdjustmentListener(lst);&lt;br /&gt;
    horizontalBar.addAdjustmentListener(lst);&lt;br /&gt;
  }&lt;br /&gt;
  public void doLayout() {&lt;br /&gt;
    Dimension size = getSize();&lt;br /&gt;
    Dimension innerComponentSize = innerComponent.getPreferredSize();&lt;br /&gt;
    Dimension verticalBarSize = verticalBar.getPreferredSize();&lt;br /&gt;
    Dimension horizontalBarSize = horizontalBar.getPreferredSize();&lt;br /&gt;
    int width = Math.max(size.width - verticalBarSize.width - 1, 0);&lt;br /&gt;
    int height = Math.max(size.height - horizontalBarSize.height - 1, 0);&lt;br /&gt;
    viewport.setBounds(0, 0, width, height);&lt;br /&gt;
    verticalBar.setBounds(width + 1, 0, verticalBarSize.width, height);&lt;br /&gt;
    horizontalBar.setBounds(0, height + 1, width, horizontalBarSize.height);&lt;br /&gt;
    int maxWidth = Math.max(innerComponentSize.width - width, 0);&lt;br /&gt;
    horizontalBar.setMaximum(maxWidth);&lt;br /&gt;
    horizontalBar.setBlockIncrement(maxWidth / 5);&lt;br /&gt;
    horizontalBar.setEnabled(maxWidth &amp;gt; 0);&lt;br /&gt;
    int maxHeight = Math.max(innerComponentSize.height - height, 0);&lt;br /&gt;
    verticalBar.setMaximum(maxHeight);&lt;br /&gt;
    verticalBar.setBlockIncrement(maxHeight / 5);&lt;br /&gt;
    verticalBar.setEnabled(maxHeight &amp;gt; 0);&lt;br /&gt;
    horizontalBar.setVisibleAmount(horizontalBar.getBlockIncrement());&lt;br /&gt;
    verticalBar.setVisibleAmount(verticalBar.getBlockIncrement());&lt;br /&gt;
  }&lt;br /&gt;
  public Dimension getPreferredSize() {&lt;br /&gt;
    Dimension innerComponmentSize = innerComponent.getPreferredSize();&lt;br /&gt;
    Dimension verticalBarSize = verticalBar.getPreferredSize();&lt;br /&gt;
    Dimension d2 = horizontalBar.getPreferredSize();&lt;br /&gt;
    Dimension horizontalBarSize = new Dimension(innerComponmentSize.width&lt;br /&gt;
        + verticalBarSize.width, innerComponmentSize.height + d2.height);&lt;br /&gt;
    return horizontalBarSize;&lt;br /&gt;
  }&lt;br /&gt;
  class CustomViewport extends JPanel {&lt;br /&gt;
    public CustomViewport(){&lt;br /&gt;
      setLayout(null);  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void doLayout() {&lt;br /&gt;
      Dimension innerComponentSize = innerComponent.getPreferredSize();&lt;br /&gt;
      int x = horizontalBar.getValue();&lt;br /&gt;
      int y = verticalBar.getValue();&lt;br /&gt;
      innerComponent.setBounds(-x, -y, innerComponentSize.width,&lt;br /&gt;
          innerComponentSize.height);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;JScrollBar Demo&amp;quot;);&lt;br /&gt;
    f.setSize(300, 250);&lt;br /&gt;
    ImageIcon icon = new ImageIcon(&amp;quot;earth.jpg&amp;quot;);&lt;br /&gt;
    CustomScrollPane myScrollPane = new CustomScrollPane(new JLabel(icon));&lt;br /&gt;
    f.getContentPane().add(myScrollPane);&lt;br /&gt;
    WindowListener wndCloser = new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    f.addWindowListener(wndCloser);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JScrollPane with row and column headers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
Java Swing, 2nd Edition&lt;br /&gt;
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole&lt;br /&gt;
ISBN: 0-596-00408-7&lt;br /&gt;
Publisher: O&amp;quot;Reilly &lt;br /&gt;
*/&lt;br /&gt;
// ScrollDemo2.java&lt;br /&gt;
//Another JScrollPane demonstration. This version activates some of the&lt;br /&gt;
//features of JScrollPane such as row and column headers.&lt;br /&gt;
//&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.ButtonGroup;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JOptionPane;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JViewport;&lt;br /&gt;
import javax.swing.ScrollPaneConstants;&lt;br /&gt;
public class ScrollDemo2 extends JFrame {&lt;br /&gt;
  JScrollPane scrollpane;&lt;br /&gt;
  public ScrollDemo2() {&lt;br /&gt;
    super(&amp;quot;JScrollPane Demonstration&amp;quot;);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    init();&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void init() {&lt;br /&gt;
    JRadioButton form[][] = new JRadioButton[12][5];&lt;br /&gt;
    String counts[] = { &amp;quot;&amp;quot;, &amp;quot;0-1&amp;quot;, &amp;quot;2-5&amp;quot;, &amp;quot;6-10&amp;quot;, &amp;quot;11-100&amp;quot;, &amp;quot;101+&amp;quot; };&lt;br /&gt;
    String categories[] = { &amp;quot;Household&amp;quot;, &amp;quot;Office&amp;quot;, &amp;quot;Extended Family&amp;quot;,&lt;br /&gt;
        &amp;quot;Company (US)&amp;quot;, &amp;quot;Company (World)&amp;quot;, &amp;quot;Team&amp;quot;, &amp;quot;Will&amp;quot;,&lt;br /&gt;
        &amp;quot;Birthday Card List&amp;quot;, &amp;quot;High School&amp;quot;, &amp;quot;Country&amp;quot;, &amp;quot;Continent&amp;quot;,&lt;br /&gt;
        &amp;quot;Planet&amp;quot; };&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    p.setSize(600, 400);&lt;br /&gt;
    p.setLayout(new GridLayout(13, 6, 10, 0));&lt;br /&gt;
    for (int row = 0; row &amp;lt; 13; row++) {&lt;br /&gt;
      ButtonGroup bg = new ButtonGroup();&lt;br /&gt;
      for (int col = 0; col &amp;lt; 6; col++) {&lt;br /&gt;
        if (row == 0) {&lt;br /&gt;
          p.add(new JLabel(counts[col]));&lt;br /&gt;
        } else {&lt;br /&gt;
          if (col == 0) {&lt;br /&gt;
            p.add(new JLabel(categories[row - 1]));&lt;br /&gt;
          } else {&lt;br /&gt;
            form[row - 1][col - 1] = new JRadioButton();&lt;br /&gt;
            bg.add(form[row - 1][col - 1]);&lt;br /&gt;
            p.add(form[row - 1][col - 1]);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    scrollpane = new JScrollPane(p);&lt;br /&gt;
    // Add in some JViewports for the column and row headers&lt;br /&gt;
    JViewport jv1 = new JViewport();&lt;br /&gt;
    jv1.setView(new JLabel(new ImageIcon(&amp;quot;columnlabel.gif&amp;quot;)));&lt;br /&gt;
    scrollpane.setColumnHeader(jv1);&lt;br /&gt;
    JViewport jv2 = new JViewport();&lt;br /&gt;
    jv2.setView(new JLabel(new ImageIcon(&amp;quot;rowlabel.gif&amp;quot;)));&lt;br /&gt;
    scrollpane.setRowHeader(jv2);&lt;br /&gt;
    // And throw in an information button&lt;br /&gt;
    JButton jb1 = new JButton(new ImageIcon(&amp;quot;question.gif&amp;quot;));&lt;br /&gt;
    jb1.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent ae) {&lt;br /&gt;
        JOptionPane.showMessageDialog(null,&lt;br /&gt;
            &amp;quot;This is an Active Corner!&amp;quot;, &amp;quot;Information&amp;quot;,&lt;br /&gt;
            JOptionPane.INFORMATION_MESSAGE);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    scrollpane.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, jb1);&lt;br /&gt;
    getContentPane().add(scrollpane, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    new ScrollDemo2();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JViewport: Move and View  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
Definitive Guide to Swing for Java 2, Second Edition&lt;br /&gt;
By John Zukowski     &lt;br /&gt;
ISBN: 1-893115-78-X&lt;br /&gt;
Publisher: APress&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.ActionMap;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.InputMap;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JViewport;&lt;br /&gt;
import javax.swing.KeyStroke;&lt;br /&gt;
public class MoveViewSample {&lt;br /&gt;
  public static final int INCREASE = 0; // direction&lt;br /&gt;
  public static final int DECREASE = 1; // direction&lt;br /&gt;
  public static final int X_AXIS = 0; // axis&lt;br /&gt;
  public static final int Y_AXIS = 1; // axis&lt;br /&gt;
  public static final int UNIT = 0; // type&lt;br /&gt;
  public static final int BLOCK = 1; // type&lt;br /&gt;
  static class MoveAction extends AbstractAction {&lt;br /&gt;
    JViewport viewport;&lt;br /&gt;
    int direction;&lt;br /&gt;
    int axis;&lt;br /&gt;
    int type;&lt;br /&gt;
    public MoveAction(JViewport viewport, int direction, int axis, int type) {&lt;br /&gt;
      if (viewport == null) {&lt;br /&gt;
        throw new IllegalArgumentException(&lt;br /&gt;
            &amp;quot;null viewport not permitted&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      this.viewport = viewport;&lt;br /&gt;
      this.direction = direction;&lt;br /&gt;
      this.axis = axis;&lt;br /&gt;
      this.type = type;&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
      Dimension extentSize = viewport.getExtentSize();&lt;br /&gt;
      int horizontalMoveSize = 0;&lt;br /&gt;
      int verticalMoveSize = 0;&lt;br /&gt;
      if (axis == X_AXIS) {&lt;br /&gt;
        if (type == UNIT) {&lt;br /&gt;
          horizontalMoveSize = 1;&lt;br /&gt;
        } else { // type == BLOCK&lt;br /&gt;
          horizontalMoveSize = extentSize.width;&lt;br /&gt;
        }&lt;br /&gt;
      } else { // axis == Y_AXIS&lt;br /&gt;
        if (type == UNIT) {&lt;br /&gt;
          verticalMoveSize = 1;&lt;br /&gt;
        } else { // type == BLOCK&lt;br /&gt;
          verticalMoveSize = extentSize.height;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (direction == DECREASE) {&lt;br /&gt;
        horizontalMoveSize = -horizontalMoveSize;&lt;br /&gt;
        verticalMoveSize = -verticalMoveSize;&lt;br /&gt;
      }&lt;br /&gt;
      // Translate origin by some amount&lt;br /&gt;
      Point origin = viewport.getViewPosition();&lt;br /&gt;
      origin.x += horizontalMoveSize;&lt;br /&gt;
      origin.y += verticalMoveSize;&lt;br /&gt;
      // set new viewing origin&lt;br /&gt;
      viewport.setViewPosition(origin);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;JViewport Sample&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Icon icon = new ImageIcon(&amp;quot;dog.jpg&amp;quot;);&lt;br /&gt;
    JLabel dogLabel = new JLabel(icon);&lt;br /&gt;
    JViewport viewport = new JViewport();&lt;br /&gt;
    viewport.setView(dogLabel);&lt;br /&gt;
    InputMap inputMap = viewport&lt;br /&gt;
        .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);&lt;br /&gt;
    ActionMap actionMap = viewport.getActionMap();&lt;br /&gt;
    // Up key moves view up unit&lt;br /&gt;
    Action upKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, UNIT);&lt;br /&gt;
    KeyStroke upKey = KeyStroke.getKeyStroke(&amp;quot;UP&amp;quot;);&lt;br /&gt;
    inputMap.put(upKey, &amp;quot;up&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;up&amp;quot;, upKeyAction);&lt;br /&gt;
    // Down key moves view down unit&lt;br /&gt;
    Action downKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, UNIT);&lt;br /&gt;
    KeyStroke downKey = KeyStroke.getKeyStroke(&amp;quot;DOWN&amp;quot;);&lt;br /&gt;
    inputMap.put(downKey, &amp;quot;down&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;down&amp;quot;, downKeyAction);&lt;br /&gt;
    // Left key moves view left unit&lt;br /&gt;
    Action leftKeyAction = new MoveAction(viewport, DECREASE, X_AXIS, UNIT);&lt;br /&gt;
    KeyStroke leftKey = KeyStroke.getKeyStroke(&amp;quot;LEFT&amp;quot;);&lt;br /&gt;
    inputMap.put(leftKey, &amp;quot;left&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;left&amp;quot;, leftKeyAction);&lt;br /&gt;
    // Right key moves view right unit&lt;br /&gt;
    Action rightKeyAction = new MoveAction(viewport, INCREASE, X_AXIS, UNIT);&lt;br /&gt;
    KeyStroke rightKey = KeyStroke.getKeyStroke(&amp;quot;RIGHT&amp;quot;);&lt;br /&gt;
    inputMap.put(rightKey, &amp;quot;right&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;right&amp;quot;, rightKeyAction);&lt;br /&gt;
    // PgUp key moves view up block&lt;br /&gt;
    Action pgUpKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, BLOCK);&lt;br /&gt;
    KeyStroke pgUpKey = KeyStroke.getKeyStroke(&amp;quot;PAGE_UP&amp;quot;);&lt;br /&gt;
    inputMap.put(pgUpKey, &amp;quot;pgUp&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;pgUp&amp;quot;, pgUpKeyAction);&lt;br /&gt;
    // PgDn key moves view down block&lt;br /&gt;
    Action pgDnKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, BLOCK);&lt;br /&gt;
    KeyStroke pgDnKey = KeyStroke.getKeyStroke(&amp;quot;PAGE_DOWN&amp;quot;);&lt;br /&gt;
    inputMap.put(pgDnKey, &amp;quot;pgDn&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;pgDn&amp;quot;, pgDnKeyAction);&lt;br /&gt;
    // Shift-PgUp key moves view left block&lt;br /&gt;
    Action shiftPgUpKeyAction = new MoveAction(viewport, DECREASE, X_AXIS,&lt;br /&gt;
        BLOCK);&lt;br /&gt;
    KeyStroke shiftPgUpKey = KeyStroke.getKeyStroke(&amp;quot;shift PAGE_UP&amp;quot;);&lt;br /&gt;
    inputMap.put(shiftPgUpKey, &amp;quot;shiftPgUp&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;shiftPgUp&amp;quot;, shiftPgUpKeyAction);&lt;br /&gt;
    // Shift-PgDn key moves view right block&lt;br /&gt;
    Action shiftPgDnKeyAction = new MoveAction(viewport, INCREASE, X_AXIS,&lt;br /&gt;
        BLOCK);&lt;br /&gt;
    KeyStroke shiftPgDnKey = KeyStroke.getKeyStroke(&amp;quot;shift PAGE_DOWN&amp;quot;);&lt;br /&gt;
    inputMap.put(shiftPgDnKey, &amp;quot;shiftPgDn&amp;quot;);&lt;br /&gt;
    actionMap.put(&amp;quot;shiftPgDn&amp;quot;, shiftPgDnKeyAction);&lt;br /&gt;
    Container contentPane = frame.getContentPane();&lt;br /&gt;
    contentPane.add(viewport, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 200);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scrolling Programmatically ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Insets;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.event.WindowListener;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JViewport;&lt;br /&gt;
import javax.swing.event.ChangeEvent;&lt;br /&gt;
import javax.swing.event.ChangeListener;&lt;br /&gt;
public class ButtonScroll extends JFrame {&lt;br /&gt;
  protected JViewport viewport;&lt;br /&gt;
  protected JButton upButton;&lt;br /&gt;
  protected JButton downButton;&lt;br /&gt;
  protected JButton leftButton;&lt;br /&gt;
  protected JButton rightButton;&lt;br /&gt;
  protected int pgVertical;&lt;br /&gt;
  protected int pgHorzontal;&lt;br /&gt;
  public ButtonScroll() {&lt;br /&gt;
    super(&amp;quot;Scrolling Programmatically&amp;quot;);&lt;br /&gt;
    setSize(400, 400);&lt;br /&gt;
    getContentPane().setLayout(new BorderLayout());&lt;br /&gt;
    ImageIcon shuttle = new ImageIcon(&amp;quot;largejexpLogo.GIF&amp;quot;);&lt;br /&gt;
    pgVertical = shuttle.getIconHeight() / 5;&lt;br /&gt;
    pgHorzontal = shuttle.getIconWidth() / 5;&lt;br /&gt;
    JLabel lbl = new JLabel(shuttle);&lt;br /&gt;
    viewport = new JViewport();&lt;br /&gt;
    viewport.setView(lbl);&lt;br /&gt;
    viewport.addChangeListener(new ChangeListener() {&lt;br /&gt;
      public void stateChanged(ChangeEvent e) {&lt;br /&gt;
        enableButtons(ButtonScroll.this.viewport.getViewPosition());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    getContentPane().add(viewport, BorderLayout.CENTER);&lt;br /&gt;
    JPanel pv = new JPanel(new BorderLayout());&lt;br /&gt;
    upButton = createButton(&amp;quot;up&amp;quot;, &amp;quot;u&amp;quot;);&lt;br /&gt;
    ActionListener lst = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        movePanel(0, -1);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    upButton.addActionListener(lst);&lt;br /&gt;
    pv.add(upButton, BorderLayout.NORTH);&lt;br /&gt;
    downButton = createButton(&amp;quot;down&amp;quot;, &amp;quot;d&amp;quot;);&lt;br /&gt;
    lst = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        movePanel(0, 1);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    downButton.addActionListener(lst);&lt;br /&gt;
    pv.add(downButton, BorderLayout.SOUTH);&lt;br /&gt;
    getContentPane().add(pv, BorderLayout.EAST);&lt;br /&gt;
    JPanel ph = new JPanel(new BorderLayout());&lt;br /&gt;
    leftButton = createButton(&amp;quot;left&amp;quot;, &amp;quot;l&amp;quot;);&lt;br /&gt;
    lst = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        movePanel(-1, 0);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    leftButton.addActionListener(lst);&lt;br /&gt;
    ph.add(leftButton, BorderLayout.WEST);&lt;br /&gt;
    rightButton = createButton(&amp;quot;right&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    lst = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        movePanel(1, 0);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    rightButton.addActionListener(lst);&lt;br /&gt;
    ph.add(rightButton, BorderLayout.EAST);&lt;br /&gt;
    getContentPane().add(ph, BorderLayout.SOUTH);&lt;br /&gt;
    WindowListener wndCloser = new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    addWindowListener(wndCloser);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
    movePanel(0, 0);&lt;br /&gt;
  }&lt;br /&gt;
  protected JButton createButton(String name, char mnemonics) {&lt;br /&gt;
    JButton btn = new JButton(name );&lt;br /&gt;
    btn.setToolTipText(&amp;quot;Move &amp;quot; + name);&lt;br /&gt;
    btn.setBorderPainted(false);&lt;br /&gt;
    btn.setMargin(new Insets(0, 0, 0, 0));&lt;br /&gt;
    btn.setContentAreaFilled(false);&lt;br /&gt;
    btn.setMnemonic(mnemonics);&lt;br /&gt;
    return btn;&lt;br /&gt;
  }&lt;br /&gt;
  protected void movePanel(int xmove, int ymove) {&lt;br /&gt;
    Point pt = viewport.getViewPosition();&lt;br /&gt;
    pt.x += pgHorzontal * xmove;&lt;br /&gt;
    pt.y += pgVertical * ymove;&lt;br /&gt;
    pt.x = Math.max(0, pt.x);&lt;br /&gt;
    pt.x = Math.min(getMaxXExtent(), pt.x);&lt;br /&gt;
    pt.y = Math.max(0, pt.y);&lt;br /&gt;
    pt.y = Math.min(getMaxYExtent(), pt.y);&lt;br /&gt;
    viewport.setViewPosition(pt);&lt;br /&gt;
    enableButtons(pt);&lt;br /&gt;
  }&lt;br /&gt;
  protected void enableButtons(Point pt) {&lt;br /&gt;
    if (pt.x == 0)&lt;br /&gt;
      enableComponent(leftButton, false);&lt;br /&gt;
    else&lt;br /&gt;
      enableComponent(leftButton, true);&lt;br /&gt;
    if (pt.x &amp;gt;= getMaxXExtent())&lt;br /&gt;
      enableComponent(rightButton, false);&lt;br /&gt;
    else&lt;br /&gt;
      enableComponent(rightButton, true);&lt;br /&gt;
    if (pt.y == 0)&lt;br /&gt;
      enableComponent(upButton, false);&lt;br /&gt;
    else&lt;br /&gt;
      enableComponent(upButton, true);&lt;br /&gt;
    if (pt.y &amp;gt;= getMaxYExtent())&lt;br /&gt;
      enableComponent(downButton, false);&lt;br /&gt;
    else&lt;br /&gt;
      enableComponent(downButton, true);&lt;br /&gt;
  }&lt;br /&gt;
  protected void enableComponent(JComponent c, boolean b) {&lt;br /&gt;
    if (c.isEnabled() != b)&lt;br /&gt;
      c.setEnabled(b);&lt;br /&gt;
  }&lt;br /&gt;
  protected int getMaxXExtent() {&lt;br /&gt;
    return viewport.getView().getWidth() - viewport.getWidth();&lt;br /&gt;
  }&lt;br /&gt;
  protected int getMaxYExtent() {&lt;br /&gt;
    return viewport.getView().getHeight() - viewport.getHeight();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String argv[]) {&lt;br /&gt;
    new ButtonScroll();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scrollpane ruler ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class HeaderDemo extends JFrame {&lt;br /&gt;
  private JLabel label = new JLabel(new ImageIcon(&amp;quot;largejexpLogo.gif&amp;quot;));&lt;br /&gt;
  public HeaderDemo() {&lt;br /&gt;
    super(&amp;quot;JScrollPane Demo&amp;quot;);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(label);&lt;br /&gt;
    JLabel[] corners = new JLabel[4];&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      corners[i] = new JLabel();&lt;br /&gt;
      corners[i].setBackground(Color.white);&lt;br /&gt;
      corners[i].setOpaque(true);&lt;br /&gt;
    }&lt;br /&gt;
    JLabel rowheader = new JLabel() {&lt;br /&gt;
      public void paintComponent(Graphics g) {&lt;br /&gt;
        super.paintComponent(g);&lt;br /&gt;
        Rectangle rect = g.getClipBounds();&lt;br /&gt;
        for (int i = 50 - (rect.y % 50); i &amp;lt; rect.height; i += 50) {&lt;br /&gt;
          g.drawLine(0, rect.y + i, 3, rect.y + i);&lt;br /&gt;
          g.drawString(&amp;quot;&amp;quot; + (rect.y + i), 6, rect.y + i + 3);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      public Dimension getPreferredSize() {&lt;br /&gt;
        return new Dimension(25, (int) label.getPreferredSize()&lt;br /&gt;
            .getHeight());&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    rowheader.setBackground(Color.white);&lt;br /&gt;
    rowheader.setOpaque(true);&lt;br /&gt;
    JLabel columnheader = new JLabel() {&lt;br /&gt;
      public void paintComponent(Graphics g) {&lt;br /&gt;
        super.paintComponent(g);&lt;br /&gt;
        Rectangle r = g.getClipBounds();&lt;br /&gt;
        for (int i = 50 - (r.x % 50); i &amp;lt; r.width; i += 50) {&lt;br /&gt;
          g.drawLine(r.x + i, 0, r.x + i, 3);&lt;br /&gt;
          g.drawString(&amp;quot;&amp;quot; + (r.x + i), r.x + i - 10, 16);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      public Dimension getPreferredSize() {&lt;br /&gt;
        return new Dimension((int) label.getPreferredSize().getWidth(),&lt;br /&gt;
            25);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    columnheader.setBackground(Color.white);&lt;br /&gt;
    columnheader.setOpaque(true);&lt;br /&gt;
    scrollPane.setRowHeaderView(rowheader);&lt;br /&gt;
    scrollPane.setColumnHeaderView(columnheader);&lt;br /&gt;
    scrollPane.setCorner(JScrollPane.LOWER_LEFT_CORNER, corners[0]);&lt;br /&gt;
    scrollPane.setCorner(JScrollPane.LOWER_RIGHT_CORNER, corners[1]);&lt;br /&gt;
    scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, corners[2]);&lt;br /&gt;
    scrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER, corners[3]);&lt;br /&gt;
    getContentPane().add(scrollPane);&lt;br /&gt;
    setSize(400, 300);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new HeaderDemo();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ScrollPane Sample  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class ScrollSample {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    String title = (args.length == 0 ? &amp;quot;JScrollPane Sample&amp;quot; : args[0]);&lt;br /&gt;
    JFrame frame = new JFrame(title);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Icon icon = new ImageIcon(&amp;quot;dog.jpg&amp;quot;);&lt;br /&gt;
    JLabel dogLabel = new JLabel(icon);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane();&lt;br /&gt;
    scrollPane.setViewportView(dogLabel);&lt;br /&gt;
    //    scrollPane.getViewport().setView(dogLabel);&lt;br /&gt;
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 200);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ScrollPane with image ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
public class ScrollPaneDemo extends JFrame {&lt;br /&gt;
  public ScrollPaneDemo() {&lt;br /&gt;
    super(&amp;quot;JScrollPane Demo&amp;quot;);&lt;br /&gt;
    ImageIcon ii = new ImageIcon(&amp;quot;largejexpLogo.jpg&amp;quot;);&lt;br /&gt;
    JScrollPane jsp = new JScrollPane(new JLabel(ii));&lt;br /&gt;
    getContentPane().add(jsp);&lt;br /&gt;
    setSize(300, 250);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new ScrollPaneDemo();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Watermark JScrollPane ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
Swing Hacks Tips and Tools for Killer GUIs&lt;br /&gt;
By Joshua Marinacci, Chris Adamson&lt;br /&gt;
First Edition June 2005  &lt;br /&gt;
Series: Hacks&lt;br /&gt;
ISBN: 0-596-00907-0&lt;br /&gt;
Pages: 542&lt;br /&gt;
website: http://www.oreilly.ru/catalog/swinghks/&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.TexturePaint;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.imageio.ImageIO;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JViewport;&lt;br /&gt;
public class ScrollPaneWatermark extends JViewport {&lt;br /&gt;
  BufferedImage fgimage, bgimage;&lt;br /&gt;
  TexturePaint texture;&lt;br /&gt;
  public ScrollPaneWatermark() {&lt;br /&gt;
    super();&lt;br /&gt;
    // setOpaque(false);&lt;br /&gt;
  }&lt;br /&gt;
  public void setBackgroundTexture(URL url) throws IOException {&lt;br /&gt;
    bgimage = ImageIO.read(url);&lt;br /&gt;
    Rectangle rect = new Rectangle(0, 0, bgimage.getWidth(null), bgimage.getHeight(null));&lt;br /&gt;
    texture = new TexturePaint(bgimage, rect);&lt;br /&gt;
  }&lt;br /&gt;
  public void setForegroundBadge(URL url) throws IOException {&lt;br /&gt;
    fgimage = ImageIO.read(url);&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    // do the superclass behavior first&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    // paint the texture&lt;br /&gt;
    if (texture != null) {&lt;br /&gt;
      Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
      g2.setPaint(texture);&lt;br /&gt;
      g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void paintChildren(Graphics g) {&lt;br /&gt;
    super.paintChildren(g);&lt;br /&gt;
    if (fgimage != null) {&lt;br /&gt;
      g.drawImage(fgimage, getWidth() - fgimage.getWidth(null), 0, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void setView(JComponent view) {&lt;br /&gt;
    view.setOpaque(false);&lt;br /&gt;
    super.setView(view);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    JTextArea ta = new JTextArea();&lt;br /&gt;
    for (int i = 0; i &amp;lt; 1000; i++) {&lt;br /&gt;
      ta.append(Integer.toString(i) + &amp;quot;  &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    ta.setLineWrap(true);&lt;br /&gt;
    ta.setWrapStyleWord(true);&lt;br /&gt;
    // ta.setOpaque(false);&lt;br /&gt;
    ScrollPaneWatermark watermark = new ScrollPaneWatermark();&lt;br /&gt;
    watermark.setBackgroundTexture(new File(&amp;quot;background.jpg&amp;quot;).toURL());&lt;br /&gt;
    watermark.setForegroundBadge(new File(&amp;quot;foreground.png&amp;quot;).toURL());&lt;br /&gt;
    watermark.setView(ta);&lt;br /&gt;
    JScrollPane scroll = new JScrollPane();&lt;br /&gt;
    scroll.setViewport(watermark);&lt;br /&gt;
    frame.getContentPane().add(scroll);&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setSize(600, 600);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>