Материал: Портянкин И. Swing

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Управление пространством

405

страивает свои полосы прокрутки панель прокрутки JScrollPane. Числа для модели она либо выбирает по умолчанию (в зависимости от своих размеров и размеров прокручиваемого компонента), либо с помощью методов интерфейса Scrollable, если прокручиваемый компонент его реализует. В следующем примере мы проверим полосы прокрутки

вдействии:

//Scrollbars.java

//Полосы прокрутки JScrollBar import javax.swing.*;

import java.awt.*;

public class Scrollbars extends JFrame { public Scrollbars() {

super("Scrollbars"); setDefaultCloseOperation(EXIT_ON_CLOSE);

//создаем стандартную модель

BoundedRangeModel model =

new DefaultBoundedRangeModel(10, 40, 0, 100);

//пара полос прокрутки

JScrollBar scrollbar1 = new JScrollBar(

JScrollBar.HORIZONTAL);

JScrollBar scrollbar2 = new JScrollBar(

JScrollBar.VERTICAL);

//присоединяем модель scrollbar1.setModel(model); scrollbar2.setModel(model);

//добавляем компоненты add(scrollbar1, "South"); add(scrollbar2, "East");

//выводим окно на экран setSize(400, 300); setVisible(true);

}

public static void main(String[] args) { SwingUtilities.invokeLater(

new Runnable() {

public void run() { new Scrollbars(); } });

}

}

Здесь мы создаем пару полос прокрутки JScrollBar, одна из них будет горизонтальной, вторая — вертикальной. Данные для обеих полос будет поставлять стандартная модель DefaultBoundedRangeModel. Обратите внимание на ее значения: текущее значение равно 10, внутренний диапазон велик и равен 40 (как вы помните, внутренний диапазон отвечает за величину полосы прокрутки), а минимальное и максимальное значения равны

406

ГЛАВА 13

нулю и ста, соответственно. Благодаря разделению одной и той же модели полосы прокрутки будут работать синхронно.

Созданные полосы добавляются в окно, горизонтальная — на юг, вертикальная — на восток окна. Запустив программу с примером, вы увидите синхронную работу полос, связанных одной моделью, и оцените размер полосы, заданный большим внутренним диапазоном. Размер полосы, как можно видеть из изображения, относительный, и зависит от размера всей полосы прокрутки, то есть от внутреннего диапазона относительно всего диапазона модели.

Возможности настройки полос прокрутки этим не исчерпываются: вы можете также задать значения приращений для прокрутки на один элемент (при щелчке на кнопке полосы) и для прокрутки блоком (при щелчке на самой полосе). Впрочем, использовать полосы прокрутки при создании пользовательских интерфейсов приходится редко: с большинством задач подобного рода справляются ползунки. Как правило, полосы прокрутки требуются при создании собственных компонентов для специализированной прокрутки.

Резюме

После прочтения этой главы можно забыть о проблемах с нехваткой места в контейнере и не думать о слишком больших компонентах. Вспомогательные компоненты, с которыми мы познакомились, позволят решить любую проблему с размерами и пространством, и сделают это замечательно элегантно, не требуя от вас титанических усилий.

Глава 14. Стандартные диалоговые окна

Во всех современных графических системах имеется набор так называемых стандартных диалоговых окон. Это оформленные особым образом диалоговые окна, которые позволяют быстро выводить разнообразную информацию для пользователя (чаще всего всяческие сообщения, поступающие от приложений) или же получать от него некоторые наиболее распространенные типы данных. Использование стандартных диалоговых окон, во-первых, облегчает программирование вашего приложения (как правило, очень просто настроить стандартное диалоговое окно и вывести его на экран), вовторых, намного ускоряет процесс знакомства пользователя с интерфейсом, поскольку встречая стандартные диалоговые окна не только в вашем приложении, но и во многих других, он хорошо усваивает правила работы с ними.

Библиотека Swing не является исключением из общего правила — в ней представлен богатый выбор стандартных диалоговых окон, намного упрощающих и ускоряющих вывод простой информации и выбор наиболее часто встречающихся в графических приложениях форматов данных. Для вывода разнообразной полезной информации (как правило, сообщений о работе программы, ошибках и нестандартных ситуациях) и ввода несложных данных предназначен класс JOptionPane, частый «гость» любого приложения, созданного средствами Swing. Работа с ним обычно заключается в вызове одного из многочисленных статических методов, создающих и выводящих на экран модальное диалоговое окно стандартного вида (который определяется текущим менеджером внешнего вида и поведения). В таких диалоговых окнах вы можете выводить самую разнообразную информацию и при необходимости размещать в них дополнительные компоненты, тонко настраивая все аспекты их поведения и внешнего вида. С другой стороны, класс JOptionPane представляет собой просто еще один компонент, унаследованный от базового класса JComponent библиотеки Swing, так что вы можете работать с ним напрямую, как мы это делали с остальными компонентами Swing: создавать экземпляры класса JOptionPane и настраивать их свойства. С настроенным компонентом JOptionPane дальше можно поступать по-разному: размещать его в каких-либо контейнерах своего приложения или с помощью вспомогательных методов быстро выводить его в диалоговом окне подходящего вида.

