Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vidpovidi_OOP.doc
Скачиваний:
21
Добавлен:
23.02.2016
Размер:
281.6 Кб
Скачать

36.Бібліотека Swing компонентів інтерфейсу користувача

37.Обробка подій, пов’язаних з клавіатурою

38.Обробка подій, пов’язаних з мишкою

39.Класи-адаптери.

40.Компоненти бібліотеки Swing JList , JTab та їх використання.

Компоненти призначені для роботи з таблицями.

Клас JList містить 4 конструктори

public JList() – порожній список

public JList (Object[] listData) – на основі масиву об’єктів

public JList(Vector listData)

public JList (ListModel dataModel) найгнучкіший варіант.

Можна створити свій клас, що реалізує інтерфейс ListModel і забезпечує елементи для списку з будь-якого джерела (будують такий клас на основі абстрактного класу AbstractListModel )

1)Розглянемо як використовується public JList (Object[] listData)

String[] data = {“one”, “two”, “three”};

JList dataList = new JList(data);

JScrollPane scrollPane = new JScrollPane(dataList);

Список сформований на основі масиву data . Потім список поміщений в JScrollPane.(Це стандартний прийом, щоб забезпечити перегляд списку) Тепер залишилось додати тільки scrollPane на яку-небудь панель.

2) конструктор застосовується, якщо колекція об’єктів задана за допомогою класу Vector

Обидва конструктори дозволяють створити тільки СТАТИЧНІ списки.

Використання класу JList базується на інтерфейсах ListModel та класах

AbstractListModel DefaultListModel.

Список працює з даними не напряму, а через спеціальний об’єкт „модель даних”. Інтерфейс ListModel визначає мінімальний набір методів, який потрібний класу ListModel від „моделі даних”. Ці методи дозволяють узнати кількість елементів в списку (getSize), вибрати елемент списку (getElementAt), зареєструвати та відключити слухачів (addListDataListener, removeListdataListener).

Клас AbstractListModel являється абстрактним допоміжним класом. в якому реалізований набір методів, які необхідні для підтримки слухачів типу ListDataListener. Тому всі реальні класи, які реалізують „модель даних” зручно будувати на основі класу AbstractListModel(тоді не доведеться реалізовувти методи addListDataListener, removeListdataListener).

Клас DefaultListModel задовольняє інтерфейсу ListModel і має методи для додавання елементів в список (методи add та addElement), модифікації існуючих елементів (setElementAt) та видалення зі списку(remove…).

Можна побудувати свій клас, що реалізує інтерфейс ListModel, визначив в ньому інші методи. Але у більшості випадків класу DefaultListModel достатньо.

Отже, для реалізації списку типу JList, можна

або побудувати об’єкт класу DefaultListModel

або побудувати об’єкт класу JList з використанням конструктора

public JList(ListModel dataModel)

при цьому передаючи йому у якості параметра побудований об’єкт класу DefaultListModel.

або виконати модифікації списку через об’єкт класу DefaultListModel – віртуальне представлення списку при цьому має змінюватись автоматично.

Найчастіше список представляє рядки. Але візуальне представлення рядків списку може бути більш складним ніж рядок. Наприклад, можна представити дані в декілька колонок або вставити в рядки піктограми.

Для того, щоб маніпулювати представленням рядків списку потірбно знати наступне.

Рядками списку, що відображаються є мітки класу JLabel. За замовчуванням при формуванні візуального представлення рядка текст мітки формується викликом метода toString(). Тому для будь якого свого об’єкта достатньо створити метод toString(), щоб він правильно відображався на екрані.

Зауваження: Рядки-мітки формуються об’єктом класу, що задовольняє інтерфейсу JListCellRenderer. (Renderer – представник, „відображувальник” ячейки списку, візуалізатор). Тому об’єкт „рендерер”, що формується класом JList за замовчуванням, можна замінити іншим, який формує потрібним чином зовнішній вид міток. Для заміни візуалізатора клас JList має метод setRenderer.

