hallo, als erstes sryfür unklaren topic,ich hatte gestern in JavaFX forum ein sehr detalierte Anfrage gestellt, aber scheinbar war da zu vieles Falsch in meinem Ansatz, denn niemand hat sich gemeldet :/
Es geht aber letzendlich mehr um das Prinzyp als um JavaFX
Also hab ich heute mein Code von anfang an umstrukturiert und die ganze Architektur verändert.
es gibts nun eine Main Klasse, dort wird eine Grafische Oberfläche erzeugt, (Canvas)
und sobald die Maustaste auf der Canvas geklickt wird, wird eine Subklasse namens MakeRect aufgerufen, die die aktuelle x und y position der Maus, sowie die Canvas und gc vererbt bekommen.
Aufgabe dieser Subclass ist bei gedrückter Maustaste einen typischen markierungs Viereckt zu zeichnen, dessen Ecken = aktuelle Mausposition und die Position wo Maus ursprünglich gedrückt wurde sind.
funktioniert auch wunderbar !
jetzt will ich eigentlich, sobald die Maustaste losgelassen wird, die Position und Maaße des gezeichnetes Vierecks vererben (die Variabel habe ich alle deklariert), den Canvis in der Hauptklasse entfernen und dort ein Button erzeugen, welches die Eigentschaften des Vierecks hat.
ich hatte dazu ursprünglich an eine einfache klasse "makeButton" gedacht, welches nur die x,y,höhe, Breite des buttons hat, aber Wie beende ich denn diese MakeRect Klasse ?
Durch mausRelease event kann ich ja alles mögliche auslösen, ich kenne stop, break und end, aber es sind doch Befehle für Schleifen ?
so, hier jetzt mein code.
Main Klasse
die Klasse die für das Viereck Zeichnen zuständig ist.
Klasse die ich aufrufen würde nachdem maus losgelassen wurde.
kompletter Code mit imports usw (da ist unaufgeräumt, sry für die Printlines, dies dient zur überwachung ob etwas überhaupt angesprochen wird... )
Es geht aber letzendlich mehr um das Prinzyp als um JavaFX
Also hab ich heute mein Code von anfang an umstrukturiert und die ganze Architektur verändert.
es gibts nun eine Main Klasse, dort wird eine Grafische Oberfläche erzeugt, (Canvas)
und sobald die Maustaste auf der Canvas geklickt wird, wird eine Subklasse namens MakeRect aufgerufen, die die aktuelle x und y position der Maus, sowie die Canvas und gc vererbt bekommen.
Aufgabe dieser Subclass ist bei gedrückter Maustaste einen typischen markierungs Viereckt zu zeichnen, dessen Ecken = aktuelle Mausposition und die Position wo Maus ursprünglich gedrückt wurde sind.
funktioniert auch wunderbar !
jetzt will ich eigentlich, sobald die Maustaste losgelassen wird, die Position und Maaße des gezeichnetes Vierecks vererben (die Variabel habe ich alle deklariert), den Canvis in der Hauptklasse entfernen und dort ein Button erzeugen, welches die Eigentschaften des Vierecks hat.
ich hatte dazu ursprünglich an eine einfache klasse "makeButton" gedacht, welches nur die x,y,höhe, Breite des buttons hat, aber Wie beende ich denn diese MakeRect Klasse ?
Durch mausRelease event kann ich ja alles mögliche auslösen, ich kenne stop, break und end, aber es sind doch Befehle für Schleifen ?
so, hier jetzt mein code.
Main Klasse
Java:
public class Bewerbung extends Application {
@Override
public void start(Stage stage) {
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 800,600);
Label label = new Label("test");
label.setText("Hallo, hiermit möchte ich kurz meine derzeitigen Java Kentnisse vorzustellen");
label.setFont(Font.font("Verdana", 16));
pane.setTop(label);
BorderPane.setAlignment(label, Pos.CENTER);
Label labelBot = new Label("bottom");
labelBot.setText("bitte die Maus auf die Mittlere Fläche bewegen, dann durch klicken der linker Maustaste \n gefolgt von bewegung der Maus einen Viereck erzeugen, \n welches durch das Loslassen der Maustaste durch ein Button Objekt ausgetauscht wird ");
labelBot.setFont(Font.font("Verdana", 16));
labelBot.setTextAlignment(TextAlignment.CENTER);
BorderPane.setAlignment(labelBot, Pos.CENTER);
pane.setBottom(labelBot);
//making canvas for center position of borderpane, so i can draw there
final Canvas canvas = new Canvas(600, 400);
pane.setCenter(canvas);
final GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.LIGHTGRAY);
gc.fillRect(0,0,canvas.getWidth(), canvas.getHeight());
canvas.setOnMousePressed(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
System.out.println("maus klicked");
MakeRect(event.getX(), event.getY(), canvas, gc);
}
});
stage.setScene(scene);
stage.show();
}
die Klasse die für das Viereck Zeichnen zuständig ist.
Java:
public void MakeRect(final double x, final double y, final Canvas canvas, final GraphicsContext gc) {
System.out.println("maus position x = " + x + " y = " + y);
canvas.setOnMouseDragged(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
gc.setFill(Color.LIGHTGRAY);
gc.fillRect(0,0,canvas.getWidth(), canvas.getHeight());
double width;
double height;
width = x - event.getX();
height = y - event.getY();
//rect muss mit positiven werden gemacht werden
if (width < 0) {
width = width * (-1);
}
;
if (height < 0) {
height = height * (-1);
}
;
//rect muss das oberste linke Ecke des Gebildes finden
// das wird oben links x und y wert.
double xx;
double yy;
if (x > event.getX()) {
xx = event.getX();
} else xx = x;
if (y > event.getY()) {
yy = event.getY();
} else yy = y;
gc.strokeRect(xx, yy, width, height);
}
});
canvas.setOnMouseReleased(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
//canvas.setVisible(false);
System.out.println("maus released");
double width;
double height;
System.out.println("x=" + x + " event" + event.getX());
width = x - event.getX();
height = y - event.getY();
//rect muss mit positiven werden gemacht werden
if (width < 0) {
width = width * (-1);
}
;
if (height < 0) {
height = height * (-1);
}
;
//rect muss das oberste linke Ecke des Gebildes finden
// das wird oben links x und y wert.
double xx;
double yy;
if (x > event.getX()) {
xx = event.getX();
} else xx = x;
if (y > event.getY()) {
yy = event.getY();
} else yy = y;
gc.strokeRect(xx, yy, width, height);
MakeButton(xx, yy, width, height);
}
});
}
Klasse die ich aufrufen würde nachdem maus losgelassen wurde.
Java:
public void MakeButton(double x, double y, double width, double height) {
System.out.println("MAKE BUTTON AKTIVIERT !");
Button scalierButton = new Button("Klick mich an");
//scalierButton.setVisible(false);
scalierButton.setLayoutX(x);
scalierButton.setLayoutY(y);
scalierButton.setPrefWidth(width);
scalierButton.setPrefHeight(height);
scalierButton.setVisible(true);
// wie soll ich hier auf die Bpane von der Hauptclass zugreifen ? soll ich die vererben ?
}
kompletter Code mit imports usw (da ist unaufgeräumt, sry für die Printlines, dies dient zur überwachung ob etwas überhaupt angesprochen wird... )
Java:
package sample;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class Bewerbung extends Application {
@Override
public void start(Stage stage) {
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 800,600);
Label label = new Label("test");
label.setText("Hallo, hiermit möchte ich kurz meine derzeitigen Java Kentnisse vorzustellen");
label.setFont(Font.font("Verdana", 16));
pane.setTop(label);
BorderPane.setAlignment(label, Pos.CENTER);
Label labelBot = new Label("bottom");
labelBot.setText("bitte die Maus auf die Mittlere Fläche bewegen, dann durch klicken der linker Maustaste \n gefolgt von bewegung der Maus einen Viereck erzeugen, \n welches durch das Loslassen der Maustaste durch ein Button Objekt ausgetauscht wird ");
labelBot.setFont(Font.font("Verdana", 16));
labelBot.setTextAlignment(TextAlignment.CENTER);
BorderPane.setAlignment(labelBot, Pos.CENTER);
pane.setBottom(labelBot);
//making canvas for center position of borderpane, so i can draw there
final Canvas canvas = new Canvas(600, 400);
pane.setCenter(canvas);
final GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.LIGHTGRAY);
gc.fillRect(0,0,canvas.getWidth(), canvas.getHeight());
canvas.setOnMousePressed(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
System.out.println("maus klicked");
MakeRect(event.getX(), event.getY(), canvas, gc);
}
});
stage.setScene(scene);
stage.show();
//DrawTheButton(stage);
}
public void MakeRect(final double x, final double y, final Canvas canvas, final GraphicsContext gc) {
System.out.println("maus position x = " + x + " y = " + y);
canvas.setOnMouseDragged(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
gc.setFill(Color.LIGHTGRAY);
gc.fillRect(0,0,canvas.getWidth(), canvas.getHeight());
double width;
double height;
width = x - event.getX();
height = y - event.getY();
//rect muss mit positiven werden gemacht werden
if (width < 0) {
width = width * (-1);
}
;
if (height < 0) {
height = height * (-1);
}
;
//rect muss das oberste linke Ecke des Gebildes finden
// das wird oben links x und y wert.
double xx;
double yy;
if (x > event.getX()) {
xx = event.getX();
} else xx = x;
if (y > event.getY()) {
yy = event.getY();
} else yy = y;
gc.strokeRect(xx, yy, width, height);
}
});
canvas.setOnMouseReleased(new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent event) {
//canvas.setVisible(false);
System.out.println("maus released");
double width;
double height;
System.out.println("x=" + x + " event" + event.getX());
width = x - event.getX();
height = y - event.getY();
//rect muss mit positiven werden gemacht werden
if (width < 0) {
width = width * (-1);
}
;
if (height < 0) {
height = height * (-1);
}
;
//rect muss das oberste linke Ecke des Gebildes finden
// das wird oben links x und y wert.
double xx;
double yy;
if (x > event.getX()) {
xx = event.getX();
} else xx = x;
if (y > event.getY()) {
yy = event.getY();
} else yy = y;
gc.strokeRect(xx, yy, width, height);
MakeButton(xx, yy, width, height);
}
});
}
public void MakeButton(double x, double y, double width, double height) {
System.out.println("MAKE BUTTON AKTIVIERT !");
Button scalierButton = new Button("Klick mich an");
//scalierButton.setVisible(false);
scalierButton.setLayoutX(x);
scalierButton.setLayoutY(y);
scalierButton.setPrefWidth(width);
scalierButton.setPrefHeight(height);
scalierButton.setVisible(true);
// wie soll ich hier auf die Bpane von der Hauptclass zugreifen ? soll ich die vererben ?
}
public static void main(String[] args) {
launch(args);
}
}