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

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

Hasonló előadás


Az előadások a következő témára: "III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView."— Előadás másolata:

1 III. labor AWT, eseménykezelés Applet

2 Ú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) { }

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

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

5 Próbafuttatás

6 Ú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;

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

8 Próbafuttatás

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

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

11 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.

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

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

14 Próbafuttatás

15 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

16 Ú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 }

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

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

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

20 Ö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

21 Csináljunk belőle appletet

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

23 Applet indítása

24 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 –

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

26 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

27 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!


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

Hasonló előadás


Google Hirdetések