Hallo alle miteinander,
ich muss bis morgen eine Aufgabe fertig stellen. Eine Teilaufgabe besagt, dass ich die Objekte soweit bis höchstens zur größe der Scene verschieben kann. Doch leider finde ich keinen weg. Wir müssen die beiden methoden "getBoundsInLocal();" und "localToScene(Bounds);" benutzen, wie muss ich vorgehen? Danke im Voraus für eure Antwort und Hilfe.
[CODE lang="java" title="Das ist mein Code"]
public class ShapeExamples extends Application {
private List<Shape> shapes = new ArrayList<>();
private double orgSceneX, orgSceneY;
private double orgTranslateX, orgTranslateY;
//Drücken
EventHandler<MouseEvent> pressing = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
orgSceneX = mouseEvent.getSceneX();
orgSceneY = mouseEvent.getSceneY();
orgTranslateX = ((Shape) mouseEvent.getSource()).getTranslateX();
orgTranslateY = ((Shape) mouseEvent.getSource()).getTranslateY();
}
};
//Drag and Drop
EventHandler<MouseEvent> shapedragged = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
double offsetX = mouseEvent.getSceneX() - orgSceneX;
double offsetY = mouseEvent.getSceneY() - orgSceneY;
double newTranslateX = orgTranslateX + offsetX;
double newTranslateY = orgTranslateY + offsetY;
((Shape) mouseEvent.getSource()).setTranslateX(newTranslateX);
((Shape) mouseEvent.getSource()).setTranslateY(newTranslateY);
}
};
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Rectangle rec = new Rectangle(0,0,150,70);
rec.setFill(Color.AQUA);
Circle circ = new Circle(220,50,50, Color.GREEN);
Polygon pol = new Polygon(new double[]{
300.0, 0.0,
400.0, 0.0,
300.0, 100.0
});
pol.setFill(Color.CORAL);
shapes.add(rec);
shapes.add(circ);
shapes.add(pol);
for (Shape shape: shapes){
changeColor(shape);
resetColor(shape,Color.BLACK);
shape.setOnMousePressed(pressing);
shape.setOnMouseDragged(shapedragged);
}
Scene scene = new Scene(root, 600, 600);
root.getChildren().addAll(shapes);
primaryStage.setTitle("Shapes Zeichnen");
primaryStage.setScene(scene);
primaryStage.show();
}
private void changeColor(Shape shape){
shape.setOnScroll(new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
Color c = Color.rgb(0,0,255);
shape.setFill(c);
}
});
}
private void resetColor(Shape shape, Color color){
shape.setOnMouseClicked(new EventHandler<MouseEvent>() {
Color reset = color;
@Override
public void handle(MouseEvent mouseEvent) {
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
if(mouseEvent.getClickCount() == 2){
shape.setFill(reset);
}
}
}
});
}
}[/CODE]
ich muss bis morgen eine Aufgabe fertig stellen. Eine Teilaufgabe besagt, dass ich die Objekte soweit bis höchstens zur größe der Scene verschieben kann. Doch leider finde ich keinen weg. Wir müssen die beiden methoden "getBoundsInLocal();" und "localToScene(Bounds);" benutzen, wie muss ich vorgehen? Danke im Voraus für eure Antwort und Hilfe.
[CODE lang="java" title="Das ist mein Code"]
public class ShapeExamples extends Application {
private List<Shape> shapes = new ArrayList<>();
private double orgSceneX, orgSceneY;
private double orgTranslateX, orgTranslateY;
//Drücken
EventHandler<MouseEvent> pressing = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
orgSceneX = mouseEvent.getSceneX();
orgSceneY = mouseEvent.getSceneY();
orgTranslateX = ((Shape) mouseEvent.getSource()).getTranslateX();
orgTranslateY = ((Shape) mouseEvent.getSource()).getTranslateY();
}
};
//Drag and Drop
EventHandler<MouseEvent> shapedragged = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
double offsetX = mouseEvent.getSceneX() - orgSceneX;
double offsetY = mouseEvent.getSceneY() - orgSceneY;
double newTranslateX = orgTranslateX + offsetX;
double newTranslateY = orgTranslateY + offsetY;
((Shape) mouseEvent.getSource()).setTranslateX(newTranslateX);
((Shape) mouseEvent.getSource()).setTranslateY(newTranslateY);
}
};
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Rectangle rec = new Rectangle(0,0,150,70);
rec.setFill(Color.AQUA);
Circle circ = new Circle(220,50,50, Color.GREEN);
Polygon pol = new Polygon(new double[]{
300.0, 0.0,
400.0, 0.0,
300.0, 100.0
});
pol.setFill(Color.CORAL);
shapes.add(rec);
shapes.add(circ);
shapes.add(pol);
for (Shape shape: shapes){
changeColor(shape);
resetColor(shape,Color.BLACK);
shape.setOnMousePressed(pressing);
shape.setOnMouseDragged(shapedragged);
}
Scene scene = new Scene(root, 600, 600);
root.getChildren().addAll(shapes);
primaryStage.setTitle("Shapes Zeichnen");
primaryStage.setScene(scene);
primaryStage.show();
}
private void changeColor(Shape shape){
shape.setOnScroll(new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent scrollEvent) {
Color c = Color.rgb(0,0,255);
shape.setFill(c);
}
});
}
private void resetColor(Shape shape, Color color){
shape.setOnMouseClicked(new EventHandler<MouseEvent>() {
Color reset = color;
@Override
public void handle(MouseEvent mouseEvent) {
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
if(mouseEvent.getClickCount() == 2){
shape.setFill(reset);
}
}
}
});
}
}[/CODE]
Zuletzt bearbeitet: