□ add(Component comp) — добавляет компонент comp в конец списка компонентов, лежащих на панели;
□ add(Component comp, Object constraints) — добавляет компонент comp в конец списка компонентов, лежащих на панели, и передает менеджеру размещения параметры constraints, суть которых зависит от типа менеджера;
□ add (Component comp, int ind) - вставляет компонент comp в указанную позицию ind
списка компонентов панели;
□ add(Component comp, Object constraints, int ind) — содержит все эти параметры.
Класс JScrollPane содержит один компонент, обеспечивая прокрутку его содержимого и снабжая при необходимости линейками прокрутки. Это удобно для текстовой области JTextArea, для таблиц JTable, списков, изображений и других компонентов, чье содержимое не умещается в окне компонента. Возможность прокрутки не встроена в эти компоненты, чтобы можно было легко отказаться от нее в тех случаях, когда содержимое компонента не должно прокручиваться, но они реализуют интерфейс Scrollable, описывающий методы предоставления информации линейкам прокрутки.
Компонент помещается на панель прокрутки сразу же при ее создании конструктором
JScrollPane(Component) или позднее методом setViewportView(Component). Полосы прокрутки могут всегда находиться на экране, появляться при необходимости или не появляться вообще. Это определяется методами:
void setVerticalScrollBarPolicy(int); void setHorizontalScrollBarPolicy(int);
Аргументом первого метода служит одна из констант класса JScrollPane:
□ vertical_scrollbar_always;
□ vertical_scrollbar_as_needed;
□ VERTICAL_SCROLLBAR_NEVER,
а второго — одна из констант этого же класса:
□ horizontal_scrollbar_always;
□ horizontal_scrollbar_as_needed;
□ HORIZ ONTAL_S CROLLBAR_NEVER.
Точнее говоря, эти и другие константы собраны в интерфейсе ScrollPaneConstants, реализованном классом JScrollPane.
Панель прокрутки имеет сложное строение. На самом деле кроме своего содержимого и двух полос прокрутки она может содержать еще шесть компонентов: заголовок, устанавливаемый методом setColumnHeaderView(Component), столбец слева, задаваемый методом setRowHeaderView (Component), и четыре компонента по углам, размещаемые методом setCorner (String, Component), применение которого можно посмотреть в листинге 14.6. Все это показано на рис. 14.6, который нарисован программой листинга 14.6. Размещением всех девяти компонентов занимается специально разработанный для этого менеджер размещения ScrollPaneLayout. Он жестко определяет место и размер каждого дополнительного компонента. К панели прокрутки, как ко всякому контейнеру, разрешается применить другой менеджер размещения методом setLayout(LayoutManager), но новый менеджер может быть только расширением менеджера размещения
ScrollPaneLayout.
Листинг 14.6. Компоненты панели прокрутки
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class ScrollComps extends JFrame{
ScrollComps(){
super(" Компоненты панели прокрутки"); setLayout(new FlowLayout());
JScrollPane sp = new JScrollPane(new JTextArea(5,30));
sp.setPreferredSize(new Dimension(200, 200));
sp.setCorner(JScrollPane.LOWER LEFT CORNER, new JLabel(" LL")); sp.setCorner(JScrollPane.LOWER RIGHT CORNER, new JLabel("LR")); sp.setCorner(JScrollPane.UPPER LEFT CORNER, new JLabel(" UL")); sp.setCorner(JScrollPane.UPPER RIGHT CORNER, new JLabel("UR"));
JLabel lh = new JLabel(" Header"); lh.setBorder(BorderFactory.createEtchedBorder()); sp.setColumnHeaderView(lh);
JLabel lr = new JLabel("Row");
lr.setBorder(BorderFactory.createEtchedBorder()); sp.setRowHeaderView(lr);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); sp.setViewportBorder(BorderFactory.createEtchedBorder());
add(sp);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT ON CLOSE); setVisible(true);
}
public static void main(String[] args){ new ScrollComps();
}
}
Рис. 14.6. Компоненты панели прокрутки |
Видимая часть компонента, находящегося на панели прокрутки, а также заголовок и столбец слева представлены экземплярами класса JViewport. Задача этого класса — выбрать участок компонента и быстро показать его в "смотровом окне" (viewport), а также обеспечить быструю и правильную прокрутку компонента. Поэтому компонент JViewport может содержать только один компонент, расположением которого занимается специально разработанный менеджер размещения viewportLayout. Этот менеджер "растягивает" размещаемую область компонента до размеров смотрового окна.
В последнее время большое распространение получила мышь с колесиком, с помощью которого удобно выполнять прокрутку. По умолчанию панель прокрутки предоставляет возможность прокрутки колесиком, но ее можно отключить методом
setWheelScrollingEnabled(false);
Проверить, допускает ли панель прокрутку колесиком мыши, можно логическим методом
public boolean isWheelScrollingEnabled();