You are on page 1of 33

Alkalmazsfejlesztsi technolgia

Magasabb szint komponensek


Tanr: Csndes Emese E-mail: csondes@szamalk.hu

Vizsgakvetelmnyek
Felkszlst tmogat anyagok
http://www.gdf.hu/Segedletek/270Fo.htm Alkalmazsfejlesztsi technolgik tantrgynl

Adatbzis-kezels
Tanr: Seres Ivn E-mail: seres@szamalk.hu

Vizsga
Elmleti rsz: Teszt Gyakorlati rsz: Ktelez feladat bemutatsa

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Magasabb szint komponensek


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

1. Megjelentsi technikk
1.1 1.2 1.3 1.4 1.5 Komponensek kinzetnek meghatrozsa Men megjelentsnek finomtsa Szeglyezs Segdszveg HTML-t rtelmez komponensek

Megjelentsi technikk (szeglyek, segdszveg) Elrendezsi stratgik (krtys, box) Specilis panelek (fles, tbbrteg, grget) Adatbeviteli lehetsgek (specilis szvegmezk) Kijelzk (llapotjelz, nyomkvets) Vezrlsi technikk (felbukkan men, eszkzsor) Fastruktra Tblzat Dokumentumkezels (stlusos szveg kezelse) Alkalmazsok kztti adatcsere (drag and drop technika) Java babok
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

1.1 Komponensek kinzetnek meghatrozsa


Minden komponensnek van egy alapkinzete. Szeretnnk a megszokott megjelentst felvltani egy sajtos megjelentsi formra. A megjelents megvltoztatsnak mechanizmust a lista segtsgvel mutatjuk be.

Feladat - RendererTeszt
Van egy gymlcsneveket tartalmaz tmbnk, melynek tartalmt hromflekppen jelentjk meg. Mindhrom esetben hasznljunk listt. Az els lista az alaprtelmezett megjelentst hasznlja, vagyis az adatok szveges reprezentcija jelenjen meg. (RendererTeszt.java) A msodik lista a gymlcsneveknek megfelel kp fjlokat jelentse meg. (ListaMegjelenito1.java) A harmadik lista az ltalunk Java nyelven megfogalmazott rajzokat jelentse meg. (ListaMegjelenito2.java)
5
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

String[] adatok=new String[]{"alma", "eper", "meggy", "alma", "narancs", "meggy"}; DefaultListModel dlm=new DefaultListModel(); JList lista1 = new JList(); JList lista2 = new JList(); JList lista3 = new JList(); ...
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

2005.11.28.

for(int i=0; i<adatok.length; i++){ dlm.addElement(adatok[i]); } lista1.setModel(dlm); lista2.setCellRenderer(new ListaMegjelenito1()); lista2.setModel(dlm); lista3.setCellRenderer(new ListaMegjelenito2()); lista3.setModel(dlm);

ListaMegjelenito1, ListaMegjelenito2 osztlyunknak a kvetkez elrsokat kell teljestenie:


- se a JLabel, mivel a lista elemeinek megjelentse JLabel segtsgvel trtnik. - Implementlja a ListCellRenderer interfszt. - Kifejti az interfsz egyetlen metdust getListCellRendererComponent(), mely a megjelenst hatrozza meg.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

10

Osztlydiagram

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

11

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

12

ListCellRenderer interfsz Csomag: javax.swing Deklarci: public interface ListCellRenderer Metdusa public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus )
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

public class ListaMegjelenito1 extends JLabel implements ListCellRenderer { public ListaMegjelenito1() { } public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){ setHorizontalAlignment(JLabel.CENTER); setIcon(new ImageIcon("images/"+ value.toString()+".jpg")); return this; } }

13

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

14

Sajt rajzos megjelentse


protected void paintComponent(Graphics g){ if(gyumi.equals("alma")) alma(g); else if(gyumi.equals("eper")) eper(g); else if(gyumi.equals("meggy")) meggy(g); else if(gyumi.equals("narancs")) narancs(g); }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Lista elemeinek elrenedzse


setLayoutOrientation()

15

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

16

JList osztly
Jellemzk int fixedCellWidth int fixedCellHeight
Megadja a listaelem szlessgt/magassgt.

1.2 Men megjelentsnek finomtsa


A Box objektumok az adott terleten sztterlnek (vagyis kitltik a rendelkezsre ll maximlis terletet) s lthatatlanok (gy jelenltk nem szlelhet, csak hatsuk). A Box osztly objektumai brmely kontner komponens (men, eszkzsor, panel) esetben alkalmazhat.

Color selectedBackground Color selectedForeground


Megadja a kivlasztott elem httr- s eltrsznt.

Metdusok void setCellRenderer(ListCellRenderer l)


Belltja, hogy a lista elemeit az ltalunk meghatrozott formban jelentse meg.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

17

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

18

Box
Hromfle megvalstsa van: Box Glue Strut A programba beillesztve nem ltjuk hatst. Lthatatlan mret nlkli komponensknt vesz rszt a megjelentsben. Szerepe: tetszleges, Component-bl szrmaztatott komponens elhelyezhet benne. A BoxLayout-os elrendezs megvalstsnl alkalmazzuk.
19
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

20

Glue
Mindkt, vagy a kitntetett irny maximlisan elfoglalhat terlett veszi fel mretknt.

Az brn lthat men megvalstsa:


menusor.add(mFajl); menusor.add(mSzerk); menusor.add(mBeall); menusor.add(Box.createHorizontalGlue()); menusor.add(mSugo); menusor.add(mKi);

Strut
Meghatrozhat a lefoglalt terlet mrete. Akr mindkt irnyba, akr csak az egyik, kitntetett irnyba.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

21

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

22

1.3 Szeglyezs
Dekorcis cl, a felleti elemek kiemelse, sszetartoz elemek behatrolsa BorderFactory osztly create s az adott szegly nevnek megadsa pldul: BorderFactory.createBevelBorder() EmptyBorder (res szegly): lthatatlan szegly; levegsebb megjelentshez alkalmazzuk, pldul az ablakkerettl val eltvoltshoz.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

23

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

24

LineBorder (vonalas szegly): adott szn, adott vastagsg sima vonalas szegly.

BevelBorder: a fellethez kpest vagy bemlyeds (Lowered) vagy kitremkeds (Raised) hatst kelt 3D-s szegly. static Border createBevelBorder(
int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) type: Lowered, Raised

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

25

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

26

setBackground(new Color(255,0,255)); BorderFactory.createBevelBorder( BevelBorder.RAISED, new Color(255,255,255), new Color(255,168,255), new Color(84,0,84), new Color(168,0,168));

CompoundBorder (sszetett szegly): brmely kt szegly kombincija. A megadott szeglyek egyike kls, msik a bels szeglyknt jelenik meg. static CompoundBorder CreateCompoundBorder( Border outsideBorder, Border insideBorder)

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

27

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

28

EtchedBorder: vonalas 3D szegly, melynek tpusa (Raised, Lowered), megadhat. static Border createEtchedBorder(int type, Color highlight, Color shadow)

MatteBorder: tetszleges kp szeglyknt val alkalmazsa. A szegly a kvetkezkppen ll el:


a bal fels sarokbl kiindulva tapta jelleggel lefekteti a kivlasztott kpet a keretezend fellet egszn, majd ebbl megjelenti a szegly terlett. Vagyis rdemes olyan kpet vlasztani, mely mozaikos elrendezsben is sszefgg hatst biztost.

highlight: Color.cyan shadow: Color.blue


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

29

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

30

static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Color color) static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Icon tileIcon)

TitledBorder (cmks szegly): cmkvel kiegsztett tetszleges szegly. A cmke szeglyhez igaztott helyzete mind vzszintes irnyban (LEFT, CENTER, RIGHT, LEADING, TRAILING), mind fggleges irnyban (ABOVE_TOP, BELOW_TOP, TOP, ABOVE_BOTTOM, BELOW_BOTTOM, BOTTOM) meghatrozhat static TitledBorder createTitledBorder( Border border, String title, int titleJustification, int titlePosition, Font titleFont, Color titleColor)
31
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

createMatteBorder(1,3,5,7,Color.yellow) createMatteBorder(7,5,3,1, )
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

32

1.4 Segdszveg
Minden komponenshez hozzrendelhet A komponens fltt vrakoz egr hatsra jelenik meg Clja:
komponens hasznlatt segt, magyarz informci megjelentse, egyfajta gyors segtsg nyjts.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

33

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

34

1.5 HTML-t rtelmez komponensek


A Javaban hasznlt komponensek egy rsze kpes a szvegknt kapott HTML tag-eket rtelmezni Ilyen komponensek pldul a
JLabel lb=new JLabel("Itt a piros?"); lb.setToolTipText("Nem nyert! :(");
cmke, segdszveg, gomb.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

35

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

36

Pldul:

String html="<html><body>Brmi megjelenthet," +"ami HTML tagek segtsgvel lerhat"+ "<hr>"+ "pldul tblzat:<br>"+ "<table border=1>"+ "<tr><td></td><td></td></tr>"+ "</table>"+ "<br>"+ "felsorols:<br>"+ "<li>1</li>"+ "<li>2</li>"+ "</body> </html>"; lb.setText(html);
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

37

2005.11.28.

38

-Segdszveg

- Gomb

setToolTipText("<html><h1> <font color='#ff0000'> NYERT!!! </h1></html>")

bt.setText("<html><h1>G</h1> <h2>O</h2> <h3>M</h3> <h4>B</h4></html>");


39
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

40

2. Elrendezsi stratgik
Ismerjk mr a: sorfolytonos elrendezst (FlowLayout), a rcsos elrendezst (GridLayout) a hatrmenti elrendezst (BorderLayout).
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

A tovbbiakban jabb elrendezseket ismernk meg, melyek segtsgnkre lesznek a felhasznli fellet kialaktsban.
null layout BoxLayout CardLayout GridBagLayout ScrollPaneLayout

2005.11.28.

41

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

42

2.1 null elrendezs


Nincsen elre meghatrozott elrendezs. Minden komponens pozcijt s mrett meg kell hatroznunk.

2.2 BoxLayout elrendezs


A komponenseket vzszintes, vagy fggleges irnyban helyezhetjk el egyms mell.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

43

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

44

A komponens vonalhoz kpesti helyzett egy 0 <= x <=1 rtkkel adhatjuk meg (x float tpus). Megvalsts: pn1.setLayout(new BoxLayout( pn1,BoxLayout.Y_AXIS)); pn2.setLayout(new BoxLayout( pn2,BoxLayout.X_AXIS)); bt1.setAlignmentX((float) 0.5); bt6.setAlignmentY((float) 1.0);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2.3 CardLayout elrendezs

45

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

46

