Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 76 8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel 3.A gombok.

Hasonló előadás


Az előadások a következő témára: "Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 76 8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel 3.A gombok."— Előadás másolata:

1 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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 Ablak – JWindow 16.Dialógusablak – JDialog, kész dialógusok - JOptionPane 17.Időzítő – Timer

2 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 77 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

3 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 78 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);

4 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 79 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 horizontalAlignment int verticalAlignment int horizontalTextPosition int verticalTextPosition

5 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 80 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);

6 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 81 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

7 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 82 A gombok őse – AbstractButton (folyt.)  Események ActionEvent  Metódusok void doClick()  Jellemzők String text Icon icon int mnemonic boolean selected String actionCommand

8 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 83 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

9 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 84 Feladat – ButtonTest Tegyü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.

10 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / megoldás: A keret a figyelő lbSzoveg btPiros (ActionEvent) btFeher (ActionEvent) btZold (ActionEvent) btKilep (ActionEvent) :SzinvalasztFrame (ActionListener – btPiros, btFeher, btZold, btKilep) pnSzin pnGombok

11 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 86 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

12 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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() );

13 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 88 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(); }

14 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 89 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(); }

15 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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

16 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 91 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ő

17 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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); }

18 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 93 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); … }

19 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 94 public void actionPerformed(ActionEvent e) { System.exit(0); } } // SzinvalasztFrame public class ButtonTest2 { public static void main(String[] args) { new SzinvalasztFrame(); }

20 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 95 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

21 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 96 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

22 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 97 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()

23 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 98 Feladat – RadioButtonTest A 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

24 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 99 class KeretezesFrameextends 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();

25 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 100 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

26 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 101 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 { … }

27 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 102 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)

28 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 103 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");

29 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 104 Feladat – ComboBoxTest A 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)

30 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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));

31 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 106 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(); }

32 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 107 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 View Megjelenítés View factory (Windows/Motif/Metal) MVC modell

33 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 108 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()

34 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 109 Modell interfészek,alapértelmezett modellek Modell interfész Metódusai (néhány)Mi használja?Alapértelm. osztály DocumentaddDocumentListener getLength getText (JTextComponent) JTextField JTextArea (AbstractDocument) PlainDocument ListModeladdListDataListener getElementAt getSize JList(AbstractListModel) DefaultListModel ListSelection- Model addListSelectionListener clearSelection getSelectionMode JListDefaultListSelection- Model

35 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 110 A szövegek őse – JTextComponent  Szövegkomponensek absztrakt őse: JTextComponent +--JTextField | +--JPasswordField +--JTextArea  Adatmodellje: Document  Esemény DocumentEvent (adatmodellen)

36 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 111 A szövegek őse – JTextComponent (folyt.)  Jellemzők Document doc String text Caret caret int caretPosition Color caretColor boolean editable int selectionStart int selectionEnd Color selectionColor Color selectedTextColor

37 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 112 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)

38 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 113 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)

39 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 114 Szövegterület – JTextArea (folyt.)  Jellemzők (folyt.) int columns int 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)

40 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 115 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()

41 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 116 Feladat – TextAreaTest Szerkesszü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!

42 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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

43 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 118 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()); }

44 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 119 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

45 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 120 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

46 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 121 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");

47 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 122 Lista – JList (folyt.)  Jellemzők ListModel model (alapért.:DefaultListModel) int selectionMode Lehetséges értékei (ListSelectionModel): SINGLE_SELECTION, SINGLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION int selectedIndex int visibleRowCount int fixedCellWidth int fixedCellHeight

48 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 123 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()

49 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 124 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)

50 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 125 Feladat – Szövegek karbantartása – ListTest Ké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)

51 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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(" ");

52 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 127 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);

53 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 128 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

54 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 129 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ó"); }

55 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 130 void torles() { int index = lstSzovegek.getSelectedIndex(); mdSzovegek.remove(index); if (mdSzovegek.getSize() != 0) { if (index == mdSzovegek.getSize()) index--; lstSzovegek.setSelectedIndex(index); } valasztasFigyelo(); }

56 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 131 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(); }

57 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 132 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() ; }

58 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 133 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)

59 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 134 unitIncrement=1 blockIncrement=10 value=1500 maximum=2200 minimum=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

60 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 135 Feladat – Évszám görgetése – ScrollBarTest Tegyü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)

61 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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);

62 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 137 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())); }

63 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 138 public void actionPerformed(ActionEvent e) { try { int szam = Integer.parseInt(tfSzam.getText()); if (szamsbSzam.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

64 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 139 public class ScrollBarTest { public static void main (String args[]) { new EvszamBeallit(); } // main } // ScrollBarTest

65 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 140 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)

66 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 141 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)

67 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 142 Esemény ActionEvent minden gombon keletkezik menütételeken kell lekezelni Menüosztályok hierarchiája JComponent +--JMenuBar +--AbstractButton | +--JMenuItem | | +--JCheckBoxMenuItem | | +--JRadioButtonMenuItem | | +--JMenu

68 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 143 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)

69 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 144 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

70 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 145 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ük Menütételek (lehetnének újabb menük is) Menüszeparátor

71 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 146 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()

72 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 147 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

73 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 148 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

74 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 149 Feladat – DialogTest Ké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)

75 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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) );

76 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 151 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;

77 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 152 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(); }

78 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 153 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

79 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 154 JColorChooser osztály static Color showDialog(Component component, String title, Color initialColor) Feladat – Szinválasztás – ColorChooserTest Tegyü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

80 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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(); }

81 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 156 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

82 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 157 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

83 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 158 A szabványos dialógusablak elrendezése és paraméterezése ERROR_MESSAGE INFORMATION_MESSAGE QUESTION_MESSAGE WARNING_MESSAGE PLAIN_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_OPTION NO_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_OPTION CANCEL_OPTION OK_CANCEL_OPTION DEFAULT_OPTION

84 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 159 Dialóguskészítő metódusok paraméterei Component parent Object message String title int messageType Icon icon int optionType Object[] selectionValues Object initialSelectionValue Object[] options Object initialValue

85 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 160 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

86 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 161 Feladat – Őszinteségpróba Ké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)

87 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / public class OszintesegProbaextends 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');

88 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 163 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

89 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 164 // while ciklus magja: try { evStr=JOptionPane.showInputDialog(this, "Hány éves vagy?","Őszinteség próba", JOptionPane.QUESTION_MESSAGE); if (evStr == null) return -1; else ev=Double.parseDouble(evStr); } catch (NumberFormatException ex) { } if (ev<=0) JOptionPane.showMessageDialog(this, "Pozitív számot kérek!","", JOptionPane.ERROR_MESSAGE);

90 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 165 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); else JOptionPane.showMessageDialog(this,"Te kis hamis!"); } // if …

91 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 166 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; }

92 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 167 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

93 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 168 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

94 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 169 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()

95 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 170 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)

96 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 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(); }

97 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 172 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

98 Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 173 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


Letölteni ppt "Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - II. / 76 8. Swing komponensek 1.Swing konstansok - SwingConstants 2.Címke – JLabel 3.A gombok."

Hasonló előadás


Google Hirdetések