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

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

Пример 2.19.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package PropertyTable.java;import java.awt.*;import javax.swing.*;import javax.swing.table.*; // TableModel и другие классы, связанные с JTable-import java.beans.*; // Для взаимодействия с JavaBean import java.util.*; // Для сортировки массивов /** * Этот класс является подклассом JTable, отображающим таблицу свойств * JavaBeans любого заданного класса.**/public class PropertyTable extends JTable { /** Метод main() позволяет продемонстрировать класс */ public static void main(String[] args) { // Задаем имя класса как аргумент командной строки Class beanClass = null; try { // Используем отражение для получения класса по имени beanClass = Class.forName(args[0]); } catch (Exception e) { // Сообщаем об ошибках System.out.println("Заданный класс не найден: "+e.getMessage()); System.out.println("Формат: java TableDemo <JavaBean class name>"); System.exit(0); } // Создаем таблицу для отображения свойств заданного класса JTable table = new PropertyTable(beanClass); // Располагаем таблицу в окно с полосой прокрутки, // а это окно в окно верхнего уровня и выводим на экран JScrollPane scrollpane = new JScrollPane(table); JFrame frame = new JFrame("Properties of JavaBean: " + args[0]); frame.getContentPane().add(scrollpane); frame.setSize(500, 400); frame.setVisible(true); } /** * Конструктор задает данные, отображаемые в таблице * (модель таблицы) и использует TableColumnModel для настройки * способа их отображения. Самая сложная часть задачи выполняется * определенной ниже реализацией TableModel. **/ public PropertyTable(Class beanClass) { // Устанавливаем модель данных для таблицы try { setModel(new JavaBeanPropertyTableModel(beanClass)); } catch (IntrospectionException e) { System.err.println("Внимание: не выполнена интроспекция: " + beanClass); } // Организуем макет таблицы, изменяя модель ее столбцов TableColumnModel colmodel = getColumnModel(); // Устанавливаем ширину столбцов colmodel.getColumn(0).setPreferredWidth(125); colmodel.getColumn(1).setPreferredWidth(200); colmodel.getColumn(2).setPreferredWidth(75); colmodel.getColumn(3).setPreferredWidth(50); // Выравниваем текст в первом столбце по правому краю TableColumn namecol = colmodel.getColumn(0); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setHorizontalAlignment(SwingConstants.RIGHT); namecol.setCellRenderer(renderer); } /** * Класс реализует TableModel и представляет свойства JavaBeans * инструментами JTable. Т.е. для отображения данных в виде таблицы * реализуем класс TableModel для описания данных, а компонент * JTable отображает их. **/ static class JavaBeanPropertyTableModel extends AbstractTableModel { PropertyDescriptor[] properties; // Отображаемые свойства /** * Конструктор применяет механизм интроспекции JavaBeans * для получения информации о компонентах. Остальные * методы преобразуют эту информация для JTable. **/ public JavaBeanPropertyTableModel(Class beanClass) throws java.beans.IntrospectionException { // Используем класс-интроспектор для получения информации // "bean info" о классе. BeanInfo beaninfo = Introspector.getBeanInfo(beanClass); // Получаем дескрипторы свойств класса BeanInfo properties = beaninfo.getPropertyDescriptors(); // Сортируем свойства по именам // Реализация Comparator задает способ сортировки // объекта PropertyDescriptor по имени Arrays.sort(properties, new Comparator() { public int compare(Object p, Object q) { PropertyDescriptor a = (PropertyDescriptor) p; PropertyDescriptor b = (PropertyDescriptor) q; return a.getName().compareToIgnoreCase(b.getName()); } public boolean equals(Object o) { return o == this; } }); } // Имена столбцов, представленных в TableModel static final String[] columnNames = new String[] { "Name", "Type", "Access", "Bound" }; // Задаем типы столбцов в TableModel static final Class[] columnTypes = new Class[] { String.class, Class.class, String.class, Boolean.class }; // Используем простые методы для возвращения информации // о таблице public int getColumnCount() { return columnNames.length; } public int getRowCount() { return properties.length; } public String getColumnName(int column) { return columnNames[column]; } public Class getColumnClass(int column) { return columnTypes[column]; } /** * Метод возвращает значение, которое выводится на пересечении * заданных строк и столбцов таблицы **/ public Object getValueAt(int row, int column) { PropertyDescriptor prop = properties[row]; switch(column) { case 0: return prop.getName(); case 1: return prop.getPropertyType(); case 2: return getAccessType(prop); case 3: return new Boolean(prop.isBound()); default: return null; } } // Вспомогательный метод, вызываемый getValueAt() String getAccessType(PropertyDescriptor prop) { java.lang.reflect.Method reader = prop.getReadMethod(); java.lang.reflect.Method writer = prop.getWriteMethod(); if ((reader!= null) && (writer!= null)) return "Чтение/Запись"; else if (reader!= null) return "Только чтение"; else if (writer!= null) return "Только запись"; else return "Нет доступа"; // Ошибка!!! } }}

 




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

Практическое занятие № 5 | Практическое занятие № 6 | Практическое занятие № 7 | Пример 2.1. | Пример 2.2. | Глава 2.2. Графические интерфейсы пользователя в Java | Компоненты. | Пример 2.8. | Пример 2.15. | Пример 2.16. |


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