Подавляющее большинство графических приложений так или иначе работают с файлами, даже если манипуляция файлами не входит в сферу их основных обязанностей. Поэтому наличие в Swing мощного средства для удобного выбора файлов — компонента JFileChooser — приходится весьма кстати. Как и в случае с классом JOptionPane, компонент JFileChooser, хотя и представляет собой обычный компонент (а точнее контейнер, в котором расположены несколько компонентов, списков и кнопок, «ведающих» выбором файлов), чаще всего выводится на экран с помощью легко настраиваемого модального диалогового окна. Компонент JFileChooser вы можете добавить в любое место своего пользовательского интерфейса. Он весьма гибок и позволит вам до мелочей настраивать внешний вид. При необходимости можно полностью изменить стандартное расположение входящих в него компонентов и добавить дополнительные элементы, такие как панели предварительного просмотра файлов. Сказанное о компоненте JFileChooser в полной мере относится и к компоненту JColorChooser, который, с одной стороны, «одним мановением руки» позволяет организовать удобный и наглядный выбор цвета в модальном

408

ГЛАВА 14

диалоговом окне, а с другой может играть роль обычного компонента, то есть вы можете настроить его свойства и добавить компонент в нужное место своего интерфейса.

У всех стандартных диалоговых окон Swing есть собственные UI-представители, которые отвечают за то, чтобы диалоговые окна выглядели подобающим образом в используемом приложением внешнем виде. Это особенно важно для внешних видов, имитирующих известные платформы, пользователи которых не должны ощущать разницы (по крайней мере, значительной) при переходе от «родных» приложений к Javaприложениям. Этому прекрасно служат стандартные диалоговые окна, хорошо известные пользователям .

Многоликий класс JOptionPane

С помощью одного только класса JOptionPane уже можно «состряпать» приличное приложение, настолько он разнообразен и столько всяческих операций по сбору и выводу данных позволяет проводить. Мы уже поняли, что JOptionPane представляет собой обычный компонент Swing, и работать с ним можно так же, как с другими компонентами, настроив и добавив в подходящее место своего контейнера. Выглядит экземпляр класса JOptionPane, даже настроенный самым экзотичным образом, всегда примерно так, как показано на рис. 14.1 (хотя значок может отсутствовать).

Область вывода сообщения и ввода данных

Значок

Командные кнопки

Рис. 14.1. Стандартное диалоговое окно

Впрочем, гораздо удобнее использовать статические методы класса JOptionPane, быстро настраивающие и выводящие на экран модальные диалоговые окна стандартного вида1. У класса JOptionPane целый букет таких методов, причем пользоваться ими, несмотря на все разнообразие, довольно просто, так как все они разительно похожи друг на друга и запомнить способы их вызова не сложно. Рассмотрим по порядку все возможности класса JOptionPane.

Вывод сообщений

Перегруженные статические методы с общим именем showMessageDialog() позволяют быстро сообщить пользователю некоторую информацию, как правило, довольно важную (модальное диалоговое окно подразумевает, что информация заслуживает хоть какого-то внимания пользователя, потому что приостанавливает работу основного окна приложения). Рассмотрим пример использования таких методов, а потом обсудим их подробнее:

1 По поводу модальных окон идут жаркие споры, и чрезмерное их использование действительно раздражает, так как они полностью блокируют основное окно приложения, а значит, отрывают пользователя от важных дел. Однако для действительно важных сообщений или вопросов модальные окна по-прежнему хороши.

Стандартные диалоговые окна

409

//MessageDialogs.java

//Методы JOptionPane для вывода соообщений import javax.swing.*;

import java.awt.event.*; import java.awt.*;

public class MessageDialogs extends JFrame { // этот значок выведем в одном из сообщений

private ImageIcon icon = new ImageIcon("question.gif"); public MessageDialogs() {

super("MessageDialogs"); setDefaultCloseOperation(EXIT_ON_CLOSE);

//кнопки, после щелчков на которых

//выводятся сообщения

JButton message1 = new JButton("2 параметра"); message1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(

MessageDialogs.this, "<html><h2>Привет!<br>HTML есть и здесь!");

}

});

JButton message2 = new JButton("4 параметра"); message2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(

MessageDialogs.this,new String[] { "Сообщение может быть", "записано массивом!" }, "Свой заголовок", JOptionPane.ERROR_MESSAGE);

}

});

JButton message3 = new JButton("5 параметров"); message3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(

MessageDialogs.this,

"Настроено все что можно", "Свой заголовок", JOptionPane.INFORMATION_MESSAGE, icon);

}

});

Источник: https://studfile.net/preview/15935977/