Upload
nishi
View
31
Download
1
Embed Size (px)
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
Citation preview
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