В класі JList є метод

public void addListSelectionListener(ListSelectionListener listener)

який додає слухача ListSelectionListener.

Інтерфейс ListSelectionListener має єдиний метод

public void valueChanged(ListSelectionEvent e)

В межах цього метода можна використовувати методи класу ListSelectionEvent для визначення того, який елемент списку вибраний. Але зручніше користуватись методами класу JList , які дозволяють визначити номер або номера вибраних елементів. розглянемо ці методи.

Метод

public int getSelectedIndex()

дозволяє визначити номер вибраного елемента спсику. Якщо вибрано декілька елементів, він повертає номер першого з них. Якщо не вибрано нічого, то -1.

Метод

public Object getSelectedValue()

дозволяє отримати перший з вибраних елементів спсику. якщо не вибраний ніякий, то null.

Аналогічні методи для групи вибраних елементів

public int getSelectedIndices()

public Object getSelectedValues()

Можливість вибору груп елементів може бути включена/відключена методом setSekectionMode.

Приклад використання списку:

ArrayList<String> Names = new ArrayList<String>();

.......

private void paintList() //перерисовування списку

{

jList1.setModel(new javax.swing.AbstractListModel() {

public int getSize() { return Names.size(); }

public Object getElementAt(int i) { return Names.get(i); }

});

}

Приклад використання таблиці

final int numColomn = 11;

final Object[][] tabModel = new Object[ListStudent.size()][numColomn];

int n=0;

for(Student_Sim e: ListStudent) {

{int j=e.getNumList();

tabModel[n][0]= e.getName() ;

int sum = 0;

tabModel[n][1]=e.getDefLab(journals);

tabModel[n][2]= e.getDebtsLab(journals);

sum = 0;

for(int d=0;d<journals[j].length;d++)

sum = sum+journals[j][d].getrepeatLab();

tabModel[n][3]= sum;

tabModel[n][4]= e.getDefTeor(journals);

tabModel[n][5]= e.getDebtsTeor(journals);

sum = 0;

for(int d=0;d<journals[j].length;d++)

sum = sum+journals[j][d].getrepeatTeor();

tabModel[n][6]= sum;

tabModel[n][7]= e.getDefExam(journals);

tabModel[n][8]= e.getDebtsExam(journals);

sum = 0;

for(int d=0;d<journals[j].length;d++)

sum = sum+journals[j][d].getrepeat();

tabModel[n][9]= sum;

tabModel[n][10]= e.getGradeMean(journals);

sum = 0;

n++;

}

}

final String[] nameColomn = new String[numColomn];

nameColomn[0] = "ПІБ студента";

nameColomn[1] = "Кільк захищ ЛР";

nameColomn[2] = "Кільк заборг ЛР";

nameColomn[3] = "Кільк спроб захисту ЛР";

nameColomn[4] = "Кільк захищ МК";

nameColomn[5] = "Кільк заборг МК";

nameColomn[6] = "Кільк спроб захисту МК";

nameColomn[7] = "Кільк зданих Екз";

nameColomn[8] = "Кільк заборг Екз";

nameColomn[9] = "Кільк спроб здачі Екз";

nameColomn[10] = "Середній бал";

jTable1.setModel(new javax.swing.table.AbstractTableModel() {

public int getRowCount() {

// throw new UnsupportedOperationException("Not supported yet.");

return ListStudent.size();

}

public int getColumnCount() {

// throw new UnsupportedOperationException("Not supported yet.");

return numColomn;

}

public Object getValueAt(int rowIndex, int columnIndex) {

// throw new UnsupportedOperationException("Not supported yet.");

/* if (rowIndex==0)

return nameColomn[columnIndex];

else*/

return tabModel[rowIndex][columnIndex];

}

@Override

public String getColumnName(int columnIndex){

return nameColomn[columnIndex];

}

});

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]