ЕВ-4791
.pdf
Рис. 13.11. Результати різних дій аплета SineWave1
Приклад 12. Діалогові вікна. import javax.swing.*;
import java.awt.event.*; import java.awt.*;
//import com.bruceeckel.swing;
class MyDialog extends JDialog{ public MyDialog (JFrame parent){
super(parent,"Мій діалог ",true); Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(new JLabel("Це мій діалог ")); JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){ dispose();
}
});
cp.add(ok);
101
setSize(150,125);
}
}
public class Dialogs extends JApplet{
JButton b1 = new JButton("Діалогове Вікно"); MyDialog dlg = new MyDialog(null);
public void init(){ b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){ dlg.show();
}
}); getContentPane().add(b1);
}
public static void main(String[] args){ Console.run(new Dialogs(),175,75);
}
}
Код html-файла
<HTML><TITLE> Applet</TITLE>
<APPLET CODE= " Dialogs.class" WIDTH = 175 HEIGHT = 75></APPLET > </HTML>
Рис. 13.12. Результати різних дій аплета Dialogs
Приклад 13. Демонстрація діалогових вікон. import javax.swing.*;
import java.awt.event.*; import java.awt.*;
102
//import com.bruceeckel.swing;
public class TicTacToe extends JApplet{ JTextField
rows = new JTextField("3"), cols = new JTextField("3");
static final int BLANK = 0, XX = 1, OO = 2; class ToeDialog extends JDialog{
int turn = XX;
public ToeDialog(int w,int h){ setTitle("Сама гра");
Container cp = getContentPane(); cp.setLayout(new GridLayout(w,h)); for(int i=0; i<w*h;i++)
cp.add(new ToeButton()); setSize(w*50,h*50); addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ dispose();
}
});
}
class ToeButton extends JPanel{ int state = BLANK; public ToeButton(){
addMouseListener(new ML());
}
public void paintComponent(Graphics g){ super.paintComponent(g);
int x1 = 0; int y1 = 0;
int x2 = getSize().width - 1; int y2 = getSize().height - 1; g.drawRect(x1,y1,x2,y2); x1=x2/4;
y1=y2/4;
int wide= x2/2; int high= y2/2; if (state == XX){
g.drawLine(x1,y1,x1+wide,y1+high);
g.drawLine(x1,y1+high,x1+wide,y1);
}
if(state == OO){ g.drawOval(x1,y1,x1+wide/2,y1+high/2);
}
}
class ML extends MouseAdapter{
public void mousePressed(MouseEvent e){ if(state == BLANK){
state = turn;
turn = (turn == XX ? OO : XX);
}
else
state = (state == XX ? OO : XX); repaint();
}
}
}
}
103
class BL implements ActionListener{
public void actionPerformed(ActionEvent e){ JDialog d = new ToeDialog(
Integer.parseInt(rows.getText()),
Integer.parseInt(cols.getText()));
d.setVisible(true);
}
}
public void init(){
JPanel p = new JPanel(); p.setLayout(new GridLayout(2,2));
p.add(new JLabel("Рядки ",JLabel.CENTER)); p.add(rows);
p.add(new JLabel("Стовпці ",JLabel.CENTER)); p.add(cols);
Container cp = getContentPane(); cp.add(p,BorderLayout.NORTH); JButton b = new JButton("Почнемо"); b.addActionListener(new BL()); cp.add(b,BorderLayout.SOUTH);
}
public static void main(String[] args){ Console.run(new TicTacToe(),200,100);
}
}
Код html-файла
<HTML><TITLE> Applet</TITLE>
<APPLET CODE= " TicTacToe.class" WIDTH = 200 HEIGHT = 100></APPLET > </HTML>
104
Рис. 13.13. Результати різних дій аплета TicTacToe
Приклад 14. Вікно списку файлів. import javax.swing.*;
import java.awt.event.*; import java.awt.*;
//import com.bruceeckel.swing;
public class FileChooserTest extends JFrame{ JTextField
filename = new JTextField(), dir = new JTextField();
JButton
open = new JButton("Відкрити"), save = new JButton("Зберегти");
public FileChooserTest(){ JPanel p = new JPanel();
open.addActionListener(new OpenL()); p.add(open); save.addActionListener(new SaveL()); p.add(save);
Container cp = getContentPane(); cp.add(p,BorderLayout.SOUTH); dir.setEditable(false); filename.setEditable(false);
p = new JPanel(); p.setLayout(new GridLayout(2,1)); p.add(filename);
p.add(dir);
cp.add(p,BorderLayout.NORTH);
}
class OpenL implements ActionListener{
public void actionPerformed(ActionEvent e){ JFileChooser c = new JFileChooser();
int rVal = c.showOpenDialog(FileChooserTest.this); if (rVal == JFileChooser.APPROVE_OPTION){
filename.setText(c.getSelectedFile().getName());
105
dir.setText(c.getCurrentDirectory().toString());
}
if(rVal == JFileChooser.CANCEL_OPTION){ filename.setText("Ви натиснули відміну(Сancel) "); dir.setText(" ");
}
}
}
class SaveL implements ActionListener{
public void actionPerformed(ActionEvent e){ JFileChooser c = new JFileChooser();
int rVal = c.showSaveDialog(FileChooserTest.this); if (rVal == JFileChooser.APPROVE_OPTION){
filename.setText(c.getSelectedFile().getName()); dir.setText(c.getCurrentDirectory().toString());
}
if(rVal == JFileChooser.CANCEL_OPTION){ filename.setText("Ви натиснули відміну(Сancel) "); dir.setText(" ");
}
}
}
public static void main(String[] args){ Console.run(new FileChooserTest(),250,110);
}
}
Код html-файла
<HTML><TITLE> Applet</TITLE>
<APPLET CODE= " FileChooserTest.class" WIDTH = 250 HEIGHT = 110></APPLET > </HTML>
106
Рис. 13.14. Результати різних дій аплета FileChooserTest
13.3. Завдання для відпрацювання самостійної роботи
Навчальні завдання
Існує клас Console: package com.bruceeckel.swing; import javax.swing.*;
import java.awt.event.*;
public class Console {
public static String title(Object o) { String t = o.getClass().toString(); if (t.index0f(“class”) != -1)
t = t.substring(6); return t;
}
public static void setupClosing(Jframe frame) { frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0);
}
});
}
public static void run(
Jframe frame, int width, int height) { setupClosing(frame); frame.setSize(width,height); frame.setVisible(true);
}
public static void run(
JApplet applet, int width, int height) { Jframe frame = new JFrame (title(applet)); setupClosing(frame); frame.getContentPane(), add(applet); frame.setSize(width,height);
applet.init();
applet.start();
frame.setVisible(true);
107
}
public static void run(
JPanel panel int width, int height) { Jframe frame = new Jframe (title(panel)); setupClosing(frame); frame.getContentPane(), add(panel); frame.setSize(width,height); frame.setVisible(true);
}
}///:~
1.Створити аплет/додаток з використанням класу Console. Розмістити на форму текстове поле і три кнопки. При натисканні кожної кнопки в текстовому полі має з’явитися унікальний текст для кожної кнопки.
2.Для аплета, який створено в завданні 1, додати флажок. Опрацювати його подію і розмістити в текстове поле відповідний текст.
3.Створити аплет/додаток з використанням інструменту Console. У НТМL-документації на сайті java.sun.com знайти опис текстового поля з паролем JpasswordField і додати цей компонент на форму. Якщо користувач набирає правильний пароль, необхідно вивести вікно із підтвердженням цього повідомлення, використовуючи функції класу JOptionPane.
4.Створіть аплет/додаток із використанням класу Console і додайте на форму всі компоненти, які визначає метод addActionListener. Зареєструйте слухача для всіх компонентів і виведіть повідомлення про кожну подію у спеціальне текстове поле.
5.Створіть аплет/додаток з використанням класу Console, використовуйте в ньому кноп-
ку JButton і текстове поле JTextField.
6.Створіть аплет/додаток з використанням класу Console. Додайте до головного вікна додатка компоненти: меню і діалогові вікна.
7.Знайдіть і завантажте з Інтернету один або кілька безкоштовних будівників користувацького інтерфейсу. Визначте, що необхідно зробити для додавання компонент BangBean у це середовище програмування і зробіть це.
8.Створіть власну компоненту Bean із назвою Valve, в якій визначте дві властивості: ім’я on тип boolean та ім’я level тип int. Створіть декларацію, використовуючи інструмент jar для упаковки компоненти Bean. Потім завантажте отриманий файл у програму beanbox або в засоби створення додатків з підтримкою технології JavaBeans, щоб протестувати свою нову компоненту.
9.Успадкуйте новий тип кнопки від кнопки JButton. Кожен раз при натисканні кнопка має змінювати колір на інший, що обирається випадково.
10.Створіть «асинхронний індикатор виконання», який пересувається дедалі повільніше мірою наближення до завершення процесу. Додайте до його поведінки трохи нестійкості, так щоб він іноді починав раптово ненадовго пришвидковатися.
Рекомендована література [3-6, 9-12].
108
Тема 14. ТЕХНОЛОГІЯ ВИКОРИСТАННЯ ОБРОБНИКІВ ПОДІЙ
Вивчивши матеріал теми, студенти знатимуть:
зовнішні та внутрішні прояви опрацювання подій;
визначення основних складових події;
які параметри використовують при створенні подій;
технологію обробки різноманітних подій;
шляхи формування власних подій;
механізм опису подій у програмах;
процеси впровадження будь-якого типу події. Вивчення матеріалу теми допоможе студентам:
•користуватися бібліотекою Swing;
•формувати обробник конкретної події;
•залучати типи подій і слухачів;
•використовувати модель подій бібліотеки Swing;
•опрацьовувати декілька подій одночасно.
14.1.Навчальні завдання для виконання практичної роботи
Мета роботи: закріпити теоретичні погляди на фундаментальні механізми опрацювання різноманітних подій та визначити практичну сутність їх.
1.Процедура розрізнення інтерфейсу та реалізації.
2.Типи подій та їх характеристика.
3.«Слухачі» та їхній взаємозв’язок із подіями.
4.Класи подій. Інтерфейс «слухача».
5.Методи реєстрації та усунення «слухачів».
6.Компоненти, що підтримують конкретну подію.
7.Технологія опрацювання кількох подій одночасно.
8.Залучення адаптерів «слухачів» для спрощення реалізації методів інтерфейсу.
9.Виконання прикладів.
Приклад 1. Перетворення деякого аплета на повноцінний додаток. import java.applet.*;
import java.awt.*; import java.awt.event.*;
public class HelloApplication extends Applet { public static void main (String[] args)
HelloApplicationFrame theApplication = new HelloApplicationFrame(“Hello Application”); theApplication.setSize(200,200); theApplication.show();
}
public void paint(Graphics theGraphics) { theGraphics.drawString(“Hello World!”, 0, 50);
}
}
class HelloApplicationFrame extends Frame { private HelloApplication fApplet;
public HelloApplicationFrame(String name) { super(name);
addWindowListener(new HelloWindowAdapter()); fApplet = new HelloApplication();
fApplet.init();
fApplet.start();
add(fApplet);
}
class HelloApplicationAdapter extends WindowAdapter {
109
public void windowClosing(WindowEvent e) { fApplet.stop();
fApplet.destory();
System.exit(0);
}
}
}
Приклад 2. Файл HelloApplication.html для запуску аплета. <HTML>
<BODY>
<APPLET CODE=”HelloApplication.class” WIDTH=”200” HEIGHT=”200”>
</APPLET>
</BODY>
</HTML>
Приклад 3. Програма розрахунків за товар. import java.awt.*;
import java.awt.event.*;
class SimpleComp extends Frame { SimpleComp (String s) {
super(s);
setLayout(null);
Font f = new Font(“Serif”, Font.BOLD, 15); setFont(f);
Label ll = new Label (“Обери товар:”, Label.CENTER); ll.setBounds(10, 50, 120, 30); add(ll);
Label l2 = new Label (“Вибери спосіб оплати”); L2.setBounds(160, 50, 200, 30); add(l2);
Checkbox ch1 = new Checkbox(“Книги”); chl.setBounds(20, 90, 100, 30); add(chl); Checkbox ch2 = new Checkbox(“Диски”); ch2.setBounds(20, 120, 100, 30); add(ch2); Checkbox ch3 = new Checkbox(“Іграшки”); ch3.setBounds(20, 150, 100, 30); add(ch3);
CheckboxGroup = new CheckboxGroup();
Checkbox chg1 = new Checkbox(“Поштовим переказом”, grp, true);
chg1.set Bounds(170, 90, 200, 30); add(chg1);
Checkbox chg2 = new Checkbox(“Кредитною карткою”, grp, false);
chg2.set Bounds(170, 120, 200, 30); add(chg2);
Button b1 = new Button (“Продовжити”); b1.set Bounds(30, 220, 100, 30); add(b1); Button b2 = new Button (“Відмінити”); b2.set Bounds(140, 220, 100, 30); add(b2); Button b3 = new Button (“Вийти”); b3.set Bounds(250, 220, 100, 30); add(b3);
setSize(400, 300); setVisible(true);
}
public static void main (String[] args) {
Frame f = new SimpleComp (“Прості компоненти”);
110