Container panelok=new Container(); CardLayout cl = new CardLayout(); panelok.setLayout(cl); panelok.add(pn1, "fehr"); panelok.add(pn2, "srga"); panelok.add(pn3, "narancs"); panelok.add(pn4, "piros"); panelok.add(pn5, "cin); panelok.add(pn6, "kk"); panelok.add(pn7, "zld"); panelok.add(pn8, "pink"); panelok.add(pn9, "mlyva"); panelok.add(pn10, "fekete");
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

void btElso_actionPerformed(ActionEvent e) { cl.first(panelok); } void btUtolso_actionPerformed(ActionEvent e) { cl.last(panelok); } void btElozo_actionPerformed(ActionEvent e) { cl.previous(panelok); } void btKov_actionPerformed(ActionEvent e) { cl.next(panelok); }
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

47

2005.11.28.

48

2.4 GridBagLayout elrendezs


Rugalmas elrendezs menedzser. Rendszertelen rcsszerkezetben helyezi el a komponenseket. Egy komponens akr egy, akr tbb cellt fedhet le. Egy cella csak egy komponenshez tartozhat. A komponens elhelyezkedsnek meghatrozst segti a GridBagConstrains osztly objektuma.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

tul. komp. bt1 bt2 bt3 bt4 bt5

x 2 2 1 0 0

y 3 1 1 0 1

w 2 2 1 4 1

h 1 2 3 1 3

wx

wy

anchor

fill

insets dx 0 0 0 0 0

dy 0 0 0 0 0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

CENTER HORIZONTAL 0,0,0,0 CENTER BOTH CENTER VERTICAL CENTER VERTICAL 0,0,0,0 0,0,0,0 0,0,0,0

CENTER HORIZONTAL 0,0,0,0

49

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

50

2.5 ScrollPaneLayout elrendezs


9 rszre oszlik

Ezt az elrendezst hasznlja a JScrollPane.


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

51

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

52

3. Specilis panelek
3.1 3.2 3.3 3.4 3.5 Tbboldalas panel Kettoszthat panel Grgethet panel Tbbrteg panel Bels ablakot tartalmaz panel

Tbboldalas panel, mely egyms el helyezett, flek segtsgvel elrhet panelokbl ll. Kettoszthat panel, mely egy terleten kt panelt jelent meg egyms mellett, vagy egyms alatt. Bellthat, hogy a panelek hogyan osztozzanak a terleten. Grgethet panel, mely adott terlett mutatja csak a teljes panelnek, a tbbi rsz grgets segtsgvel tehet lthatv. Tbbrteg panel, mely a rajta elhelyezett panelokat rtegekknt kezeli, hozzjuk prioritst rendel, ami meghatrozza a panelok sorrendjt, s ez ltal a lthat terleteket is. Bels ablakot tartalmaz panel, mely a tbbablakos megjelentst teszi lehetv.
53
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

54

3.1 Tbboldalas panel - JTabbedPane


Egyms el helyezett, flek segtsgvel elrhet panelokbl ll. A tbboldalas panel krtys elrendezst alkalmaz (CardLayout).

Egy fl ltrehozsa gy, hogy kp s felirat is legyen rajta:


JPanel pnK = new JPanel(); JTabbedPane tp=new JTabbedPane(); tp.addTab("Kutyk", new ImageIcon("images/D.gif"), pnK);

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

55

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

56

3.2 Kettoszthat panel - JSplitPane


Kt komponenst szeretnnk egyidejleg megjelenteni gy, hogy a lthatsgi arnyuk a program futsa kzben vltoztathat legyen.
VERTICAL_SPLIT HORIZONTAL_SPLIT

A kettoszt panelnl a kvetkez belltsokat kell elvgeznnk:


JSplitPane splitPane = new JSplitPane(); Vzszintes feloszts legyen splitPane.setOrientation( JSplitPane.VERTICAL_SPLIT); Mindkt tartomnyba helyezznk el egy-egy panelt splitPane.add(pnB, JSplitPane.LEFT); splitPane.add(pnJ, JSplitPane.RIGHT); A feloszts gombnyomsra maximalizlhat legyen splitPane.setOneTouchExpandable(true);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

57

58

3.3 Grgethet panel - JScrollPane


Olyan esetekben alkalmazunk, mikor a lthat terlet nem tudja lefedni teljesen a ltni kvnt terletet. A grgethet panel elrendezsmenedzsere a ScrollPaneLayout.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

59

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

60

10

JViewport vonalzoV=new JViewport(); JViewport vonalzoF=new JViewport(); JScrollPane sp = new JScrollPane(); JLabel lbKep = new JLabel(new ImageIcon("images/kep.jpg")); JLabel lbV = new JLabel( new ImageIcon("images/vonalzoV.jpg")); JLabel lbF = new JLabel( new ImageIcon("images/vonalzoF.jpg")); lbKep.setHorizontalAlignment(SwingConstants.LEFT); lbKep.setVerticalAlignment(SwingConstants.TOP); vonalzoV.add(lbV, null); vonalzoF.add(lbF, null); sp.setRowHeader(vonalzoF); sp.setColumnHeader(vonalzoV); sp.getViewport().add(lbKep, null);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

3.4 Tbbrteg panel - JLayeredPane


Olyan esetekben alkalmazzuk, mikor a megjelenteni kvnt elemek kztt prioritsi sorrendet szeretnnk rvnyesteni.

61

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

62

Elredefinilt rtegek
0 100 200 300 400

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

63

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

64

3.5 Bels ablakokat tartalmaz panel JDesktopPane


JLayeredPane lp = new JLayeredPane(); JLabel lb=new JLabel(zenet); int maxSzint=0; lp.add(lb, new Integer(++maxSzint)); lp.setLayer(lb,maxSzint);

Ha a megszokott viselkedsi forma szerint szeretnnk bels ablakainkat kezelni, akkor a vlasztott panel a tbbrteg panel egy specilis leszrmazottja, a JDesktopPane legyen.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

65

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

66

11

Bels ablak ltrehozsa


JInternalFrame( String title, // a belsablak cme boolean resizable, // tmretezhet-e boolean closable, // bezrhat-e boolean maximizable,// maximalizlhat-e boolean iconifiable) // ikonizlhat-e

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

67

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

68

Fprogramban: JDesktopPane dp=new JDesktopPane(); dp.add(new BelsoAblak(++db)); public class BelsoAblak extends JInternalFrame { public BelsoAblak(int db) { super(+db+. Ablak, true, true, false, true); setVisible(true); } }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

A bels ablakhoz tartoz esemnyfigyel


Esemny osztly
InternalFrameEvent

Figyel interfsz
InternalFrameListener

Felfz metdus
addInternalFrameListener

Lekezel metdus internalFrameActivated() internalFrameClosed() internalFrameClosing() internalFrameDeactivated() internalFrameDeiconified() internalFrameIconified() internalFrameOpened() 70

69

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Az opcipanel (JOptionPane) bels ablakokra vonatkoz lehetsgei


showInternalConfirmDialog() showInternalInputDialog() showInternalMessageDialog() showInternalOptionDialog()

JDesktopPane - DesktopManager
A DesktopManager interfsz segtsgvel a JDesktopPane-en elhelyezett bels ablakok llapott mdosthatjuk. Legegyszerbb implementcijt a DefaultDesktopManager osztly adja.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

71

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

72

12

Pl:
JDesktopPane dp = new JDesktopPane(); DefaultDesktopManager ddm = new DefaultDesktopManager(); JInternalFrame iF= new JInternalFrame(Bels ablak); dp.setDesktopManager(ddm); dp.add(iF); iF.isIconifiable(); iF.setIconifiable(false); ddm.iconifyFrame(iF);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

void activateFrame(JInternalFrame f) void beginDraggingFrame(JComponent f) void beginResizingFrame(JComponent f, int direction) void closeFrame(JInternalFrame f) void deactivateFrame(JInternalFrame f) void deiconifyFrame(JInternalFrame f) void dragFrame(JComponent f, int newX, int newY) void endDraggingFrame(JComponent f) void endResizingFrame(JComponent f) void iconifyFrame(JInternalFrame f) void maximizeFrame(JInternalFrame f) void minimizeFrame(JInternalFrame f) void openFrame(JInternalFrame f) void resizeFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) void setBoundsForFrame(JComponent f, int newX, int newY, int newWidth, int newHeight)
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

73

74

4. Adatbeviteli lehetsgek
4.1 4.2 4.3 4.4 rtkkivlaszt grgetsv JSlider JSpinner osztly s a hozz kapcsold modellek Formzott beviteli mez JFormattedTextField Jelsz mez JPasswordField

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

75

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

76

4.1 rtkkivlaszt grgetsv JSlider

JSlider slider = new JSlider(); Hashtable sebesseg=new Hashtable(); sebesseg.put(new Integer(0), new JLabel("Stop")); sebesseg.put(new Integer(100), new JLabel("Lass")); sebesseg.put(new Integer(500), new JLabel("Norml")); sebesseg.put(new Integer(1000), new JLabel("Gyors"));
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

77

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

78

13

slider.setLabelTable(sebesseg); slider.setPaintLabels(true); slider.setOrientation(JSlider.VERTICAL); slider.setPaintTrack(true); slider.setPaintTicks(true); slider.setMinimum(0); slider.setMaximum(1000); slider.setMinorTickSpacing(100); slider.addChangeListener(this); void slider_stateChanged(ChangeEvent e) { timer.setDelay(slider.getValue()); }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

4.2 JSpinner osztly s a hozz kapcsold modellek


Szmok megjelentshez a SpinnerNumberModel osztly ltal meghatrozott modellt rdemes vlasztani. Dtum adatok megjelentshez a SpinnerDateModel a legmegfelelbb. Egyb, lista szeren felsorolt adatok megjelentshez a SpinnerListModel nyjt megfelel lehetsgeket.
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

79

2005.11.28.

80

SpinnerDateModel
Calendar naptar = Calendar.getInstance(); SpinnerDateModel sdm; Date aktDatum = naptar.getTime(); naptar.add(Calendar.YEAR, -100); Date elsoDatum = naptar.getTime(); naptar.add(Calendar.YEAR, +200); Date utolsoDatum = naptar.getTime(); sdm = new SpinnerDateModel(aktDatum, elsoDatum, utolsoDatum, Calendar.YEAR);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

SpinnerListModel JSpinner spLista = new JSpinner(); SpinnerListModel slm; String[] listaElemek = new String[] { "Htf", "Kedd", "Szerda", "Cstrtk", "Pntek", "Szombat", "Vasrnap"}; slm = new SpinnerListModel(listaElemek);

81

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

82

CyclingSpinnerListModel public class CyclingSpinnerListModel extends SpinnerListModel { public CyclingSpinnerListModel(Object[] values) { super(values); firstValue = values[0]; lastValue = values[values.length - 1]; } public Object getNextValue() { } public Object getPreviousValue() { } }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

JSpinner spKorbeLista = new JSpinner(); CyclingSpinnerListModel cslm; cslm = new CyclingSpinnerListModel(listaElemek);

SpinnerNumberModel
JSpinner spSzam = new JSpinner(); SpinnerNumberModel snm; snm = new SpinnerNumberModel(50, 0, 100, 3);

83

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

84

14

4.3 Formzott beviteli mez JFormattedTextField


Modellek belltsa
spDatum.setModel(sdm); spLista.setModel(slm); spKorbeLista.setModel(cslm); spSzam.setModel(snm);
Szmknt, ebben az esetben a NumberFormat osztlyt hasznljuk. Dtumknt, ekkor a DateFormat osztlyt hvjuk segtsgl.

Az adatot megjelenthetjk:
Egyni formtumban, melyet a mask karakterek segtsgvel tetszs szerint hatrozhatunk meg. A mask sszelltsban hasznlhat karaktereket a MaskFormatter osztly adja meg.
85
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

86

NumberFormat szamForma, NumberFormat penzForma; MaskFormatter mobilForma; szamForma=NumberFormat.getNumberInstance(); szamForma.setMinimumFractionDigits(3); penzForma=NumberFormat.getIntegerInstance(); penzForma.setMinimumFractionDigits(0); try { mobilForma = new MaskFormatter("(##)/###-##-##"); } catch (ParseException ex) {..}
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

ftfSzam = new JFormattedTextField(szamForma); ftfPenz = new JFormattedTextField(penzForma); ftfTel = new JFormattedTextField(mobilForma); ftfSzam.addPropertyChangeListener("value", this); ftfPenz.addPropertyChangeListener("value", this); ftfTel.addPropertyChangeListener("value", this);

87

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

88

public void propertyChange(PropertyChangeEvent e) { Object source = e.getSource(); if (source == ftfSzam) { szam = ( (Number)ftfSzam.getValue()).doubleValue(); } else if (source == ftfPenz) { penz = ( (Number) ftfPenz.getValue()).longValue(); } else if (source == ftfTel) { mobil = ftfTel.getValue().toString(); } }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Mask karakterek:
Karakter Lers
# Szmjegy (Character.isDigit). Brmely bet nagybets formban (Character.isUpperCase). Brmely bet kisbets formban (Character.isLowerCase). Brmely bet vagy szm (Character.isLetter vagy Character.isDigit). Brmely bet (Character.isLetter). Joker karakter. Akrmilyen karaktert takarhat. Brmely hexadecimlis karakter (0-9, a-f vagy A-F).
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

' (aposztrof) Specilis karakterek hasznlathoz szksges karakter. U L A ? * H


2005.11.28.

89

90

15

Pldul:
irnytszm megadsa: #### vezetknv megadsa: U* ltalnos rendszm megadsa: ???-### gyeljnk a specilis esetekre! Pldul lteznek egyedi rendszmok.

4.4 Jelsz mez JPasswordField


Olyan esetekben alkalmazzuk ezt a komponenst, ha nem szeretnnk lttatni a bert karaktereket.
lettt karakter rtke megmarad egy jokerkarakter (echoChar) kpe jelenik meg

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

91

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

92

5. Kijelzk
JProgressBar
Az osztlybl ltrehozott objektum a fellet komponenseknt jelenthet meg.

JProgressMonitor
Az osztlybl ltrehozott objektum kln dialgusablakban jelenik meg.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

93

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

94

6. Vezrlsi technikk
6.1 6.2 6.3 Felbukkan men Eszkzsor Elre definilt esemnyfigyelk

6.1 Felbukkan men


Komponensekhez rendelt men.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

95

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

96

16

Elhelyezkedsk fgghet:
az adott komponenstl, az egr aktulis pozcijtl, de egy tetszleges koordintban is megjelenthetjk ket.

A felbukkan men egr esemnynek hatsra jelenik meg abban az esetben, ha van megjelenthet pldnya.
if (e.isPopupTrigger()) { popup.show(e.getComponent(),e.getX(), e.getY()); }

Nem lthatk llandan, felbukkansuk valamely esemnyhez kapcsoldik. Szerkezett tekintve ugyanolyan, mint az ltalnos men.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

A sajt esemnyeit ltalban nem szoktk alkalmazni, hiszen azok csak a megjelens, eltns, megszns llapotot kezelik le.
97
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

98

EsemOsztly PopupMenuEvent

Figyel interfsz PopupMenuListener

Felfz metdus addPopupMenuListener

Lekezel metdus popupMenuCanceled popupMenuWillBecomeInvisible popupMenuWillBecomeVisible

6.2 Eszkzsor
Az eszkzsor ToolBarLayout elrendezst hasznl, mely a FlowLayout elrendezsmenedzser leszrmazottja. http://java.sun.com/developer/techDocs /hi/repository/

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

99

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

100

6.3 Elre definilt esemnyfigyelk


Egy alkalmazs szmos esemnyt kezel, pldul
egresemnyeket, billentyesemnyeket, Az Action interfsz egy specilis esemnyfigyelt (ActionListener) valst meg. Legegyszerbb implementcijt az AbstractAction osztly adja.

Ugyanazt az esemnyt a grafikus fellet klnbz helyeirl generlhatjuk, pldul


menkbl, eszkzsorbl ...
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

101

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

102

17

Az AbstractAction osztlynak a kvetkez leszrmazottai vannak:


TextAction
DefaultEditorKit.BeepAction DefaultEditorKit.CopyAction DefaultEditorKit.CutAction DefaultEditorKit.DefaultKeyTypedAction DefaultEditorKit.InsertBreakAction DefaultEditorKit.InsertContentAction DefaultEditorKit.InsertTabAction DefaultEditorKit.PasteAction StyledEditorKit.StyledTextAction
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

StyledEditorKit.StyledTextAction
StyledEditorKit.AlignmentAction StyledEditorKit.BoldAction StyledEditorKit.FontFamilyAction StyledEditorKit.FontSizeAction StyledEditorKit.ForegroundAction StyledEditorKit.ItalicAction StyledEditorKit.UnderlineAction
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

103

2005.11.28.

104

Az elre definilt esemnyfigyelket az alkalmazsainkban szabadon felhasznlhatjuk.


mBetumeret.add(new StyledEditorKit. FontSizeAction("12", 12)); mBetuszin.add(new StyledEditorKit. ForegroundAction("Zld", Color.green));

A stlusjegyeknl kln vltozba lementjk az akcit, tnevezzk, s csak ezutn helyezzk el a menn. action = new StyledEditorKit.BoldAction(); action.putValue(Action.NAME, "Flkvr"); mBetustilus.add( miFelkover=new JMenuItem(action));

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

105

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

106

A bettpusokat lekrjk a rendszertl, s az gy kapott eredmny alapjn tltjk fel a ment. String[] fontok = Toolkit.getDefaultToolkit().getFontList(); for (int i = 0; i < fontok.length; i++) { mBetutipus.add( new StyledEditorKit.FontFamilyAction( fontok[i],fontok[i])); }
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

7. Fastruktra
ngy elnevezst hasznlunk a fa elemeire:
gykr (root), szl (parent), gyerek (child), levl (leaf).

107

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

108

18

Fastruktra ltrehozsa:
Objektum tmb segtsgvel Vektor segtsgvel Hasttbla segtsgvel Fa csompontok megadsval

Objektum tmb segtsgvel:


int i=0; for(char c='A'; c<='H'; c++) o[i++]=""+c; tree=new JTree(o);

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

109

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

110

Vektor segtsgvel:
for(char c='A'; c<='H'; c++) v.add(""+c); tree=new JTree(v);

Hasttbla segtsgvel:
for (char c = 'A'; c <= 'H'; c++) { h.put("" + c, "" + c); } tree = new JTree(h);

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

111

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

112

Fa csompontok megadsval:
Vltoztathat fa csompontjnak ltrehozsa: sz1 = new DefaultMutableTreeNode("B"); sz2 = new DefaultMutableTreeNode("E"); Csompontok egymshoz rendelse: sz1.add(sz2); tree = new JTree(dmtn);

DefaultMutableTreeNode dmtn, sz1, sz2; dmtn = new DefaultMutableTreeNode("A"); sz1 = new DefaultMutableTreeNode("B"); sz2 = new DefaultMutableTreeNode("E"); sz1.add(sz2); sz2 = new DefaultMutableTreeNode("F"); sz1.add(sz2); dmtn.add(sz1); sz1 = new DefaultMutableTreeNode("C"); sz2 = new DefaultMutableTreeNode("G"); sz1.add(sz2); dmtn.add(sz1); sz1 = new DefaultMutableTreeNode("D"); sz2 = new DefaultMutableTreeNode("H"); sz1.add(sz2); dmtn.add(sz1); tree = new JTree(dmtn);

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

113

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

114

19

Fa adatmodellje
TreeModel interfsz definilja
informcikat kaphatunk: az adott csompont gyerekeirl, az adott gyerekek szleirl, a gykrrl

Fa szerkezete
vltoztathat a fa elemeit a MutableTreeNode interfsz valstja meg. vgleges a fa elemeit a TreeNode interfsz valstja meg.

Legegyszerbb implementcijt a DefaultTreeModel osztly adja

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

115

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

116

Fa adatainak kijellse, kijellsek nyilvntartsa


TreeSelectionModel

Kijellssel kapcsolatos mveletek:


Az egsz fra:
Kijells mdjnak megadsa
akrhny fapont kivlasztsa, DISCONTIGUOUS_TREE_SELECTION egybefgg fapont-csoport kivlasztsa, CONTIGUOUS_TREE_SELECTION egyetlen fapont kivlasztsa SINGLE_TREE_SELECTION.

Egsz fa kijellse. Kijells megszntetse.


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

117

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

118

Megjelents
Fapontokra:
Kijellt fapontok Kijellt fapontok szma Kijellt fapontok indexe Adott fapont ki van-e vlasztva Legkisebb/legnagyobb kijellt index Hozzadhatunk j fapontot a kijellshez Megszntethetjk a kijellst fapontokon Mdosthatjuk a kijells sszettelt
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

TreeCellRenderer Legegyszerbb implementcijt a DefaultTreeCellRenderer osztly adja.

119

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

120

20

Szerkeszts
TreeCellEditor Legegyszerbb implementcijt a DefaultTreeCellEditor osztly adja.

Fa alapbelltsai
dtcr = new DefaultTreeCellRenderer(); dtce = new DefaultTreeCellEditor(this,dtcr); root = new DefaultMutableTreeNode("gykr"); treeModel = new DefaultTreeModel(root); setModel(treeModel); setEditable(true); getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); setAutoscrolls(true); setCellEditor(dtce); setCellRenderer(dtcr);
121
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

