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

98
Gábor Dénes Főiskola (IAI) 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 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

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 of 8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel

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

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

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

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

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

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);

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

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

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

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);

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

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

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

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

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

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

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

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.

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

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

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

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

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

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());

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

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();

}

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

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();

}}

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

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

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

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ő

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

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);

}

}

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

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);…

}

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

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();

}

}

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

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

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

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

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

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()

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

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

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

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();

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

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

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

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 { … }

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

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)

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

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");

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

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)

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

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));

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

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();}

}

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

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

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

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()

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

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

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

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)

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

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

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

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)

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

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)

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

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)

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

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()

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

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!

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

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

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

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());

}

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

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

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

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

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

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");

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

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

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

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()

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

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)

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

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)

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

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(" ");

Page 52: 8. Swing komponensek 1.Swing konstansok  - SwingConstants 2.Címke – 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);

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

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

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

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ó");

}

}

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

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();

}

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

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();

}

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

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() ;}

}

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

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)

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

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

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

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)

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

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);

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

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()));

}

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

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

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

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

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

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)

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

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)

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

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

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

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)

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

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

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

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

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

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()

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

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

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

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

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

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)

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

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));

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

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;

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

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();}

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

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

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

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

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

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();

}

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

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

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

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

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

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

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

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

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

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

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

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)

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

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');

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

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

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

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);

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

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 …

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

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;

}

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

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

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

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

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

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()

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

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)

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

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();

}

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

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

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

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