8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel

Post on 23-Jan-2016

19 views 0 download

description

8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel 3.A gombok őse – AbstractButton 4.Nyomógomb – JButton 5.Jelölőmező – JCheckBox 6.Rádiógomb – JRadioButton, csoportosítás 7.Kombinált lista – JComboBox 8.MVC modell, dokumentumkezelés - PowerPoint PPT Presentation

transcript

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 1

8. Swing komponensek1. Swing konstansok - SwingConstants

2. Címke – JLabel

3. A gombok őse – AbstractButton

4. Nyomógomb – JButton

5. Jelölőmező – JCheckBox

6. Rádiógomb – JRadioButton, csoportosítás

7. Kombinált lista – JComboBox

8. MVC modell, dokumentumkezelés

9. A szövegek őse – JTextComponent

10. Szövegmező – JTextField

11. Szövegterület – JTextArea

12. Lista – JList

13. Görgetősáv – JScrollBar

14. Menüsor – JMenuBar...

15. Ablak – JWindow

16. Dialógusablak – JDialog,

kész dialógusok - JOptionPane

17. Időzítő – Timer

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 2

JComponent+--JLabel+--AbstractButton | +--JButton| +--JToggleButton| | +--JCheckBox| | +--JRadioButton| +--JMenuItem| | +--JCheckBoxMenuItem| | +--JRadioButtonMenuItem| | +--JMenu+--JMenuBar+--JComboBox +--JTextComponent | +--JTextField | +--JTextArea+--JList +--JScrollBar+--JScrollPane+--JPanel+--JColorChooser+--JOptionPane

Object+--Component| +--Container

| | +--Panel | | | +--Applet| | | | +--JApplet| | +--Window| | | +--JWindow| | | +--Frame| | | | +--JFrame| | | +--Dialog| | | | +--JDialog| | +--JComponent| | | + ... +--ImageIcon+--Timer

javax.swing

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 3

Swing konstansok – SwingConstants interfész

Általános konstansokat deklarál Mindegyik: static int … Igazítások: TOP, BOTTOM, LEFT, RIGHT,

CENTER, LEADING, TRAILING Állás: VERTICAL, HORIZONTAL Irány: NORTH, SOUTH, EAST, WEST

Példa:JLabel lbInfo = new JLabel("Információs szöveg");lbInfo.setHorizontalAlignment(SwingConstants.CENTER);lbInfo.setHorizontalAlignment(JLabel.CENTER);lbInfo.setHorizontalAlignment(lbInfo.CENTER);

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 4

Címke – JLabel

Információ (szöveg / ikon) kiírására használatos Magas szintű esemény nem keletkezik rajta Nem kerülhet billentyűzetfókuszba

Jellemzők• String text

• Icon icon

• int horizontalAlignmentint verticalAlignment

• int horizontalTextPositionint verticalTextPosition

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 5

Példák:

cp.add(new JLabel("Nincsen ikonja, alapértelmezett igazítás"));

ImageIcon iiJobb = new ImageIcon("icons/jobb.jpg");

JLabel lb = new JLabel("Csak előre!",iiJobb,JLabel.CENTER);

cp.add(lb);

lb.setHorizontalTextPosition(JLabel.LEADING);

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 6

A gombok őse – AbstractButton

Gombszerű komponensek absztrakt őse:

AbstractButton

+--JButton

+--JToggleButton

| +--JCheckBox

| +--JRadioButton

+--JMenuItem

A gombok a ButtonGroup segítségével csoportba foglalhatók

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 7

A gombok őse – AbstractButton (folyt.)

Események• ActionEvent

Metódusok• void doClick()

Jellemzők• String text

• Icon icon

• int mnemonic

• boolean selected

• String actionCommand

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 8

Nyomógomb – JButton Valamilyen akció, parancs elindítására használatos Események (örökölt)

• ActionEvent

Metódusok (örökölt)• void doClick()

Jellemzők (örökölt)• String text

• Icon icon

• int mnemonic

• boolean selected

• String actionCommand

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 9

Feladat – ButtonTestTegyünk a képernyőre egy keretet; a felső részén egy színes terület legyen, benne a "Válassz színt!" felirattal. A terület színe kezdetben legyen piros, a felirat mindig fehér alapon fekete. A keret alsó részére tegyünk négy gombot; három a terület színét állítsa a gomb felirata szerint, a negyedik gomb állítsa le a programot. Az ablakot ne is lehessen másképp becsukni.

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 10

1. megoldás: A keret a figyelő

lbSzoveg

btPiros (ActionEvent)btFeher (ActionEvent)btZold (ActionEvent)btKilep (ActionEvent)

:SzinvalasztFrame (ActionListener – btPiros, btFeher, btZold, btKilep)

pnSzin

pnGombok

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 11

ButtonTest1 figyelőláncai

pnSzin:JPanel

btPiros:JButton

btFeher:JButton

btZold:JButton

btKilep:JButton

lbSzoveg:JLabel

ButtonTest1

Figyelő

Mindegyik gomb figyelőláncára a keret van felfűzve

:SzinvalasztFrame

cp

pnGombok:JPanel

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 12

...

class SzinvalasztFrame extends JFrame implements ActionListener {

Container cp = getContentPane();JButton btPiros, btFeher, btZold, btKilep;JPanel pnSzin; JLabel lbSzoveg;

public SzinvalasztFrame() {setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);setTitle("Színválasztás");cp.add(pnSzin = new JPanel(),BorderLayout.NORTH);pnSzin.setBackground(Color.RED);lbSzoveg = new JLabel(" Válassz színt! ",JLabel.CENTER);lbSzoveg.setBackground(Color.WHITE);lbSzoveg.setOpaque(true);lbSzoveg.setBorder(BorderFactory.createRaisedBevelBorder());

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 13

pnSzin.add(lbSzoveg);

JPanel pnGombok = new JPanel();pnGombok.add(btPiros = new JButton("Piros"));pnGombok.add(btFeher = new JButton("Fehér"));pnGombok.add(btZold = new JButton("Zöld"));pnGombok.add(btKilep = new JButton("Kilép"));cp.add(pnGombok,BorderLayout.SOUTH);btPiros.addActionListener(this);btFeher.addActionListener(this);btZold.addActionListener(this);btKilep.addActionListener(this);pack();show();

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 14

public void actionPerformed(ActionEvent e) {if (e.getSource() == btPiros)

pnSzin.setBackground(Color.RED);else if (e.getSource() == btFeher)

pnSzin.setBackground(Color.WHITE);else if (e.getSource() == btZold)

pnSzin.setBackground(Color.GREEN);else if (e.getSource() == btKilep)

System.exit(0);}

}public class ButtonTest1 {

public static void main(String[] args) {new SzinvalasztFrame();

}}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 15

2. megoldás: A SzínesPanel a figyelő

lbSzoveg

btPiros (ActionEvent)btFeher (ActionEvent)btZold (ActionEvent)btKilep (ActionEvent)

:SzinvalasztFrame (ActionListener –btKilep)

pnSzin:SzinesPanel(ActionListener – btPiros, btFeher, btZold)

pnGombok

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 16

ButtonTest2 figyelőláncai

pnSzin:SzinesPanel

btPiros:JButton

btFeher:JButton

btZold:JButton

btKilep:JButton

lbSzoveg:JLabel

ButtonTest2

Figyelő

Három gomb figyelőláncára most a pnSzin van felfűzve

:SzinvalasztFrame

cp

pnGombok:JPanel

Figyelő

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 17

...

class SzinesPanel extends JPanel

implements ActionListener {

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("Piros"))

setBackground(Color.RED);

else if (e.getActionCommand().equals("Fehér"))

setBackground(Color.WHITE);

else if (e.getActionCommand().equals("Zöld"))

setBackground(Color.GREEN);

}

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 18

class SzinvalasztFrame extends JFrame

implements ActionListener {

Container cp = getContentPane();

JButton btPiros, btFeher, btZold, btKilep;

SzinesPanel pnSzin; JLabel lbSzoveg;

public SzinvalasztFrame() {… cp.add(pnSzin = new SzinesPanel(),BorderLayout.NORTH);… btPiros.addActionListener(pnSzin);

btFeher.addActionListener(pnSzin);

btZold.addActionListener(pnSzin);

btKilep.addActionListener(this);…

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 19

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

} // SzinvalasztFrame

public class ButtonTest2 {

public static void main(String[] args) {

new SzinvalasztFrame();

}

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 20

Jelölőmező – JCheckBox Kétállapotú gomb logikai igaz/hamis állapot jelölésére Egymástól független jelölésekre szokás használni Események (örökölt)

• ActionEvent

Metódusok (örökölt)• void doClick()

Jellemzők (örökölt)• String text

• Icon icon

• int mnemonic

• boolean selected

• String actionCommand

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 21

Rádiógomb – JRadioButton, csoportosítás Kétállapotú gomb logikai igaz/hamis állapot jelölésére Egymástól függő jelölésekre szokás használni Csoportosítani szokás (ButtonGroup segítségével) Események (örökölt)

• ActionEvent Metódusok (örökölt)

• void doClick()

Jellemzők (örökölt)• String text

• Icon icon

• int mnemonic

• boolean selected

• String actionCommand

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 22

Gombok csoportosítása – ButtonGroup osztály

Logikai csoportosítás A csoport gombjai közül egyszerre egy jelölhető be Csoport elemei: rádiógombok, AbstractButton utódok A ButtonGroup objektum összefogja a gombokat,

felügyeli azok ki-be kapcsolását Nem komponens, nem keletkezik rajta esemény

Konstruktor, metódusok• ButtonGroup()

• void add(AbstractButton b)

• int getButtonCount()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 23

Feladat – RadioButtonTestA keretben 3 jelölőmező látszik, mindhárom egy-egy szegélyfajtát jelöl. Vegyük körül a gombok paneljét a kiválasztott szegéllyel! Egyszerre persze csak egy szegélyt lehet választani.

rbVesett (ActionEvent)rbKiemelt (ActionEvent) rbSullyesztett (ActionEvent)

:KeretezesFrame (ActionListener)

pnValaszt

bg: ButtonGroup

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 24

class KeretezesFrame extends JFrame

implements ActionListener {

Container cp = getContentPane();

ButtonGroup bg = new ButtonGroup();

JRadioButton rbVesett = new JRadioButton("Vésett");

JRadioButton rbKiemelt = new JRadioButton("Kiemelt");

JRadioButton rbSullyesztett=new JRadioButton("Süllyesztett");

JPanel pnValaszt;

public KeretezesFrame() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setTitle("Keretezés próba");

cp.setLayout(new FlowLayout());

pnValaszt = new JPanel();

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 25

bg.add(rbVesett);

pnValaszt.add(rbVesett);

rbVesett.addActionListener(this);

bg.add(rbKiemelt);

pnValaszt.add(rbKiemelt);

rbKiemelt.addActionListener(this);

bg.add(rbSullyesztett);

pnValaszt.add(rbSullyesztett);

rbSullyesztett.addActionListener(this);

cp.add(pnValaszt);

pack(); show();} // konstruktor

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 26

public void actionPerformed(ActionEvent ev) {

JRadioButton rb = (JRadioButton) ev.getSource();

javax.swing.border.Border border = null;

if (rb.getText().equals("Vésett"))

border = BorderFactory.createEtchedBorder();

else if (rb.getText().equals("Kiemelt"))

border = BorderFactory.createRaisedBevelBorder();

else if (rb.getText().equals("Süllyesztett"))

border = BorderFactory.createLoweredBevelBorder();

pnValaszt.setBorder(border);

} // actionPerformed

} // KeretezesFrame

public class RadioButtonTest { … }

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 27

Kombinált lista – JComboBox Szerkeszthető szövegmező és legördülő lista

kombinációja

Jellemzők• boolean editable• int maximumRowCount• boolean popupVisible• Object selectedItem

int selectedIndex

Események• ActionEvent

Konstruktorok• JComboBox()• JComboBox(Object[] items)• JComboBox(Vector items)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 28

Kombinált lista – JComboBox (folyt.)

Metódusok• void addItem(Object anObject)

void insertItemAt(Object anObject, int index)• void removeItem(Object anObject)

void removeItemAt(int anIndex)void removeAllItems()

Példa:JComboBox cb = new JComboBox();cp.add(cb);cb.addItem("Erika");cb.addItem("Margó");cb.addItem("Mari");

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 29

Feladat – ComboBoxTestA keret felső részére tegyünk egy különböző színeket (fehéret, pirosat stb.) felkínáló kombinált listát! A keret háttérszíne mindig a kiválasztott szín legyen!

:SzinekFrame (ActionListener)

cbSzinek(ActionEvent)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 30

... class SzinekFrame extends JFrame

implements ActionListener {

Color[] colors = {Color.WHITE,Color.BLACK,…,Color.RED};

String[] colorStrings = {"fehér","fekete",…,"piros"};

Container cp = getContentPane();

JComboBox cbSzinek;

public SzinekFrame() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setTitle("Szinek");

setBounds(300,100,200,200);

cp.setLayout(new FlowLayout());

cp.add(cbSzinek = new JComboBox(colorStrings));

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 31

cbSzinek.addActionListener(this);

show();} // konstruktor

public void actionPerformed(ActionEvent ev) {

cp.setBackground(colors[cbSzinek.getSelectedIndex()]);} // actionPerformed

} // SzinekFrame

public class ComboBoxTest {

public static void main (String args[]) {

new SzinekFrame();}

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 32

JComponent

Látható értékek

változtatása

Controller

Model

Állapot kiolvasása

Értesítés az

állapotváltozásról

Állapot-

változtatás

Felhasználói események

ViewMegjelenítés

View factory(Windows/Motif/Metal)

MVC modell

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 33

MVC modell összetevői

Model (modell): a komponens adatai, állapota

View (nézet): a komponens megjelenése a képernyőn

(look and feel, skin)

Controller (vezérlő): a komponens viselkedése

Egy modellen több nézet osztozhat

Javában a nézet és a viselkedés csak részben válik el

Javában modell adatainak kiolvasása:

komponens.getModel().getAdat()

Például: ta.getDocument().getLength()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 34

Modell interfészek,alapértelmezett modellek

Modellinterfész

Metódusai (néhány) Mi használja? Alapértelm. osztály

Document addDocumentListenergetLengthgetText

(JTextComponent)JTextFieldJTextArea

(AbstractDocument)PlainDocument

ListModel addListDataListenergetElementAtgetSize

JList (AbstractListModel)DefaultListModel

ListSelection-Model

addListSelectionListenerclearSelectiongetSelectionMode

JList DefaultListSelection-Model

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 35

A szövegek őse – JTextComponent

Szövegkomponensek absztrakt őse:

JTextComponent

+--JTextField

| +--JPasswordField

+--JTextArea

Adatmodellje: Document

Esemény

• DocumentEvent (adatmodellen)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 36

A szövegek őse – JTextComponent (folyt.)

Jellemzők• Document doc

• String text

• Caret caretint caretPositionColor caretColor

• boolean editable

• int selectionStartint selectionEndColor selectionColorColor selectedTextColor

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 37

Szövegmező – JTextField

Beviteli mező

Jellemzők• örökölt: doc, text, caret, caretPosition, caretColor,

editable, selectionStart, selectionEnd, selectionColor, selectedTextColor

• int columns• int horizontalAlignment

Események• ActionEvent

• DocumentEvent (adatmodellen, örökölt)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 38

Szövegterület – JTextArea

Többsoros beviteli mező Nincs görgetősávja; görgetés:

JTextArea ta = new JTextArea();

cp.add(new JScrollPane(ta));

Jellemzők• örökölt: doc, text, caret, caretPosition, caretColor,

editable, selectionStart, selectionEnd, selectionColor, selectedTextColor

Esemény• DocumentEvent (adatmodellen, örökölt)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 39

Szövegterület – JTextArea (folyt.) Jellemzők (folyt.)

• int columnsint rows

• int tabSize

• boolean lineWrap

• boolean wrapStyleWord Metódusok

• void insert(String str, int pos)

• void append(String str)

• void replaceRange(String str, int start, int end)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 40

Szövegterület – JTextArea (folyt.)

Metódusok (folyt.)

• int getLineCount()

• int getLineStartOffset(int line)int getLineEndOffset(int line)

• int getLineOfOffset(int offset)

AbstractDocument osztály metódusai

• String getText(int offset, int length)

• int getLength()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 41

Feladat – TextAreaTestSzerkesszünk meg egy önéletrajzot! Az önéletrajz egy 6 soros, 30 oszlopnyi, szükség esetén görgethető szövegterületen van. A szövegterület felett áll az önéletrajz írójának neve, alatta pedig egy „Nyugtáz” gomb. Tegyünk a szövegterületre egy kezdőszöveget, és állítsuk a kurzort a szöveg végére!Amikor elkezdjük szerkeszteni a szöveget, a szövegterület feletti név váltson dőlt betűsre. A „Nyugtáz” gomb lenyomására nyugtázzuk a szöveget; ekkor a név egyenesedjék ki. De mihelyt megváltozik a szöveg, a név megint dőlt betűvel íródjon ki. A nyugtázással a szövegterület ne veszítse el a fókuszt!

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 42

... class Oneletrajz extends JPanel

implements ActionListener, DocumentListener {

JLabel lbNev;

JTextArea taCV;

JButton btNyugtaz;

Font fntItalic = new Font("Dialog",Font.ITALIC+Font.BOLD,12);

Font fntNormal = new Font("Dialog",Font.PLAIN+Font.BOLD,12);

:OneletRajz (ActionListener, DocumentListener)

taCV (DocumentEvent)

btNyugtaz (ActionEvent)

lbNev

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 43

public Oneletrajz(String nev) {

setLayout(new BorderLayout());

add(lbNev = new JLabel(nev),"North");

lbNev.setFont(fntNormal);

taCV = new JTextArea(6,30);

taCV.setText("Önéletrajz\n\nNév: " + nev + "\n\n");

add(new JScrollPane(taCV));

add(btNyugtaz = new JButton("Nyugtáz"),"South");

taCV.getDocument().addDocumentListener(this);

btNyugtaz.addActionListener(this);

taCV.setCaretPosition(taCV.getText().length());

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 44

public void actionPerformed(ActionEvent ev) {

lbNev.setFont(fntNormal);

taCV.requestFocus();}

public void insertUpdate(DocumentEvent e) {

lbNev.setFont(fntItalic);}

public void removeUpdate(DocumentEvent e) {

lbNev.setFont(fntItalic);}

public void changedUpdate(DocumentEvent e) {}

} // Oneletrajz

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 45

public class TextAreaTest extends JFrame {

public TextAreaTest() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setTitle("Önéletrajz");

setLocation(300,200);

getContentPane().add(new Oneletrajz("Dudás Mari"));

pack(); show();

}

public static void main (String args[]) {

new TextAreaTest();

} // main

} // TextAreaTest

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 46

Lista – JList Választható szövegek listája Nem gördül le, fix területen helyezkedik el Egyszerre több eleme is kiválasztható Adatmodellje: ListModel Kiválasztásmodellje: ListSelectionModel Esemény

• ListSelectionEvent (kiválasztásmodellen)Példák az adatmodell kezelésére:JList lista=new JList(); lista.getModel().addElement("Hosszúhetény");

DefaultListModel model = new DefaultListModel();JList lista=new JList(model); model.addElement("Hosszúhetény");

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 47

Lista – JList (folyt.)

Jellemzők• ListModel model (alapért.:DefaultListModel)

• int selectionModeLehetséges értékei (ListSelectionModel):SINGLE_SELECTION,SINGLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION

• int selectedIndex

• int visibleRowCount

• int fixedCellWidthint fixedCellHeight

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 48

Lista – JList (folyt.)

Metódusok• void setListData(Object[] listData)

void setListData(Vector listData)

• void setSelectedValue( Object anObject, boolean

shouldScroll)

• Object getSelectedValue()Object[] getSelectedValues()

• void setSelectedIndex(int index)int getSelectedIndex()

• void setSelectedIndices(int[] indices)int[] getSelectedIndices()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 49

Lista – JList (folyt.)

Metódusok (folyt.)• boolean isSelectedIndex(int index)

boolean isSelectionEmpty()• void clearSelection()• int getFirstVisibleIndex()

int getLastVisibleIndex() DefaultListModel osztály

• Vectorhoz hasonlóEgyszerű bevitel – javax.swing.JOptionPane

• static String showInputDialog(Component parentComp, Object message)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 50

Feladat – Szövegek karbantartása – ListTestKészítsünk egy olyan alkalmazást, amellyel új szövegeket lehet felvinni, s ki lehet törölni a már meglévőket. Az új szöveget egy kis dialógus segítségével kérjük be. Írjuk ki a felső sorba, ha az első vagy az utolsó szöveg van kiválasztva!

btKilep (ActionEvent)

:KarbantartFrame (ActionListener,ListSelectionListener)

lstSzovegek (ListSelectionEvent)

lbInfo

pnVezer

btUj(ActionEvent)

btTorles (ActionEvent)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 51

... class KarbantartFrame extends JFrame implements

ActionListener, ListSelectionListener {

DefaultListModel mdSzovegek;

JList lstSzovegek;

JButton btUj, btTorol, btKilep;

JLabel lbInfo;

public KarbantartFrame() {

super("Szövegek karbantartása");

setLocation(200,200);

lbInfo = new JLabel(" ");

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 52

mdSzovegek = new DefaultListModel();

mdSzovegek.addElement("Hosszúhetény");

mdSzovegek.addElement("Rövidkaraj");

lstSzovegek = new JList(mdSzovegek);

lstSzovegek.setSelectionMode(

ListSelectionModel.SINGLE_SELECTION);

lstSzovegek.setSelectedIndex(0);

lstSzovegek.addListSelectionListener(this);

JScrollPane spSzovegek = new JScrollPane(lstSzovegek);

btUj = new JButton("Új",new ImageIcon("icons/insert.gif"));

btUj.addActionListener(this);

btTorol = new JButton("Törlés",new ImageIcon("icons/delete.gif"));

btTorol.addActionListener(this);

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 53

btKilep = new JButton("Kilép",new ImageIcon("icons/exit.gif"));

btKilep.addActionListener(this);

JPanel pnVezer = new JPanel();

pnVezer.add(btUj);

pnVezer.add(btTorol);

pnVezer.add(btKilep);

Container contentPane = getContentPane();

contentPane.add(lbInfo,BorderLayout.NORTH);

contentPane.add(spSzovegek);

contentPane.add(pnVezer,BorderLayout.SOUTH);

pack(); setVisible(true);

valasztasFigyelo();

} // konstruktor

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 54

void valasztasFigyelo() {

int index = lstSzovegek.getSelectedIndex();

lbInfo.setText(" ");

if (index == -1)

btTorol.setEnabled(false);

else {

btTorol.setEnabled(true);

if (index == 0)

lbInfo.setText("Első");

else if (index == mdSzovegek.getSize()-1)

lbInfo.setText("Utolsó");

}

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 55

void torles() {

int index = lstSzovegek.getSelectedIndex();

mdSzovegek.remove(index);

if (mdSzovegek.getSize() != 0) {

if (index == mdSzovegek.getSize())

index--;

lstSzovegek.setSelectedIndex(index);

}

valasztasFigyelo();

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 56

void uj() {String szoveg=JOptionPane.showInputDialog(this,"Szöveg:");if (szoveg == null)

return;if (szoveg.equals(""))

Toolkit.getDefaultToolkit().beep();else {

mdSzovegek.addElement(szoveg);lstSzovegek.setSelectedValue(szoveg,true);valasztasFigyelo();

}}

public void valueChanged(ListSelectionEvent e) {valasztasFigyelo();

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 57

public void actionPerformed(ActionEvent ev) {

if (ev.getSource()==btUj)

uj();

else if (ev.getSource()==btTorol)

torles();

else if (ev.getSource()==btKilep)

System.exit(0);}

} // KarbantartFrame

public class ListTest {

public static void main(String[] args) {

new KarbantartFrame() ;}

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 58

Görgetősáv – JScrollBar Függőleges vagy vízszintes sáv egy értéktartomány

aktuális értékének leolvasására/beállítására Adatmodellje: BoundedRangeModel

Esemény• AdjustmentEvent

Jellemzők• int orientation, minimum, maximum, value,

visibleAmount, unitIncrement, blockIncrement Metódusok

• void setValues( int value, int visibleAmount, int minimum, int maximum)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 59

unitIncrement=1unitIncrement=1

blockIncrement=10

value=1500maximum=2200minimum=1000

visibleAmount=200

Példa:setLayout(new BorderLayout()); int visibleAmount = 200;// Paraméterek: vízszintes, value, visibleAmount, min., max.cp.add( new JScrollBar(JScrollBar.HORIZONTAL,1500,

visibleAmount,1000,2000+visibleAmount));

minimum <= value <= maximum-visibleAmount

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 60

Feladat – Évszám görgetése – ScrollBarTestTegyünk a keretbe egy szövegmezőt, abban mindig egy 1900 és 2100 közötti évszámot álljon! A szám kezdeti értéke 2001 legyen. A szám értékét beírással, vagy egy görgetősáv segítségével lehet megváltoztatni. Ha a görgetősáv nyilára kattintunk, akkor eggyel növekedjék az érték, de lehessen a számot tízzel is pörgetni! Ha a szövegmezőbe írt évszámot vagy a görgetősávot megváltoztatjuk, akkor a másik értéke mindig igazodjon ehhez az új értékhez! Ha rossz évszámot ütnénk be, akkor íródjék vissza az előző jó érték!

:EvszamBeallit(AdjustmentListener, ActionListener)

tfSzam(ActionEvent)sbSzam(AdjustmentEvent)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 61

... class EvszamBeallit extends JFrame

implements AdjustmentListener, ActionListener {

Container cp = getContentPane();

int minEv=1900, maxEv=2100, aktEv=2001;

JTextField tfSzam; JScrollBar sbSzam;

public EvszamBeallit() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setBounds(100,100,400,80);

setTitle("Scroll test");

cp.add(sbSzam = new JScrollBar(JScrollBar.HORIZONTAL,

aktEv,5,minEv,maxEv+5),"North");

sbSzam.setBlockIncrement(10);

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 62

sbSzam.addAdjustmentListener(this);

JPanel pn;

cp.add(pn = new JPanel());

pn.add(new JLabel(minEv+"-"+maxEv+": "));

pn.add(tfSzam = new JTextField(""+aktEv));

tfSzam.addActionListener(this);

show();

}

public void adjustmentValueChanged(AdjustmentEvent e) {

tfSzam.setText(Integer.toString(sbSzam.getValue()));

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 63

public void actionPerformed(ActionEvent e) {

try {

int szam = Integer.parseInt(tfSzam.getText());

if (szam<sbSzam.getMinimum() ||

szam>sbSzam.getMaximum()-sbSzam.getVisibleAmount())

throw(new Exception());

sbSzam.setValue(szam);

}

catch (Exception ex) {

tfSzam.setText(Integer.toString(sbSzam.getValue()));

}

} // actionPerformed

} // EvszamBeallit

public class ScrollBarTest {

public static void main (String args[]) {

new EvszamBeallit();

} // main

} // ScrollBarTest

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 64

public class ScrollBarTest {

public static void main (String args[]) {

new EvszamBeallit();

} // main

} // ScrollBarTest

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 65

Menüsor – JMenuBar...

Program funkcióinak csoportosítása Menühierarchia:

• tetején: menüsor (JMenuBar)

• menüsor elemei: lebomló menük (JMenu)

• menü lehetséges elemei:

- újabb menü (JMenu)

- menütétel (JMenuItem)

- jelölő-menütétel (JCheckBoxMenuItem)

- rádió-menütétel (JRadioButtonMenuItem)

- menüelválasztó (szeparátor)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 66

Menüsor – JMenuBar… (folyt.)

Menüsor (főmenü)

• a keret tulajdona

• kerethez rendelés: setJMenuBar(JMenuBar mb) Menütételek

• gombok

• tovább nem bonthatók Gyorsabb elérés

• emlékeztető karakter (menü, menütétel)

• gyorsbillentyű (menütétel)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 67

Esemény• ActionEvent

• minden gombon keletkezik

• menütételeken kell lekezelni

Menüosztályok hierarchiájaJComponent

+--JMenuBar

+--AbstractButton

| +--JMenuItem

| | +--JCheckBoxMenuItem

| | +--JRadioButtonMenuItem

| | +--JMenu

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 68

JMenuBar osztály• JMenuBar()

• JMenu add(JMenu m)

JMenu osztály• JMenu(String text)

JMenu()

• JMenuItem add(JMenuItem mi)

• void addSeparator() void insertSeparator(int index)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 69

JMenuItem osztály• JMenuItem(String text, Icon icon)

JMenuItem(String text, int mnemonic)…

• örökölt jellemzők: text, icon, mnemonic, selected, actionCommand

• boolean enabled

• Keystroke accelerator

• void doClick()

JCheckBoxMenuItem osztály• JCheckBoxMenuItem(String text, Icon icon)

…• boolean state

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 70

Példa (menü felépítése a konstruktorban):

JMenuBar mb; JMenu mFile;

setJMenuBar(mb=new JMenuBar());

mb.add(mFile=new JMenu("File"));

mb.add(new JMenu("Help"));

mFile.add(new JMenuItem("Open"));

mFile.addSeparator();

mFile.add(new JMenuItem("Exit"));

Menüsor

MenükMenütételek(lehetnének újabb menük is)

Menüszeparátor

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 71

Ablak – JWindow Ablak, melynek nincs kerete, címe és menüje Tulajdonosa egy másik ablak Ritkán példányosítjuk (pl. splash screen) Van tartalompanelje (elrendezés-menedzsere

alapértelmezésben határmenti) Esemény

• WindowEvent Konstruktorok, metódusok

• JWindow(Frame owner)JWindow(Window owner)

• Container getContentPane()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 72

Dialógusablak – JDialog, kész dialógusok Tipikusan felhasználói adatbevitelre, nyugtázásra,

információközlésre szokás használni Tulajdonosa: keret vagy másik dialógusablak Lehet modális Tartalompanel

• Gyerekeit a tartalompanelbe kell tenni:dialog.getContentPane().add(gyerek);

• elrendezés-menedzsere alapértelmezésben határmenti

Esemény• WindowEvent

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 73

Dialógusablak – JDialog, kész dialógusok

Konstruktorok, metódusok• JDialog(Frame owner, String title, boolean modal)

JDialog(Dialog owner, String title, boolean modal)…

• void show()

• void hide()

Jellemzők• String title

• boolean modal

• boolean resizable

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 74

Feladat – DialogTestKészítsünk egy dialógusablakot; legyenek rajta a képen látható információk! A Névjegy gomb lenyomására jelenjen meg a Névjegy ablak, és csak az OK gomb lenyomására tűnjön el – amíg az OK-t le nem nyomják, addig az alkalmazás minden más része maradjon érzéketlen. A Névjegy ablak helyzete a főablakhoz képest (60,40) legyen, a háttérszíne drapp, és ne lehessen átméretezni.

:TestFrame (ActionListener – btNevjegy, btKilep)

btNevjegy(ActionEvent)

:NevjegyDialog(ActionListener – btOK)

btKilep(ActionEvent) btOK(ActionEvent)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 75

... class NevjegyDialog extends JDialog implements ActionListener {

Container cp = getContentPane();

JButton btOk;

public NevjegyDialog(JFrame owner) {

super(owner,"Névjegy",true);

setLocation(getParent().getX()+60,getParent().getY()+40);

setResizable(false);

cp.setBackground(SystemColor.controlHighlight);

cp.setLayout(new GridLayout(3,1));

cp.add(new JLabel("Tulajdonos: Okos Tóbiás",JLabel.CENTER));

cp.add(new JLabel("Minden jog fenntartva",JLabel.CENTER));

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 76

JPanel pnOk = new JPanel();

cp.add(pnOk);

pnOk.add(btOk = new JButton("OK"));

btOk.addActionListener(this);

pack(); show();}

public void actionPerformed(ActionEvent e) {

dispose();}

}

class TestFrame extends JFrame implements ActionListener {

Container cp = getContentPane();

JButton btNevjegy, btKilep;

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 77

public TestFrame() {

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

setBounds(300,200,300,200);

cp.add(new JTextArea("Ha lenyomod a Névjegy gombot, \n"+

"akkor le kell nyomnod az OK-t.\nNincs mese..."));

JPanel pn = new JPanel();

pn.add(btNevjegy = new JButton("Névjegy"));

pn.add(btKilep = new JButton("Kilép"));

cp.add(pn,"South");

btNevjegy.addActionListener(this);

btKilep.addActionListener(this);

show();}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 78

public void actionPerformed(ActionEvent e) {

if (e.getSource() == btNevjegy)

new NevjegyDialog(this);

else if (e.getSource() == btKilep)

System.exit(0);

} // actionPerformed

} // TestFrame

public class DialogTest {

public static void main (String args[]) {

new TestFrame();

} // main

} // DialogTest

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 79

JColorChooser osztály• static Color showDialog(Component component,

String title, Color initialColor)

Feladat – Szinválasztás – ColorChooserTestTegyünk a keretbe egy nyomógombot a "Színválasztás" felirattal! A gomb lenyomására jelenjen meg a színdialógus, és azon válasszuk ki, hogy milyen színű lesz majd a gomb!

btSzin(ActionEvent)

:ColorChooserTest (ActionListener)

:JDialog

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 80

... public class ColorChooserTest

extends JFrame implements ActionListener {

private JButton btSzin = new JButton("Színválasztás");

private Color color;

public ColorChooserTest() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

getContentPane().add(btSzin);

btSzin.addActionListener(this);

color = btSzin.getBackground();

pack(); show();

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 81

public void actionPerformed(ActionEvent ev) {

color = JColorChooser.showDialog(this,"A gomb színe...",

color);

if (color != null)

btSzin.setBackground(color);

}

public static void main(String[] args) {

new ColorChooserTest();

}

} // ColorChooserTest

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 82

JOptionPane osztály

Az opciópanel statikus metódusai szabványos dialógusokat jelenítenek meg modálisan:

- Információközlés (showMessageDialog)

- Megerősítés kérése (showConfirmDialog)

- Adatkérés (showInputDialog)

Dialógusablak összeállítása Dialógus típusa: Message, Confirm, Input, Option Ikon (messageType) megadása Üzenet (message) megadása Opciók kiválasztása

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 83

A szabványos dialógusablak elrendezése és paraméterezése

ERROR_MESSAGEINFORMATION_MESSAGEQUESTION_MESSAGEWARNING_MESSAGEPLAIN_MESSAGE

Dialógusablak címe (title:String)

Nyomógombok (optionType:int)

Ikon(messageType

:int)

Üzenet (message:Object; String/Icon/Component)

Bevitel, csak adatbeviteli dialógusnál (input: Object; JTextField/JComboBox)

YES_OPTIONNO_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_OPTIONCANCEL_OPTIONOK_CANCEL_OPTIONDEFAULT_OPTION

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 84

Dialóguskészítő metódusok paraméterei

• Component parent

• Object message

• String title

• int messageType

• Icon icon

• int optionType

• Object[] selectionValuesObject initialSelectionValue

• Object[] optionsObject initialValue

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 85

Dialóguskészítő metódusok• static void showMessageDialog(paraméterek)

Paraméterek: parent, message, title, messageType, icon

• static int showConfirmDialog(paraméterek)Paraméterek: parent, message, title, optionType, messageType, icon

• static String showInputDialog(paraméterek)Paraméterek: parent, message, title, messageType, icon, selectionValues, initialSelectionValue

• static int showOptionDialog(paraméterek)Paraméterek: parent, message, title, optionType, messageType, icon, options, initialValue

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 86

Feladat – ŐszinteségpróbaKérdezzük meg a kedves felhasználót, hogy hány éves! Csak pozitív számot fogadjunk el! Ha nem ír be semmit, írjuk vissza, hogy "Talán megfutamodtál?"! Ha egy >=40 számot ír be, akkor írjuk ki, hogy "Kiálltad a próbát!"; Ha 40-nél kisebb számot ütött be, akkor írjuk ki, hogy "Biztos?". A válasz szerint a következő üzeneteket írjuk ki: Igen: "Nem hiszem!" Nem: "Gondoltam!" Mégse: "Te kis sunyi!”

Kilépés előtt erősítsük meg a kilépési szándékot.

:OszintesegProba (ActionListener – miProba, miKilep)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 87

... public class OszintesegProba extends JFrame

implements ActionListener {

JMenuBar mb = new JMenuBar();

JMenu mProba = new JMenu("Próba");

JMenuItem miProba = new JMenuItem("Őszinteség",'Ő');

JMenuItem miKilep = new JMenuItem("Kilép",'K');

public OszintesegProba() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setBounds(200,50,500,300);

setJMenuBar(mb);

mb.add(mProba);

mProba.setMnemonic('P');

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 88

mProba.add(miProba);

mProba.add(miKilep);

miProba.addActionListener(this);

miKilep.addActionListener(this);

show();

} // konstruktor

double ev() {

String evStr = ""; double ev = 0;

while (ev<=0) {

// …

} // while

return ev;

} // ev

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 89

// while ciklus magja:try {

evStr=JOptionPane.showInputDialog(this,"Hány éves vagy?","Őszinteség próba",JOptionPane.QUESTION_MESSAGE);

if (evStr == null)return -1;

elseev=Double.parseDouble(evStr);

}catch (NumberFormatException ex) {}if (ev<=0)

JOptionPane.showMessageDialog(this,"Pozitív számot kérek!","",JOptionPane.ERROR_MESSAGE);

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 90

void proba() {double ev = ev();if (ev == -1) {

JOptionPane.showMessageDialog(this,"Talán megfutamodtál?");return;

}if (ev < 40) {

int option = JOptionPane.showConfirmDialog(this,"Biztos?","",JOptionPane.YES_NO_CANCEL_OPTION);

if (option == JOptionPane.YES_OPTION)JOptionPane.showMessageDialog(this,"Nem hiszem!",

"",JOptionPane.WARNING_MESSAGE);else if (option == JOptionPane.NO_OPTION)

JOptionPane.showMessageDialog(this,"Gondoltam!","Lebukás",JOptionPane.INFORMATION_MESSAGE);

elseJOptionPane.showMessageDialog(this,"Te kis hamis!");

} // if …

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 91

else

JOptionPane.showMessageDialog(this,"Kiálltad a próbát!",

"",JOptionPane.INFORMATION_MESSAGE);

} // proba

boolean tenyleg(String message) {

Object[] opciok = {"Igen","Nem"};

int valasz = JOptionPane.showOptionDialog(this,

message,"",JOptionPane.DEFAULT_OPTION,

JOptionPane.WARNING_MESSAGE,null,opciok,opciok[1]);

return valasz == 0;

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 92

public void actionPerformed(ActionEvent ev) {

if (ev.getSource() == miProba)

proba();

else if (ev.getSource() == miKilep) {

if (tenyleg("Biztosan ki akar képni?"))

System.exit(0);

}

}

public static void main (String args[]) {

new OszintesegProba();

}

} // OszintesegProba

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 93

Időzítő – Timer

Adott időközönként (delay) egy ActionEvent eseményt bocsát ki és elküldi az őt hallgató objektumoknak

Leállítható (stop) és újraindítható (start) Van egy kezdeti késleltetése A periódusos és a kezdeti késleltetés menet közben

is állítható Egy időzítőhöz akárhány hallgató kapcsolható, és egy

hallgató több időzítőt is hallgathat

Esemény

• ActionEvent

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 94

Időzítő – Timer (folyt.) Jellemzők

• int delay• int initialDelay

Konstruktor, metódusok• Timer(int delay, ActionListener listener)• void addActionListener(ActionListener listener)

void remove ActionListener(ActionListener listener)• void start()• void stop()• void restart()• boolean isRunning()

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 95

Feladat – Stopper (StopperApp)Tegyünk a keretbe két stoppert! Az egyik 1/10 másod-percenként, a másik 2 másodpercenként számoljon! Mindjárt induljon el mindkettő! A stoppereket a Stop gombbal le lehet állítani, a Start gombbal pedig újra lehet indítani.

:StopperApp

:Stopper (ActionListener –

timer, btStart, btStop)

:Stopper (ActionListener –

timer, btStart, btStop)

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 96

... class Stopper extends JPanel implements ActionListener {

private Timer timer; private int ido = 0;private JLabel kijelzo; private JButton btStart, btStop;

public Stopper(int delay) {setBorder(BorderFactory.createRaisedBevelBorder());setLayout(new GridLayout(0,1));add(kijelzo = new JLabel("0",JLabel.CENTER));add(btStart=new JButton("Start"));add(btStop=new JButton("Stop"));btStart.addActionListener(this);btStop.addActionListener(this);timer = new Timer(delay,this);timer.start();

}

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 97

public void actionPerformed(ActionEvent e) {

if (e.getSource()==timer) {

ido++;

kijelzo.setText(""+ido);

}

else if (e.getSource()==btStart) {

timer.restart();

}

else if (e.getSource()==btStop){

timer.stop();

}

} // actionPerformed

} // Stopper

Gábor Dénes Főiskola (IAI)

Programozási technológia (Java) - II. / 98

public class StopperApp extends JFrame {public StopperApp() {

setLocation(200,200);setDefaultCloseOperation(EXIT_ON_CLOSE);Container cp = getContentPane();cp.setLayout(new GridLayout(1,0));cp.add(new Stopper(100));cp.add(new Stopper(2000));pack(); show();

}

public static void main (String args[]) {new StopperApp();

}} // StopperApp