1 / 98

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

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

nishi
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 II. Grafikus felhasználói interfész 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

  2. JComponent +--JLabel +--AbstractButton | +--JButton | +--JToggleButton | | +--JCheckBox | | +--JRadioButton | +--JMenuItem | | +--JCheckBoxMenuItem | | +--JRadioButtonMenuItem | | +--JMenu +--JMenuBar +--JComboBox +--JTextComponent | +--JTextField | +--JTextArea +--JList +--JScrollBar +--JScrollPane +--JPanel +--JColorChooser +--JOptionPane javax.swing Object +--Component | +--Container | | +--Panel | | | +--Applet | | | | +--JApplet | | +--Window | | | +--JWindow | | | +--Frame | | | | +--JFrame | | | +--Dialog | | | | +--JDialog | | +--JComponent | | | + ... +--ImageIcon +--Timer

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

  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

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

  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

  7. A gombok őse – AbstractButton (folyt.) • Események • ActionEvent • Jellemzők • String text • Icon icon • int mnemonic • boolean selected • String actionCommand • Metódusok • void doClick()

  8. Nyomógomb – JButton • Valamilyen akció, parancs elindítására használatos • Események (örökölt) • ActionEvent • Jellemzők(örökölt) • String text • Icon icon • int mnemonic • boolean selected • String actionCommand • Metódusok (örökölt) • void doClick()

  9. 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. :SzinvalasztFrame (ActionListener – btPiros, btFeher, btZold, btKilep) btPiros (ActionEvent) btFeher (ActionEvent) btZold (ActionEvent) btKilep (ActionEvent) pnSzin pnGombok lbSzoveg 1. megoldás: A keret a figyelő

  11. Figyelő Mindegyik gomb figyelőláncára a keret van felfűzve ButtonTest1 :SzinvalasztFrame cp pnSzin:JPanel pnGombok:JPanel lbSzoveg :JLabel btPiros :JButton btFeher :JButton btZold :JButton btKilep :JButton ButtonTest1 figyelőláncai

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

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

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

  15. pnSzin:SzinesPanel (ActionListener – btPiros, btFeher, btZold) :SzinvalasztFrame (ActionListener –btKilep) btPiros (ActionEvent) btFeher (ActionEvent) btZold (ActionEvent) btKilep (ActionEvent) pnGombok lbSzoveg 2. megoldás: A SzínesPanel a figyelő

  16. Figyelő Három gomb figyelőláncára most a pnSzin van felfűzve ButtonTest2 :SzinvalasztFrame cp Figyelő pnSzin:SzinesPanel pnGombok:JPanel lbSzoveg :JLabel btPiros :JButton btFeher :JButton btZold :JButton btKilep :JButton ButtonTest2 figyelőláncai

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

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

  19. public void actionPerformed(ActionEvent e) { System.exit(0); } } // SzinvalasztFrame public class ButtonTest2 { public static void main(String[] args) { new SzinvalasztFrame(); } }

  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 • Jellemzők(örökölt) • String text • Icon icon • int mnemonic • boolean selected • String actionCommand • Metódusok (örökölt) • void doClick()

  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 • Jellemzők(örökölt) • String text • Icon icon • int mnemonic • boolean selected • String actionCommand • Metódusok (örökölt) • void doClick()

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

  23. :KeretezesFrame (ActionListener) rbVesett (ActionEvent) rbKiemelt (ActionEvent) rbSullyesztett (ActionEvent) pnValaszt bg: ButtonGroup • 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.

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

  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

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

  27. Kombinált lista – JComboBox • Szerkeszthető szövegmező és legördülő lista kombinációja • Események • ActionEvent • Jellemzők • boolean editable • int maximumRowCount • boolean popupVisible • Object selectedItemint selectedIndex • Konstruktorok • JComboBox() • JComboBox(Object[] items) • JComboBox(Vector items)

  28. Példa: JComboBox cb = new JComboBox(); cp.add(cb); cb.addItem("Erika"); cb.addItem("Margó"); cb.addItem("Mari"); 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()

  29. :SzinekFrame (ActionListener) cbSzinek (ActionEvent) • 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!

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

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

  32. JComponent View Megjelenítés Állapot kiolvasása Látható értékek változtatása Értesítés az állapotváltozásról Model Controller Felhasználói események Állapot- változtatás View factory (Windows/Motif/Metal) MVC modell

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

  34. Modell interfészek,alapértelmezett modellek

  35. A szövegek őse – JTextComponent • Szövegkomponensek absztrakt őse: JTextComponent +--JTextField | +--JPasswordField +--JTextArea • Adatmodellje: Document • Esemény • DocumentEvent (adatmodellen)

  36. A szövegek őse – JTextComponent (folyt.) • Jellemzők • Document doc • String text • Caret caretint caretPositionColor caretColor • boolean editable • int selectionStartint selectionEndColor selectionColorColor selectedTextColor

  37. Szövegmező – JTextField • Beviteli mező • Események • ActionEvent • DocumentEvent (adatmodellen, örökölt) • Jellemzők • örökölt: doc, text, caret, caretPosition, caretColor, editable, selectionStart, selectionEnd, selectionColor, selectedTextColor • int columns • int horizontalAlignment

  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)); • Esemény • DocumentEvent (adatmodellen, örökölt) • Jellemzők • örökölt: doc, text, caret, caretPosition, caretColor, editable, selectionStart, selectionEnd, selectionColor, selectedTextColor

  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)

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

  41. 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. :OneletRajz (ActionListener, DocumentListener) lbNev taCV (DocumentEvent) btNyugtaz (ActionEvent) ... 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);

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

  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

  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

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

  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

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

  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)

  50. :KarbantartFrame (ActionListener,ListSelectionListener) lbInfo lstSzovegek (ListSelectionEvent) pnVezer btKilep (ActionEvent) btUj (ActionEvent) btTorles (ActionEvent) • 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!

More Related