122

dtcr.setBackgroundSelectionColor(color1); dtcr.setTextSelectionColor(color2); dtcr.setBackgroundNonSelectionColor(color3); dtcr.setTextNonSelectionColor(color4); dtcr.setOpenIcon(icon1); dtcr.setClosedIcon(icon2); dtcr.setLeafIcon(icon3);


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

123

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

124

8. Tblzat
sszetartoz adatok megjelentse. Sorokbl (rekordokbl) s oszlopokbl ll. Egy oszlopban azonos tpus adatok szerepelnek. Egy sor sszetartoz adatokat tartalmaz.

Minden egyes oszlopnak van:


tpusa, ami akr primitv akr referencia tpus lehet; fejlce, mely szveges formban megadja a tartalmazott adatok rvid lerst; megjelentse, melyet a TableCellRenderer interfsz segtsgvel hatrozhatunk meg; szerkeszthetsge, melyet a TableCellEditor interfsz segtsgvel hatrozhatunk meg.
125
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

126

21

Az oszlop fejlce
A JTableHeader osztly valstja meg. A fejlc ltal tmretezhet vagy elmozgathat egy oszlop. Fejlcre kattintssal sorba rendezhetk a tblzat sorai (rekordjai) az adott oszlop szerint. A tblzatok oszlopait a TabelColumnModel reprezentlja. Az oszlopmodellen keresztl lehet a tblzathoz
oszlopot hozzadni, meglv oszlopot trlni, oszlopok kivlasztst szablyozni.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Kijells
A tblzat adatainak kijellsrt illetve a kijellsek nyilvntartsrt a ListSelectionModel a felels.

127

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

128

Kijellssel kapcsolatos mveletek:


Az egsz tblra:
Kijells mdjnak megadsa (sorok kijellse egyesvel, sszefgg vagy fggetlen intervallumban trtnjen). Egsz tbla kijellse. Kijells megszntetse.

Sorokra illetve oszlopokra:


Lekrdezhetjk a tblzat egy kijellt sort/oszlopt. Lekrdezhetjk a tblzat kijellt sorait/oszlopait. Lekrdezhetjk a kijellt sorok/oszlopok szmt. Lekrdezhetjk, hogy egy adott sor/oszlop ki van-e jellve. Hozzadhatunk jabb sorokat/oszlopokat a kijellshez. Megszntethetjk a kijellst sorokon/oszlopokon. Mdosthatjuk a kijells intervallumt. 129
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

130

Adat reprezentls
Cellra:
Lekrdezhetjk, hogy egy adott cella ki van-e jellve.

A tblzat adatainak reprezentlsra a TableModel interfsz hasznlhat. A TableModel interfsz ltal informcikat kaphatunk:
a tblzat sorainak/oszlopainak szmrl, az oszlopok nevrl, az oszlopok adatainak tpusrl, a tblzat cellinak rtkeirl. Figyelhetjk a tblzat sorain/oszlopain vgzett vltoztatsokat.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

131

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

132

22

Az adathordoz osztly
Feladat TableTest
Hozzunk ltre egy adathalmazt. A kvetkez adatokat troljuk benne: sorszm, nv, kor, fnykp, kedvenc szn, tagsg. Az adatokat tblzatban jelentsk meg. Az adatok szerkeszthetk: - a nv legrdl listn, - a fnykp fjldialguson, - a szn szndialguson, - a tagsg jellmezn keresztl. Az adatokat vletlenszm genertor segtsgvel lltjuk el.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

133

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

134

Tblzat ksztse: Object tmbbel


Object[ ][ ] adatok=new Object[10][6]; Object[] oszlopok=new Object[6];

Vectorral
Vector adatok=new Vector(); Vector oszlopok=new Vector();

String[] nevek=new String{}; String[] oszlopnevek=new String[]{"Sorszm","Nv", "Kor", "Kp", "Szn", "Tag"};
for(int i=0; i<10; i++){ Object[] adat=new Adat(i, nevek).getAdatTomb(); for(int j=0; j<oszlopnevek.length; j++) adatok[i][j]=adat[j]; } for(int i=0; i<oszlopnevek.length; i++) oszlopok.add(oszlopnevek[i]);

String[] nevek=new String{}; String[] oszlopnevek=new String[]{"Sorszm","Nv", "Kor", "Kp", "Szn", "Tag"};
for(int i=1; i<=10; i++) adatok.add(new Adat(i,nevek).getAdatVektor()); for(int i=0; i<oszlopnevek.length; i++) oszlopok.add(oszlopnevek[i]);

JTable table=new JTable(adatok,oszlopnevek);


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

tablazat=new JTable(adatok,oszlopok);
135
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

136

j sor felvtele
szksgnk van a TableModelre,
Vagy lekrjk a tblzattl, vagy ltrehozunk egyet gy, hogy alkalmazzuk a legegyszerbb implementcijt a DefaultTableModelt.

az j adat hozzadsa ilyen egyszerv vlik: Adat adat=new Adat(++db, nevek); dtm.addRow(adat.getAdatVektor());

table=new JTable(adatok,oszlopnevek); helyett dtm=new DefaultTableModel(adatok,oszlopnevek); table.setModel(dtm);


2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

137

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

138

23

Sor trlse
Ki kell tudnunk jellni. A tbla kivlasztott sorainak vezrlst a ListSelectionModel interfsz vgzi. A kijellskor ListSelectionEvent esemny keletkezik.
Figyel interfsz ListSelection ListSelection-Event Listener
2005.11.28.

EsemOsztly

Lekezel metdus addListSelection valueChanged -Listener 139

Felfz metdus

dlsm=new DefaultListSelectionModel(); dlsm.setSelectionMode( DefaultListSelectionModel.SINGLE_SELECTION); dlsm.addListSelectionListener( new javax.swing.event.ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { } }); table.setSelectionModel(dlsm); dtm.removeRow(dlsm.getMinSelectionIndex());
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

140

Adatmodell
A tblzat adatmodelljt a TableModel interfsz reprezentlja.
Hozzunk ltre egy osztlyt, melynek se a DefaultTableModel osztly lesz. Ne felejtsk el tlltani a tblzat modelljt az j modellre.
dtm=new TablazatModel(adatok,oszlopnevek);
table.setModel(dtm);

Adatok szerkesztse
Szerkeszteni ktflekppen lehet az adatokat:
helyben dialgus ablakban (javasolt)

A tblzat celli alaprtelmezsben helyben szerkeszthetek JTextField komponens segtsgvel. A szerkeszthetsg vezrlst a TableCellEditor interfsz vgzi.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

141

142

Egyes tpusok adatainak megjelentshez a kvetkez komponenseket hasznljk ltalban: Boolean Jellmez (JCheckBox). Number Jobbra igaztott cmke (JLabel). Double, Float Formzott beviteli mez (JFormattedTextField) tizedesjegyek szmnak megadsval. Date Cmkben megjelentett dtum formtum vagy formzott beviteli mez (DateFormat). ImageIcon, Icon Kzpre igaztott cmke. Object Cmkben jelentjk meg az objektum szveges reprezentcijt.
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Adatmodellt reprezentl osztlyunkban rjuk fell a


public Class getColumnClass(int columnIndex) { return Object.class; }

metdust gy, hogy vals osztlyt adjon vissza (ne Object-et minden esetbe). Ltrehozunk egy JComboBoxot, feltltjk rtkekkel, majd megadjuk a tblzatnak, hogy az adott oszlop ezt a szerkesztsi mdot alkalmazza.
143
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

144

24

JComboBox cb=new JComboBox(nevek); TableColumn nevoszlop= table.getColumnModel().getColumn(1); nevoszlop.setCellEditor(new DefaultCellEditor(cb));

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

145

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

146

9. Dokumentumkezels
A szveg komponenseket hrom csoportra oszthatjuk:
egysoros beviteli mezk
JTextField JPasswordField JFormattedTextField

tbbsoros beviteli mez


JTextArea

stlusos szvegek megjelentst vgz komponensek


JEditorPane JTextPane
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

147

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

148

A Javaban hromfle dokumentumtpus kezelsre van lehetsg:


sima szveg (text/plain)
kezelst a DefaultEditorKit osztly segti

rtf szveg (text/rtf)


kezelst az RTFEditorKit osztly segti

html szveg (text/html)


kezelst a HTMLEditorKit osztly segti

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

149

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

150

25

Kt j esemny lekezelsre is szksg lehet, ha dokumentumokat szeretnnk kezelni:


A szveg kurzor esemnyt kezel CaretEvent osztlyra, ha a szveg kurzor mozgst szeretnnk kvetni. A hivatkozsokat kezel HyperlinkEvent osztlyra, mely hivatkozsok megszokott mdon val hasznlatt teszi lehetv a html fjlokban.
EsemOsztly CaretEvent HyperlinkEvent Figyel interfsz Felfz metdus Lekezel metdus

CaretListener addCaretListener caretUpdate HyperlinkListener addHyperlinkListener hyperlinkUpdate

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

151

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

152

Feladat

A feladat megoldshoz JEditorPane komponenst kell alkalmaznunk. Az objektum ltal megjelentett fjlt egy fjldialgus ablak segtsgvel adjuk meg. Az URL osztly egy objektumt hozzuk ltre a fjl elrsi tjnak megadsval.
File f; URL url = new URL("file:" + f.getAbsolutePath());

Vltoztassuk meg az editorPane ltal megjelentend oldalt.


JEditorPane ep = new JEditorPane(); ep.setPage(url);
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

153

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

154

A hivatkozs s az egr kapcsolata


Az egr nincs a hivatkozs fltt Az egr a hivatkozs fl r
HyperlinkEvent.EventType.ENTERED

Az egrrel a hivatkozsra kattintunk


HyperlinkEvent.EventType.ACTIVATED

Elhagyjuk az egrrel a hivatkozst


HyperlinkEvent.EventType.EXITED

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

155

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

156

26

Alkalmazott stlusjegyek:
alap stlus, felkover dolt alahuzottkicsi nagy piros Kek boci 2005.11.28.

Megvalsts:
Meg kell adnunk a szveget, a stlusokat, s ssze kell prostanunk ket (tmbk). A boci stlusnl figyeljnk arra, hogy szerepeljen a stlushoz megjelentend szveg. Lekrdezzk a dokumentumok megjelentshez hasznlt stlust, majd ebbl kiindulva megadjuk az ltalunk hasznlt alap stlus tulajdonsgait. Erre fogjuk felpteni a tbbi stlusunkat.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

alaprtelmezsben hasznlt de Dialog bettpussal alap + flkvr alap + dlt alap + alhzott alap, de 8-as betmrettel alap, de 16-os betmrettel alap, de piros betsznnel alap, de kk betsznnel kzpre igaztott boci.jpg kp
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

157

158

JTextPane tp = new JTextPane(); Style def=StyleContext.getDefaultStyleContext(). getStyle(StyleContext.DEFAULT_STYLE); Style alap=tp.addStyle("alap",def); StyleConstants.setFontFamily(alap,"Dialog"); Style aktS=tp.addStyle("felkover",alap); StyleConstants.setBold(aktS,true); aktS=tp.addStyle("dolt",alap); StyleConstants.setItalic(aktS,true); aktS=tp.addStyle("alahuzott",alap); StyleConstants.setUnderline(aktS,true);
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

aktStilus=tp.addStyle("kicsi",alap); StyleConstants.setFontSize(aktS,8); aktStilus=tp.addStyle("nagy",alap); StyleConstants.setFontSize(aktS,16); aktStilus=tp.addStyle("piros",alap); StyleConstants.setForeground(aktS,Color.red); aktStilus=tp.addStyle("kek",alap); StyleConstants.setForeground(aktS,Color.blue); aktStilus=tp.addStyle("boci",alap); StyleConstants.setAlignment(aktS, StyleConstants.ALIGN_CENTER); StyleConstants.setIcon(aktS,new ImageIcon("images/boci.jpg"));
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

159

160

Mr csak a stlusokat s a szvegrszeket ssze kell prostanunk, s a textPane dokumentumhoz hozzadnunk.


Document doc=tp.getDocument(); try{ for(int i=0; i<szoveg.length; i++){ doc.insertString(doc.getLength(), szoveg[i],tp.getStyle(stilus[i])); } } catch(BadLocationException ex){ System.out.println("Nem lehet beilleszteni a szveget!"); } Alkalmazsfejlesztsi technolgia
2005.11.28. Ksztette: Csndes Emese

10. Alkalmazsok kztti adatcsere


A Drag and Drop grafikus manipulcik segtsgvel vgzett adattvitel az alkalmazsok kztt, vagy az alkalmazs egyik rszbl a msikba. Platformfggetlensg Forrs Cl

161

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

162

27

Adattvitel tmogatsa
Komponens JColorChooser** JEditorPane JFileChooser*** JFormattedTextField LJist JPasswordField JTable JTextArea JTextField JTextPane JTree
2005.11.28.

Drag Copy*

Drag Move*

Drop

Cut

Copy

Paste

* Az adott komponensnl a setDragEnabled(true) rtk belltsa mellett. ** Az importlt, exportlt adat tpusa java.awt.Color. *** Fjlnv kerl exportlsra, a java.io.File objektum exportlsa nem engedlyezett.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

163

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

164

Adattvitel
Az Adattvitel (cut and paste) alkalmazsok kztti vagy egy alkalmazs klnbz rszei kztti szveges, grafikus, vagy brmilyen adat tvitele. Szksg van hozz egy virtulis vglapra, melyen ideiglenesen el lehet helyezni a mozgatni kvnt adatot. A drag and drop mveletnl tbbfle lehetsgnk van az tvinni kvnt adat meghatrozsra. Alaprtelmezs: a kijellt elem szveges reprezentcija.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

165

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

166

Egyb tulajdonsg tvitele


component.setTransferHandler(
new TransferHandler("text"));

Komponenstl fggetlen szveg tvitele


A komponens actionCommand tulajdonsgnak megadjuk a kvnt szveget, s ezt a tulajdonsgot jelljk ki az tvitelhez.

A bemenetknt tadott objektum a kvetkez formtum:


public TransferHandler(String property)

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

167

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

168

28

Mozgathatsg felttele
Ahhoz, hogy egy objektum mozgathat legyen:
Implementlnia kell a java.awt.datatransfer.Transferable interfszt. Meg kell hatroznia egy adatformtumot. Minden adatformtum esetben hrom informcit kell megadni:
a formtum logikai nevt, a formtum hivatalos nevt, egy reprezentcis osztlyt az adatformtumhoz, mely magt az adatmozgatst teszi lehetv.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Reprezentcis osztly
Meghatrozza, hogy milyen tpus objektum kerl tadsra a kld s a fogad kztt. A DataFlavor osztly adatformtumot reprezentl.
getTransferData() A Java osztly tpus visszatrsi rtkeit adja.

A DataFlavor objektum hasznlatval egyszeren sszehasonlthatv vlnak a klnbz adatformtumok.


A meglv kt formtum: DataFlavor.stringFlavor DataFlavor.plainTextFlavor
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

169

2005.11.28.

170

Vglap
A Vglap alkalmazsbl kivgott, vagy kimsolt adatok trolsra leggyakrabban hasznlt trolhely. A legtbb alkalmazsbl elrhet. Vglap segtsgvel valsthat meg az adatramls Java s nem Java alkalmazsok kztt. java.awt.datatransfer.Clipboard java.awt.Toolkit.getSystemClipboard()
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Kivgs, msols, beilleszts

171

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

172

void btCut_actionPerformed(ActionEvent e) { ta.cut(); } void btCopy_actionPerformed(ActionEvent e) { ta.copy(); } void btPaste_actionPerformed(ActionEvent e) { ta.paste(); }

Vglap mveletek
public Transferable getContents(Object requestor) Az aktulis vglap tartalmt adja vissza. Ez vagy null, vagy az adat. A metdus IllegalStateException kivtelt dob, ha a vglap nem elrhet. public void setContents(Transferable contents, ClipboardOwner owner) Az aktulis vglap tartalmt trjuk. Hogy ezt megtehessk az osztlyunknak implementlnia kell a ClipboardOwner interfszt.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

173

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

174

29

Transferable interfsz
public DataFlavor[ ] getTransferDataFlavors() public boolean isDataFlavorSupported( DataFlavor flavor) public Object getTransferData( DataFlavor flavor)

public DataFlavor[ ] getTransferDataFlavors()


Megadja az alkalmazhat DataFlavor-ket gy, hogy elsknt emlti a legspecilisabbat, s utolsknt a legltalnosabbat. pl: DataFlavor[] tomb=adat.getTransferDataFlavors(); for(int i=0; i<tomb.length; i++) System.out.println(tomb[i]).
getHumanPresentableName());
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

175

2005.11.28.

176

public boolean isDataFlavorSupported( DataFlavor flavor)


Megadja, hogy a vglaprl lekrdezett adatra alkalmazhat-e az adott DataFlavor vagy nem. pl:
System.out.println(adat.isDataFlavorSupported( DataFlavor.stringFlavor));

public Object getTransferData( DataFlavor flavor)


Visszaadja a vgolapon tallhat adatot a kvnt formban. A flavor rtkeinek a DataFlavor osztly mezit adhatjuk meg, melyek kzl leginkbb a DataFlavor.StringFlavor-t hasznljuk, mely Stringknt adja vissza az adatot. Kt kivtel keletkezhet: - IOException: Ha az adat mr nem krhet el. - UnsupportedFlavorException: Ha az ignyelt flavor nem tmogatott.
Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

177

2005.11.28.

178

Clipboard cb = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); ta.append("\nNv "+cb.getName()+"\n"); Transferable athelyezheto = cb.getContents(this); ta.append("Adattartalmak formi (flavors): "); DataFlavor[] formak = athelyezheto.getTransferDataFlavors(); for (int i = 0; i < formak.length; i++) { ta.append("\n "+i+": " + formak[i].getHumanPresentableName()); } ta.append("\n"); try { ta.append("Adattartalom szveges formja: " + athelyezheto.getTransferData(DataFlavor.stringFlavor) + "\n"); } catch (Exception ex) { ta.append("A vglap tartalmnak nincs szveges formja.\n"); } ta.setCaretPosition(ta.getText().length());
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

11. Java babok


Tulajdonsgai Kdolsi konvencik Kapcsolt s knyszertett tulajdonsgok Betekints

179

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

180

30

Komponens
jrafelhasznlhat szoftver. Egy komponens lehet akr osztly, akr objektum. A szoftverfejleszt kszthet sajt komponenst is, amelyet rtehet a komponens palettra. Egy komponensnek vannak tulajdonsgai (properties), metdusai (method) s esemnyei (events).
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

Komponens alap programozs:


Programkszts ksz komponensek felhasznlsval. A szoftverfejleszt az jrafelhasznlhat komponenseket adaptlja az adott krnyezetben, s megteremti a szksges kapcsolatokat a komponensek kztt.

181

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

182

Java bab
A Java bab (Java bean) olyan jra felhasznlhat Java komponens, amely megadja a lehetsget arra, hogy egy fejleszteszkzben vizulisan manipullhat legyen.

Tulajdonsgai
Felletfggetlen. Brmely Java objektum implementlhat JavaBean-knt. Vizulisan manipullhatk. ltalnos viselkedsi forma szerint mkdik. Kpes informcit szolgltatni nmagrl.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

183

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

184

A Java bab lehet


felhasznl fellet elem,
menkomponens,

Az ilyen formn ellltott komponensek lehetnek


egyszer vagy sszetett, kis vagy nagymret komponensek, lehetnek grafikus vagy lthatatlan komponensek, lehetnek pldul informcihordoz vagy algoritmikus komponensek is.

adathozzfrsi komponens s egyb.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

185

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

186

31

A JavaBean komponensmodell kdolsi konvencii:


Osztly: publikus, s van egy publikus, paramter nlkli konstruktora. Tulajdonsgok: logikai rtk lekrdezse:
public boolean is<PropertyName>(); mdosts: public void set<PropertyName> (<PropertyType> pt); tmb egy elemre: public <PropertyElement> get<PropertyName>( int index); public void set<PropertyName> (int index, <PropertyElement> e); egsz tmbre: public <PropertyType>[] get<PropertyName>(); public void set<PropertyName> (<PropertyType[] a);
187
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

egyb rtk lekrdezse:


public <PropertyType> get<PropertyName>();

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

188

Kapcsolt s knyszertett tulajdonsgok


Esemnykezels: public void add<EventListenerType>Listener (<EventListenerType>Listener x); public void remove<EventListenerType>Listener (<EventListenerType>Listener x); Kapcsolt tulajdonsgrl beszlnk, ha egy tulajdonsg megvltoztatsrl egy msik komponensnek is tudnia kell. Knyszertett tulajdonsgrl beszlnk, ha egy tulajdonsg megvltoztatsrl egy msik komponensnek is tudnia kell, s az rtestett komponens dntsi joggal rendelkezik. Azaz lehetsge van a tulajdonsg vltoztatsnak jvhagysra (validcijra).
189
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

190

Betekints
Figyel interfsz Property- PropertyChangeChangeEvent Listener Property- VetoableChangeChangeEvent Listener EsemOsztly Lekezel metdus addProperty- propertyChangeChange Listener addVetoable- vetoableChangeChange Listener Felfz metdus

Betekintsnek nevezzk azt a folyamatot, amikor egy osztly (krnyezet) megvizsgl egy msik osztlyt, hogy:
milyen tulajdonsgokat, metdusokat s esemnyeket tmogat.

Ezen informcikat ktflekppen llthatjuk el, s tehetjk elrhetv:


tkrzs vagy BeanInfo osztly ltrehozsval.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

191

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

192

32

Tkrzs segtsgvel lehet lekrdezni, hogy milyen mezket, metdusokat s konstruktorokat tmogat egy bean. A tervezsi mintk ezen informcik alapjn, az elnevezsi konvencikbl kiindulva megllaptjk, hogy a bean milyen tulajdonsgokat, esemnyeket s metdusokat tartalmaz. Ezt a folyamatot nevezzk betekintsnek.
2005.11.28. Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

A tkrzs megvalstst a java.lang.reflect csomag Field, Method, Array, Modifier, Constructor osztlyai ltal valsthatjuk meg. A Field, a Method s a Constructor osztlyok llandak, pldnyaikon keresztl lehet informcit szerezni a klnbz objektumokrl.

193

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

194

A BeanInfo osztly lerja a beant. Ebben az osztlyban brmi megadhat a beanrl, belertve annak viselkedst, tulajdonsgait, metdusait, esemnyeit s brmely ms informcit. Itt szoktk szerepeltetni pldul a beanhez tartoz ikonokat is.

2005.11.28.

Alkalmazsfejlesztsi technolgia Ksztette: Csndes Emese

195

33

You might also like