Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2010

Графический пользовательский интерфейс (GUI). Компоненты.

JRadioButton, JCheckBox, JTabbedPane.

Компонент JCheckbox представляет checkbox – элемент, который может быть выделен или нет (например, нужна доставка для оформляемой покупки или нет). В этом случае в конструктор передается лишь текст – подпись к checkbox. Рассмотрим пример, в котором в теле контейнера добавляется два checkbox:

   1 JCheckbox payment = new JCheckbox("Оплата в кредит");
   2 panel.add(payment);
   3 JCheckbox delivery = new JCheckbox("Доставка");
   4 panel.add(delivery); 

Если нужно организовать выбор только одного из нескольких вариантов, используется компонент JRadioButton. Несколько радио-кнопок объединяют в группу (ButtonGroup) (в рамках которой осуществляется выбор). Тогда после щелчка мыши на одной из радио-кнопок будет выбрана только она. Например:

   1 JRadioButton m = new JRadioButton("муж.");
   2 JRadioButton f = new JRadioButton("жен.");
   3 panel.add(m);
   4 panel.add(f);
   5 ButtonGroup sex = new ButtonGroup();
   6 sex.add(m);
   7 sex.add(f);

Мы уже рассмотрели ряд визуальных компонент библиотеки Swing, такие как JLabel, JButton, JTextField, JTextArea, JPanel, JFrame Теперь мы можем строить довольно сложные и функционально развитые приложения. Однако, при усложнении приложений возникает простая, но весьма неприятная проблема — размер экрана ограничен и для всех компонент диалога, необходимых приложению, его может просто не хватить. Одним из средств, помогающих решить такую проблему, является панель с закладками. Наглядный пример: несколько классов открыты в окне проекта в JBuilder.

   1 JTabbedPane tp = new JTabbedPane();
   2 c.add(tp, BorderLayout.CENTER);
   3 JPanel pn1 = new JPanel();
   4 tp.add(pn1, "Hello");
   5 JPanel pn2 = new JPanel();
   6 tp.add(pn2, "Good-bye");

Каждая из закладок — это панель, на которую можно поместить свои визуальные компоненты. Это позволяет разместить на одном и том же участке экрана достаточно большое количество информации. ComboBox, List, ScrollPane.

Класс JList

Представляет собой список. Класс JList имеет четыре конструктора:

   1 JList(ListModel dataModel);
   2 JList(java.lang.Object[] listData);
   3 JList(java.util.Vector listData);
   4 JList().

Модель данных это объект, позволяющий работать с данными: изменять, добавлять данные, приписывать события (подробности и пример позже). Важный методы: JList.getSelectedValue(),JList.setSelectedValue().

Использование модели данных

Интерфейс ListModel определяет минимальный набор методов: getSize , getElementAt. И, наконец, класс DefaultListModel. Этот класс удовлетворяет интерфейсу ListModel и, что важно для нас, имеет методы модификации списока (addElement, setElementAt, removeElementAt, removeAllElements). События:

   1 jList1.addListSelectionListener(new ListSelectionListener() {
   2   public void valueChanged(ListSelectionEvent e) {
   3      System.out.println(""+e.getValueIsAdjusting()+": 
   4                        "+jList1.getSelectedValue());
   5   }
   6 });

Класс JScrollPane

Панель с полосой прокрутки. Этот класс весьма удобен, когда речь заходит о чем-нибудь, связанном с прокруткой на экране текста, графики и даже Java-компонентов.

   1 private JList list = new JList(new DefaultListModel());
   2 private JScrollPane listbox = new JScrollPane();
   3 listbox.getViewport().add(list);

Класс JComboBox

Раскрывающийся список обладает четырьмя стандартными конструкторами:

   1 JComboBox(ComboBoxModel aModel);
   2 JComboBox(java.lang.Object[] items);
   3 JComboBox(java.util.Vector items);
   4 JComboBox().

Эти конструкторы практически полностью совпадают по описанию и назначению с конструкторами класса JList, и только первый конструктор отличается названием класса устанавливаемой модели данных.

   1 DefaultComboBoxModel cmodel = new DefaultComboBoxModel();
   2 cmodel.addElement("First");
   3 cmodel.addElement("Second");
   4 cmodel.addElement("Third");
   5 jComboBox1.setModel(cmodel);

События:

   1 jComboBox1.addItemListener(new ItemListener() {
   2     public void itemStateChanged(ItemEvent e) {
   3       System.out.println("ComboBox: "+e.getItem()+", 
   4                        "+(e.getStateChange()==e.SELECTED));        
   5     }
   6 });

Загрузка файла

   1 JFileChooser fc = new JfileChooser();

Это отдельный компонент, его не надо засовывать в окно. Можно, например, открывать загрузчик файла при нажатии кнопки. Для этого в обработчик событий надо добавить:

   1 int retVal = fc.showOpenDialog(null);//для открытия файла
   2 if (retVal == JFileChooser.APPROVE_OPTION) {
   3         File selectedfile = fc.getSelectedFile();
   4         S.o.p(selectedfile.getName());
   5 }