Ich will einen Taschenrechner programmieren. Backend logik ist soweit vorhanden, fehlt nur das GUI
Ich dachte mir, dass ich eine Klasse mache, wo ich das GridPane extende und im Konstruktor die buttons adde.
So sieht das etwa aus:
public class FXPane extends GridPane {
private String[][] buttonTexts = {
{"7", "8", "9", "(", ")", "BS"},
{"4", "5", "6", "+", "-", "CE"},
{"1", "2", "3", "*", "/", "C"},
{"±", "0", ",", "x^y", "1/x", "="}
};
FXPane() {
for(int y = 0; y < buttonTexts.length;y++){
for(int x = 0; x<buttonTexts[0].length;x++){
Button theButtonToAdd = new Button(buttonTexts[y][x]);
theButtonToAdd.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
this.add(theButtonToAdd,x,y);
}
}
}
}
Der Controller sieht so aus:
public class Controller {
@FXML
private Label fxDisplay;
@FXML
private GridPane fxGrid;
private FXPane buttonPane = new FXPane();
// called by the FXML loader after the labels declared above are injected:
public void initialize() {
fxDisplay.setText("asd");
fxGrid.add(buttonPane,0,0);
}
}
Die Namen und der Hack über 2 Gridpanes änder ich noch, geht aber derzeit eher POC, da es das erste mal mit JavaFX ist.
Mein Plan ist, dass die Buttons auf eine Funktion aus dem Controller zeigt bzw aufruft.
Nur ist das vermutlich nicht (schön) möglich. Gibts ne bessere Variante oder ist das der einzige Weg?
Der Plan war, dass der Controller die Taschenrechner Instanz besitzt und jeder Button dann die eingabe an die Taschenrechner Instanz gibt. Nur brauche ich dafür halt noch ein übersetzer, damit der jeweilige Button die jeweilige Eingabe in den Taschenrechner gibt.
Ich könnte natürlich die Controller Instanz per this dem Konstruktor übergeben und dann in FXPane speichern. Nur ist das gut?
Das macht man so wenn man Java Klassen direkt ausführt. Java Archive werden mit vollständigem Dateiname angegeben.