|
You last visited: Today at 16:41
Advertisement
[JavaFX]Verbesserungsvorschläge für Code
Discussion on [JavaFX]Verbesserungsvorschläge für Code within the Java forum part of the Coders Den category.
04/11/2018, 22:58
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
[JavaFX]Verbesserungsvorschläge für Code
Ein herzliches Hallo an euch.
Ich hätte eine bitte an diejenigen unter euch, die sich mit JavaFX auskennen. Und zwar haben wir in der Uni nun begonnen mit JavaFX zu arbeiten. Wir haben eine erste Übungsaufgabe bekommen die ich auch gemacht habe und alles funktioniert, wie es funktionieren soll.
Jedoch bin ich mir ziemlich sicher, dass ich viel zu viele Umwege bis zum Ziel gegangen bin und mir das leben damit ziemlich schwer gemacht habe. Manchmal wusste ich intuitiv dass ich es viel zu umständlich mache, aber wusste einfach nicht wie ich es einfacher machen soll 
Ich habe sogar erfahren, dass manche Leute die Aufgabe mit 32 Zeilen Code (incl. imports) geschrieben haben. Ich habe 134 Zeilen   .
Ich würde mich einfach sehr freuen, wenn sich jemand mal ein bisschen in meinen Code reinlesen könnte mir sagen kann, was ich besser machen kann.
Anbei mein Code und die Aufgabe
Danke und liebe Grüße
Code:
package game;
import javafx.scene.control.Control;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class AllLightsOn extends Application {
public Button[][] buttons = new Button[5][5];
public Button btn_reset = new Button("reset");
public boolean[] isButtonOn = new boolean[25];
public Label lbl_On = new Label("On: ");
public Label lbl_Off = new Label("Off: ");
public HBox hBox = new HBox(30);
public int counter = 0;
public String pressedButtonId;
public BorderPane root = new BorderPane();
public GridPane gridPane = new GridPane();
public Scene scene = new Scene(root, 350, 400);
public void changeColor(String index) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (buttons[i][j].getId() == index) {
if (isButtonOn[Integer.parseInt(index)] == true) {
buttons[i][j].setStyle("-fx-background-color: blue");
isButtonOn[Integer.parseInt(index)] = false;
} else {
buttons[i][j].setStyle("-fx-background-color: yellow");
isButtonOn[Integer.parseInt(index)] = true;
}
}
}
}
}
public void startGame(String index) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (buttons[i][j].getId() == index) {
changeColor(index);
if (i < 4) {
changeColor(buttons[i + 1][j].getId());
}
if (i > 0) {
changeColor(buttons[i - 1][j].getId());
}
if (j < 4) {
changeColor(buttons[i][j + 1].getId());
}
if (j > 0) {
changeColor(buttons[i][j - 1].getId());
}
}
}
}
refreshLabel();
}
public void refreshLabel() {
int t = 0, f = 0;
for (int i = 0; i < isButtonOn.length; i++) {
if (isButtonOn[i] == true) {
t++;
} else {
f++;
}
}
lbl_On.setText("On: " + t);
lbl_Off.setText("Off: " + f);
}
[MENTION=295804]Override[/MENTION]
public void start(Stage primaryStage) throws Exception {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
buttons[i][j] = new Button();
buttons[i][j].setId(String.valueOf(counter));
buttons[i][j].setMaxWidth(Double.MAX_VALUE);
buttons[i][j].setMaxHeight(Double.MAX_VALUE);
buttons[i][j].setStyle("-fx-background-color: blue");
isButtonOn[counter] = false;
gridPane.add(buttons[i][j], i, j);
gridPane.setHgrow(buttons[i][j], Priority.ALWAYS);
gridPane.setVgrow(buttons[i][j], Priority.ALWAYS);
GridPane.setFillWidth(buttons[i][j], true);
GridPane.setFillHeight(buttons[i][j], true);
lbl_On.setText("On: ");
lbl_Off.setText("Off: 25");
buttons[i][j].setOnAction(new EventHandler<ActionEvent>() {
[MENTION=295804]Override[/MENTION]
public void handle(ActionEvent event) {
pressedButtonId = ((Control) event.getSource()).getId();
startGame(pressedButtonId);
}
});
counter++;
}
}
btn_reset.setOnAction(new EventHandler<ActionEvent>() {
[MENTION=295804]Override[/MENTION]
public void handle(ActionEvent event) {
for (int k = 0; k < isButtonOn.length; k++) {
isButtonOn[k] = false;
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
buttons[i][j].setStyle("-fx-background-color: blue");
}
}
lbl_Off.setText("Off: 25");
lbl_On.setText("On: ");
}
});
gridPane.setGridLinesVisible(true);
root.setCenter(gridPane);
hBox.getChildren().addAll(btn_reset, lbl_On, lbl_Off);
hBox.setAlignment(Pos.CENTER);
root.setBottom(hBox);
primaryStage.setTitle("JavaFX All Lights On");
primaryStage.setScene(scene);
primaryStage.show();
}
}
|
|
|
04/18/2018, 19:09
|
#2
|
elite*gold: 0
Join Date: Mar 2013
Posts: 3,185
Received Thanks: 1,317
|
Ich beschränke mich hier nur auf den JavaFX-Teil:
(Optional) Du könntest 1. Ganz einfach ein 5x5 GridPane erstellen und darauf einen Listener laufen lassen, der die Mauseingabe prüft, so sparst du dir die Buttons darauf. Ich denke, dass es allerdings mit deiner Methode der Buttons ein einfacher, wenn auch nicht so elegant ist.
Ich bin ein Freund von BorderPanes, aber das hast du ja schon gut gemacht.
Dann kannst du deine GUI in einer FXML Datei auslagern und den Code in einem Controller. So haben das vermutlich deine Kollegen mit den 32 Zeilen Code gemacht.
Zuletzt solltest du beachten, dass das aufbauen der GUI in JavaFX relativ lange dauert und bei größeren Projekten sehr lange dauert. Deswegen solltest du bei größeren Projekten oder noch besser schon jetzt folgendes beachten:
|
|
|
04/19/2018, 19:38
|
#3
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
Vielen Dank für die Antwort!
|
|
|
 |
Similar Threads
|
JavaFX - kompilieren, aber wie?
09/24/2016 - Java - 7 Replies
Guten Abend liebe EPvP Community,
seit heute beschäftige ich mit JavaFX, genaugenommen mit der GUI Programmierung. Jedoch muss ich gestehen, das ich es einfach nicht hinbekomme es zu kompilieren.
Zum Testen wollte ich ein einfaches "Hello World" Programm, aus Google, kompilieren, jedoch erhalte ich Unmengen an Fehlern. Wie ich das behebe, das ich auch Sourcecode welcher JavaFX beinhaltet kompilieren kann ist mir bisher noch unklar.
"Hello World"
package helloworld;
import...
|
JavaFX Listview Multiple Choice
09/25/2015 - Java - 5 Replies
Moin Jungs,
Weiß jemand von euch wie man in JavaFx mehrere Items auswählen kann ohne Ctrl drücken zu müssen? Listview.setSelectionMode(Selectionmode.Multiple) funzt nicht.
Lg
|
brauche verbesserungsvorschläge für minispiel bot
12/31/2009 - Nostale - 12 Replies
Hallo community!
Ich mich heutemal in autoit eingearbeitet und erstelle grade einen bot für das holzhack minigame.
das ist mein code:
$versatz=1
while 1=1
$coor = PixelSearch( 591 + $versatz, 516, 631 + $versatz, 530, 14328109, 20, 3 )
While @error = 0
send("{Left}")
$coor = PixelSearch( 591 + $versatz, 516, 631 + $versatz, 530, 14328109, 20, 3 )
Wend
|
All times are GMT +1. The time now is 16:42.
|
|