III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements


Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
2 3.NET Framework 3.0 Visual Studio Extensions for WF Visual Studio Extensions for WCF/WPF CTP ASP.NET AJAX 1.0 Ajax Toolkit.NET Framework 3.5 Visual.
© Kozsik Tamás Appletek A Java nyelv elsődleges számú reklámja HTML oldalak aktívvá tevéséhez Kisalkalmazás WEB-böngésző által futtatott Java.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
3D képszintézis fizikai alapmodellje
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
Socket programozás Példák
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
C# tagfüggvények.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
C# tagfüggvények.
Course Situation and Event Driven Models for Multilevel Abstraction Based Virtual Engineering Spaces Óbuda University John von Neumann Faculty of Informatics.
Természetesen P = Q = O esetén O + O = O. Tetszőleges, nem 2, vagy 3 karakterisztikájú test esetén hasonló módon eljárva E(K)-n zárt műveletet.
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
Egy GAZDAG HIBAJELENTÉS elég információt tartalmaz ahhoz, hogy AZONNALI LÉPÉSEKET lehessen tenni, a javítás érdekében.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Eye-RIS rendszer programozása D46 laborgyakorlat.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Transzformációk, textúrák, árnyalás Szécsi László.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés.
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
 Map  Reduce  Scan  Histogram  Compact const size_t dataSize = 1024; cl_kernel mapKernel = cl.createKernel(clProgram, "map"); float* hData = new.
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU Labor 15.. Párhuzamos primitívek Map Reduce Scan Histogram Compact.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
Java programozási nyelv Adatbekérés konzolról
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
B M Java Programozás 7. Gy: Java alapok IT A N Adatkezelő 3.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Szálszinkronizáció.
B M Java Programozás 6. Gy: Java alapok IT A N Adatkezelő 2.rész
B M Java Programozás 5. Gy: Java alapok IT A N Adatkezelő 1.rész
B M Java Programozás 8. Gy: Java alapok IT A N Adatkezelő 4.rész
Előadás másolata:

III. labor AWT, eseménykezelés Applet

Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView extends Panel implements View { private Chessboard board; public ButtonView(Chessboard board) { this.board = board; } public void display() { } public void printMessage(String message) { }

Új class: ButtonController import java.awt.*; import java.awt.event.*; public class ButtonController { private ButtonView view; private Chessboard board; public ButtonView getView(){ return view; } public ButtonController(){ board = new Chessboard(); view = new ButtonView(board); } public void createFrame() { Frame frame = new Frame("Chess"); frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.add(view); frame.setSize(400, 590); frame.setResizable(false); frame.setVisible(true); }

Chess.main public static void main(String[] args) { // TODO code application logic here System.out.println("!!!! Starting chess game !!!!"); //new ConsoleController(); (new ButtonController()).createFrame(); }

Próbafuttatás

Új mezők a ButtonView -ba public class ButtonView extends Panel implements View { private Chessboard board; Button newGameButton; // nem private, hogy a controller lássa private Panel boardPanel; private TextArea messageArea;

ButtonView konstruktor public ButtonView(ChessBoard board) { this.board = board; setLayout(new BorderLayout()); boardPanel = new Panel(); boardPanel.setLayout(new GridLayout(10,10)); messageArea = new TextArea(); add(boardPanel, BorderLayout.CENTER); add(messageArea, BorderLayout.SOUTH); newGameButton = new Button("New Game"); add(newGameButton, BorderLayout.NORTH); }

Próbafuttatás

ButtonView.printMessage public void printMessage(String message) { messageArea.append(message); messageArea.append("\n"); } public ButtonView(ChessBoard board) { //... add(newGameButton, BorderLayout.NORTH); printMessage("Game starts!\n"); }

ButtonView -ba belső osztály public class BoardButton extends Button { Square square = null; public void refresh() { Piece piece = board.getPiece(square); if(piece != null) setLabel(piece.toString()); else setLabel(""); } // és egy új mező a ButtonView-ba, nem private LinkedList boardButtons = new LinkedList ();

ButtonView konstruktor végére for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i > 0 && i 0 && j < 9) { BoardButton bb = new BoardButton(); bb.square = new Square(j - 1, 8 - i); boardButtons.add(bb); bb.setEnabled(true); if ((i + j) % 2 == 0) { bb.setBackground(Color.WHITE); bb.setForeground(Color.BLACK); } else { bb.setBackground(Color.BLACK); bb.setForeground(Color.WHITE); } bb.refresh(); boardPanel.add(bb); } // következő dián ez else-sel folytatódik // folyt köv.

ButtonView konstruktor végére } else { Button b = new Button(); b.setEnabled(false); if (i == 0 || i == 9) { if (j != 0 && j != 9) { b.setLabel( String.valueOf( Square.fileIndexToLetter(j - 1))); } } else { if (j == 0 || j == 9) b.setLabel(String.valueOf(9 - i)); } boardPanel.add(b); }

ButtonView.display public void display() { for (BoardButton button : boardButtons) { button.refresh(); }

Próbafuttatás

Eseménykezelés tervezése A ButtonView -ban levő gombokhoz (New game, illetve a táblamező-gombok) eseményfigyelőt kell kapcsolni – ButtonView.newGameButton és ButtonView.boardButtons a controller számára is hozzáférhető ButtonView.newGameButton figyelőjét megoldjuk egy egyszerű zárvánnyal ButtonView.boardButtons kedvéért csinálunk egy külön, nevesített BoardAdapter osztályt

Új class: BoardAdaper import java.awt.event.*; public class BoardAdapter implements ActionListener { private ButtonController controller; private Square square; // melyik mező gombjához van rendelve public BoardAdapter(ButtonController controller, Square square) { this.controller = controller; this.square = square; } public void actionPerformed(ActionEvent e) { controller.squareClicked(square); // ezt majd mindjárt megírjuk }

ButtonController konstruktor végére // zárvány eseménykezelő view.newGameButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { board.reset(); view.display(); } }); // minden gomb kap egy saját figyelő példányt for (ButtonView.BoardButton boardButton : view.boardButtons) { boardButton.addActionListener( new BoardAdapter(this, boardButton.square)); }

új: ButtonController.squareClicked public void squareClicked(Square square) { if (!board.isPieceGrabbed()){ if (!board.grabPiece(square)) view.printMessage("Invalid starting square!"); else view.printMessage("Click destination square!"); } else { if (board.dropPiece(square)) { if (board.getWhiteOnTurn()) view.printMessage("White to move!"); else view.printMessage("Black to move!"); } else view.printMessage( "Invalid destination square, move cancelled!"); } view.display(); }

Próba: awt-s verzió kész

Önálló feladat azok alatt a figurák alatt, amik még nem léptek, legyen a gombnak egy sárgás árnyalata – BoardButton.refresh – Piece.moved – setBackground 3 perc

Csináljunk belőle appletet

ChessApplet import java.applet.Applet; public class ChessApplet extends Applet { public void init() { ButtonController controller = new ButtonController(); this.add(controller.getView()); }

Applet indítása

Applet HTML, applet méret másoljuk át a generált ChessApplet.html filet – a build folderből – az src/chesslab folderbe rebuild ChessApplet.html megjelenik a project ablakban –

ChessApplet kieg. import java.applet.Applet; import java.awt.GridLayout; public class ChessApplet extends Applet { public void init() { setLayout(new GridLayout(1, 1)); ButtonController controller = new ButtonController(); this.add(controller.getView()); }

Próba indíthatjuk a NetBeans IDE project ablakából a ChessApplet kontext- menüjéből vagy sima böngészőablakból – windows explorerből – duplaklikk a html fileon a build könyvtárban

III. labor vége – szorgalmi feladat vegyünk fel a felületre egy szövegbeviteli mezőt (TextField v. szerkeszthető TextArea) – az itt begépelt lépés-parancsokat értelmezzük és léptessük meg (a logika megvan a konzolos verzióban) vegyünk fel egy másik TextArea-t, ahova kiírjuk a lépéseket, hogy a játék végén ki lehessen onnan másolni és eltenni emlékbe – a kettőt össze is köthetjük: a kimásolt lépéseket visszaillesztve kapjuk vissza a régi állást!