JScrollPane — простой пример использования

Размер монитора и окон ограничен, а расположить там нужно очень много. Как это сделать разработчику? Тут приходит на помощь панель прокрутки. Весь «большой» контент располагают внутри панели, а панель предоставляет скроллбары для прокрутки «большого содержимого». В Java Swing такой панелью является JScrollPane. Именно на JScrollPane располагается контент, который невозможно вместить. Кроме того в приложениях могут существовать динамические компоненты, размер которых неизвестен заранее и может меняться со временем. К примеру, в окне может иметься список, количество записей которого может меняться. Для этого список необходимо поместить на JSсrollPane. Рассмотрим простой пример использования компонента JScrollPane и его настройки.

Алгоритм работы с панелью прокрутки очень простой. Сначала мы создаем компонент или компоненты, которые хотим расположить на панели. Если компонентов много, то необходимо их собрать на панель. Далее создается JScrollPane, которой в конструктор передается тот комопнент, который хотим разместить на JScrollPane. После создания панели прокрутки настраиваем её нужным образом. Ниже рассмотрим, какие настройки можно указывать у JScrollPane. И , наконец, последний шаг – добавление JScrollPane на форму или на какой-то другой контерйнер, где мы припасли место для панели прокрутки.

Как было сказано выше один из конструкторов JScrollPane имеет один параметр – компонент, который необходимо расположить на панели прокрутки. Думаю конструктор этот самый распространенный и часто используемый. За всё то время, котрое я использую Java Swing других я не использовал. JScrollPane, как и другие Swing комопненты, позволяет настраивать себя с помощью различных методов.

JScrollPane позволяет задавать поведение скроллбаров – полос прокрутки. Делается это при помощи методов setHorizontalScrollBarPolicy и setVerticalScrollBarPolicy. Соответственно первый метод задает поведение горизонтального скроллбара, второй – вертикального. Данным методам передаются константы, объявленные в классе JScrollPane и определяющие поведение. Для метода setHorizontalScrollBarPolicy это — HORIZONTAL_SCROLLBAR_ALWAYS (показывать полосу прокрутки всегда вне зависимости от размера содержимого панели прокрутки), HORIZONTAL_SCROLLBAR_AS_NEEDED (показывать полосу прокрутки только если это необходимо – размер содержимого больше размера панели прокрутки) и HORIZONTAL_SCROLLBAR_NEVER (никогда не показывать полосу прокрутки). Для метода setVerticalScrollBarPolicy – это VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED и VERTICAL_SCROLLBAR_NEVER. Действие этих констант аналогично горизонтальным. Пример использования данных методов можно будет увидеть в тестовом приложении.

А теперь по традиции пример тестового приложения, внешнйи вид которого представлен на рисунке ниже.

jscrollpane_using

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class TestFrame extends JFrame {

     private JTextField textField;

     private static final String TEXT = "You can get a blog started in less time than \n"
               + " it takes you to read this sentence. All you need is an email \n"
               + " address. You’ll get your own WordPress.com address \n"
               + " (like you.wordpress.com), a selection of great free \n"
               + " and customizable designs for your blog (we call them themes), \n"
               + " 3 gigabytes of file storage (that’s about 2,500 pictures!) \n"
               + " and all the other great features listed here. \n"
               + " You can blog as much as you want for free, \n"
               + " your blog can be public to the world or private \n"
               + " for just your friends, and our premium features \n"
               + "are completely optional.";

     public static void createGUI() {
          JFrame frame = new JFrame("Test frame");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          JPanel mainPanel = new JPanel();
          mainPanel.setLayout(new BorderLayout());

          JTextArea textArea = new JTextArea(10, 20);
          textArea.setText(TEXT);
          textArea.setCaretPosition(0);

          final JScrollPane scrollPane = new JScrollPane(textArea);
          mainPanel.add(scrollPane, BorderLayout.CENTER);

          JPanel panel = new JPanel();
          panel.setLayout(new FlowLayout());

          final JCheckBox checkBox1 = new JCheckBox("Show vertical scrollbar");
          checkBox1.setSelected(true);
          checkBox1.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                    if (checkBox1.isSelected()) {
                         scrollPane
                                   .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                    } else {
                         scrollPane
                                   .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
                    }
               }
          });
          panel.add(checkBox1);

          final JCheckBox checkBox2 = new JCheckBox("Show horizontal scrollbar");
          checkBox2.setSelected(true);
          checkBox2.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                    if (checkBox2.isSelected()) {
                         scrollPane
                                   .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
                    } else {
                         scrollPane
                                   .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
                    }
               }
          });
          panel.add(checkBox2);

          mainPanel.add(panel, BorderLayout.SOUTH);

          frame.getContentPane().add(mainPanel);
          frame.setPreferredSize(new Dimension(350, 200));
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
     }

     public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    createGUI();
               }
          });
     }
}

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: