Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Группы кнопок

Читайте также:
  1. II. Разделите фразы на ритмические группы, произнесите их, соблюдая относительно равное время их произнесения.
  2. А) Основные группы психически зависимых соматических расстройств
  3. Адресные группы
  4. Аллели группы А
  5. Аффинити-группы
  6. Банк данных по детям и подросткам группы риска
  7. В приказе - командир группы отдельно оговаривает для личного состава группы меры безопасности на трассе ТСУ.
  8. Возникновение и развитие малой неформальной группы
  9. Вопрос 46. Категория детей «группы риска»: психологические особенности, направления и перспективы психолого-педагогического сопровождения.
  10. Все члены группы должны быть сознательными в вопросах безопасности.

Если вам нужны радио кнопки для получения поведения, вида “исключающего или”, вы должны добавить их в “группу кнопок”. Но, как показывает приведенный ниже пример, любая AbstractButton может быть добавлена в ButtonGroup.

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

//: c13:ButtonGroups.java// Использование рефлексии для создания групп// различных типов AbstractButton.// <applet code=ButtonGroups// width=500 height=300></applet>import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.border.*;import java.lang.reflect.*;import com.bruceeckel.swing.*; public class ButtonGroups extends JApplet { static String[] ids = { "June", "Ward", "Beaver", "Wally", "Eddie", "Lumpy", }; static JPanel makeBPanel(Class bClass, String[] ids) { ButtonGroup bg = new ButtonGroup(); JPanel jp = new JPanel(); String title = bClass.getName(); title = title.substring(title.lastIndexOf('.') + 1); jp.setBorder(new TitledBorder(title)); for(int i = 0; i < ids.length; i++) { AbstractButton ab = new JButton("failed"); try { // Получение динамического метода конструктора, // который принимает аргумент String: Constructor ctor = bClass.getConstructor(new Class[] { String.class }); // Создание нового объекта: ab = (AbstractButton)ctor.newInstance(new Object[]{ids[i]}); } catch(Exception ex) { System.err.println("can't create " + bClass); } bg.add(ab); jp.add(ab); } return jp; } public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(makeBPanel(JButton.class, ids)); cp.add(makeBPanel(JToggleButton.class, ids)); cp.add(makeBPanel(JCheckBox.class, ids)); cp.add(makeBPanel(JRadioButton.class, ids)); } public static void main(String[] args) { Console.run(new ButtonGroups(), 500, 300); }} ///:~

Заголовок для бордюра берется из имени класса, от которого отсекается вся информация о пути. AbstractButton инициализируется с помощью JButton, которая имеет метку “Failed”, так что если вы игнорируете сообщение исключения, вы видите проблему на экране. Метод getConstructor() производит объект Constructor, который принимает массив аргументов типов в массиве Class, переданном getConstructor(). Затем, все, что вам нужно сделать, это вызвать newInstance(), передав этот массив элементов Object, содержащий ваши реальные аргументы — в этом случае просто String из массива ids.

Здесь немного усложнен простой процесс. Для получения поведения кнопок, вида “исключающее или”, вы создаете группу кнопок и добавляете каждую кнопку, для которой вам нужно поведение в группе. Когда вы запустите программу, вы увидите, что все кнопки, за исключением JButton, показывают это поведение, вида “исключающее или”.

Иконки

Вы можете использовать Icon внутри JLabel или всего, что унаследовано от AbstractButton (включая JButton, JCheckBox, JRadioButton и разного рода JMenuItem). Использование Icon с JLabel достаточно ясное (вы увидите пример позже). Приведенный ниже пример исследует все дополнительные способы, которыми вы можете использовать Icon с кнопками и их потомками.

Вы можете использовать любой gif файл, который хотите, и один из них, использующийся в этом примере, является частью кода этой книги, доступной на www.BruceEckel.com. Для открытия файла и получения изображения, просто создайте ImageIcon и передайте ему имя файла. После этого вы можете использовать полученную Icon в вашей программе.

Обратите внимание, что информация о пути жестко встроена в этот пример; вы должны изменить путь на соответствующий положению файла изображения на вашей машине.

//: c13:Faces.java// Поведение Icon в Jbuttons.// <applet code=Faces// width=250 height=100></applet>import javax.swing.*;import java.awt.*;import java.awt.event.*;import com.bruceeckel.swing.*; public class Faces extends JApplet { // Следующая информация о пути необходима // для запуска апплета непосредственно с диска: static String path = "C:/aaa-TIJ2-distribution/code/c13/"; static Icon[] faces = { new ImageIcon(path + "face0.gif"), new ImageIcon(path + "face1.gif"), new ImageIcon(path + "face2.gif"), new ImageIcon(path + "face3.gif"), new ImageIcon(path + "face4.gif"), }; JButton jb = new JButton("JButton", faces[3]), jb2 = new JButton("Disable"); boolean mad = false; public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ if(mad) { jb.setIcon(faces[3]); mad = false; } else { jb.setIcon(faces[0]); mad = true; } jb.setVerticalAlignment(JButton.TOP); jb.setHorizontalAlignment(JButton.LEFT); } }); jb.setRolloverEnabled(true); jb.setRolloverIcon(faces[1]); jb.setPressedIcon(faces[2]); jb.setDisabledIcon(faces[4]); jb.setToolTipText("Yow!"); cp.add(jb); jb2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ if(jb.isEnabled()) { jb.setEnabled(false); jb2.setText("Enable"); } else { jb.setEnabled(true); jb2.setText("Disable"); } } }); cp.add(jb2); } public static void main(String[] args) { Console.run(new Faces(), 400, 200); }} ///:~

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




Дата добавления: 2015-09-11; просмотров: 71 | Поможем написать вашу работу | Нарушение авторских прав

Создание окон и Апплеты | Рабочее пространство приложения | Запуск апплетов в Web броузере | Тестирование апплетов | Запуск апплетов из командной строки | Отображение рабочего пространства | Захват событий | BoxLayout | События и типы слушателей | Отслеживание множественных событий |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав