Erinevus lehekülje "ITI0011:praktikum 9 T8" redaktsioonide vahel
(Uus lehekülg: 'Tagasi ITI0011 lehele. == Üldine == Praktikum: 28.10.2014 kell 8:00 Teemad: * JavaFX * JavaFX klassi arvutites * Layout, Pane * Shapes * mouse event == Exercise == Crea...') |
|||
(ei näidata sama kasutaja 2 vahepealset redaktsiooni) | |||
8. rida: | 8. rida: | ||
* JavaFX | * JavaFX | ||
* JavaFX klassi arvutites | * JavaFX klassi arvutites | ||
+ | ** https://courses.cs.ttu.ee/pages/ITI0011:JavaFX#JavaFX_kasutamine_Java_versioon_1.7-ga | ||
* Layout, Pane | * Layout, Pane | ||
* Shapes | * Shapes | ||
* mouse event | * mouse event | ||
+ | |||
+ | == Koodinäite == | ||
+ | |||
+ | <source lang="java"> | ||
+ | |||
+ | import javafx.application.Application; | ||
+ | import javafx.event.EventHandler; | ||
+ | import javafx.scene.Node; | ||
+ | import javafx.scene.Scene; | ||
+ | import javafx.scene.control.Menu; | ||
+ | import javafx.scene.control.MenuBar; | ||
+ | import javafx.scene.control.MenuItem; | ||
+ | import javafx.scene.input.MouseButton; | ||
+ | import javafx.scene.input.MouseEvent; | ||
+ | import javafx.scene.layout.BorderPane; | ||
+ | import javafx.scene.layout.Pane; | ||
+ | import javafx.scene.shape.Polyline; | ||
+ | import javafx.scene.shape.Rectangle; | ||
+ | import javafx.stage.Stage; | ||
+ | |||
+ | public class Main extends Application { | ||
+ | |||
+ | class MyHandler implements EventHandler<MouseEvent> { | ||
+ | |||
+ | @Override | ||
+ | public void handle(MouseEvent event) { | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | launch(args); | ||
+ | } | ||
+ | |||
+ | private double oldX = 0, oldY = 0; | ||
+ | @Override | ||
+ | public void start(Stage primaryStage) throws Exception { | ||
+ | BorderPane root = new BorderPane(); | ||
+ | |||
+ | Scene scene = new Scene(root, 500, 500); | ||
+ | |||
+ | primaryStage.setScene(scene); | ||
+ | primaryStage.show(); | ||
+ | |||
+ | MenuBar menuBar = new MenuBar(); | ||
+ | Menu menuFile = new Menu("File"); | ||
+ | MenuItem menuFileSave = new MenuItem("Save"); | ||
+ | menuBar.getMenus().add(menuFile); | ||
+ | menuFile.getItems().add(menuFileSave); | ||
+ | |||
+ | root.setTop(menuBar); | ||
+ | |||
+ | Pane main = new Pane(); | ||
+ | root.setCenter(main); | ||
+ | |||
+ | Rectangle r1 = new Rectangle(10, 10, 100, 100); | ||
+ | Rectangle r2 = new Rectangle(100, 100, 50, 20); | ||
+ | main.getChildren().add(r1); | ||
+ | main.getChildren().add(r2); | ||
+ | |||
+ | |||
+ | //EventHandler<MouseEvent> mouseHandler = new MyHandler(); | ||
+ | EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() { | ||
+ | |||
+ | @Override | ||
+ | public void handle(MouseEvent event) { | ||
+ | if (event.getEventType() == MouseEvent.MOUSE_PRESSED) { | ||
+ | if (event.getButton() == MouseButton.SECONDARY) { | ||
+ | Polyline line = new Polyline(); | ||
+ | line.getPoints().add(event.getX()); | ||
+ | line.getPoints().add(event.getY()); | ||
+ | main.getChildren().add(line); | ||
+ | } | ||
+ | oldX = event.getX(); | ||
+ | } else { | ||
+ | // drag | ||
+ | if (event.getButton() == MouseButton.PRIMARY) { | ||
+ | for (Node s : main.getChildren()) { | ||
+ | if (s instanceof Rectangle) { | ||
+ | Rectangle r = (Rectangle)s; | ||
+ | r.setX(r.getX() + (event.getX() - oldX)); | ||
+ | } | ||
+ | } | ||
+ | } else { | ||
+ | //secondary | ||
+ | for (Node s : main.getChildren()) { | ||
+ | if (s instanceof Polyline) { | ||
+ | Polyline p = (Polyline)s; | ||
+ | if (p.getPoints().size() < 4) { | ||
+ | p.getPoints().add(event.getX()); | ||
+ | p.getPoints().add(event.getY()); | ||
+ | } else { | ||
+ | p.getPoints().set(2, event.getX()); | ||
+ | p.getPoints().set(3, event.getY()); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | oldX = event.getX(); | ||
+ | |||
+ | } | ||
+ | }; | ||
+ | |||
+ | main.setOnMousePressed(mouseHandler); | ||
+ | main.setOnMouseDragged(mouseHandler); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
== Exercise == | == Exercise == | ||
− | Create an application which allows the user to draw | + | Create an application which allows the user to draw a rectangle. There are several options how to achieve this: |
* using mouse dragging: the starting point is fixed when the dragging starts (mouse press), the opposite corner moves along while dragging. if the dragging ends, the rectangle is fixed. | * using mouse dragging: the starting point is fixed when the dragging starts (mouse press), the opposite corner moves along while dragging. if the dragging ends, the rectangle is fixed. | ||
* using clicking: when clicking first time, one point is fixed, when clicking another time, the opposite corner is fixed (and rectangle is drawn). | * using clicking: when clicking first time, one point is fixed, when clicking another time, the opposite corner is fixed (and rectangle is drawn). | ||
* some other way | * some other way | ||
− | + | Optional requirements: | |
* more than one rectangle can be drawn | * more than one rectangle can be drawn |
Viimane redaktsioon: 28. oktoober 2014, kell 06:55
Tagasi ITI0011 lehele.
Üldine
Praktikum: 28.10.2014 kell 8:00
Teemad:
- JavaFX
- JavaFX klassi arvutites
- Layout, Pane
- Shapes
- mouse event
Koodinäite
<source lang="java">
import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.shape.Polyline; import javafx.scene.shape.Rectangle; import javafx.stage.Stage;
public class Main extends Application {
class MyHandler implements EventHandler<MouseEvent> {
@Override public void handle(MouseEvent event) {
}
}
public static void main(String[] args) { launch(args); }
private double oldX = 0, oldY = 0; @Override public void start(Stage primaryStage) throws Exception { BorderPane root = new BorderPane();
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene); primaryStage.show();
MenuBar menuBar = new MenuBar(); Menu menuFile = new Menu("File"); MenuItem menuFileSave = new MenuItem("Save"); menuBar.getMenus().add(menuFile); menuFile.getItems().add(menuFileSave);
root.setTop(menuBar);
Pane main = new Pane(); root.setCenter(main);
Rectangle r1 = new Rectangle(10, 10, 100, 100); Rectangle r2 = new Rectangle(100, 100, 50, 20); main.getChildren().add(r1); main.getChildren().add(r2);
//EventHandler<MouseEvent> mouseHandler = new MyHandler();
EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) { if (event.getEventType() == MouseEvent.MOUSE_PRESSED) { if (event.getButton() == MouseButton.SECONDARY) { Polyline line = new Polyline(); line.getPoints().add(event.getX()); line.getPoints().add(event.getY()); main.getChildren().add(line); } oldX = event.getX(); } else { // drag if (event.getButton() == MouseButton.PRIMARY) { for (Node s : main.getChildren()) { if (s instanceof Rectangle) { Rectangle r = (Rectangle)s; r.setX(r.getX() + (event.getX() - oldX)); } } } else { //secondary for (Node s : main.getChildren()) { if (s instanceof Polyline) { Polyline p = (Polyline)s; if (p.getPoints().size() < 4) { p.getPoints().add(event.getX()); p.getPoints().add(event.getY()); } else { p.getPoints().set(2, event.getX()); p.getPoints().set(3, event.getY()); } } } } } oldX = event.getX();
} };
main.setOnMousePressed(mouseHandler); main.setOnMouseDragged(mouseHandler); }
}
</source>
Exercise
Create an application which allows the user to draw a rectangle. There are several options how to achieve this:
- using mouse dragging: the starting point is fixed when the dragging starts (mouse press), the opposite corner moves along while dragging. if the dragging ends, the rectangle is fixed.
- using clicking: when clicking first time, one point is fixed, when clicking another time, the opposite corner is fixed (and rectangle is drawn).
- some other way
Optional requirements:
- more than one rectangle can be drawn