我认为 a 可以将我的 JavaFX 代码导入到 SceneBuilder 中,但我不知道这是否可能或怎样。 我想要的是让我的 GUI 模块(按钮、文本字段等)处于正确的位置。我真的很难过,因为这是我第一次使用 javafx,而我看到的教程使用的是网格 Pane 。 我将非常感谢有关如何使事情成形和正确位置的一些帮助或建议。如果需要,这是我的代码:
package application;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
public class Main extends Application implementsEventHandler<ActionEvent>{
// crea los botones
Button historial;
Button jugar;
String jugadaComp="El jugador numero once es feo";
int posBal=0;
int contGA=0;
int contGR=0;
public static void main(String[] args) {
launch(args);
}
@Override
//nombre de la ventana principal
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Football Simulator 2016");
//crea los drop list
ChoiceBox<String> jugadasArbitro = new ChoiceBox<>();
jugadasArbitro.getItems().addAll("Saque de banda","Tiro de esquina","Falta","Falta(Tarjeta amarilla)", "Falta (Tarjeta roja)", "Mano","Posicion adelantada","Penal","Fuera de juego", "Gol");
ChoiceBox<String> jugadasOfensivas = new ChoiceBox<>();
jugadasOfensivas.getItems().addAll("Pase","Pase largo","Tiro a puerta");
ChoiceBox<String> jugadasDefensivas = new ChoiceBox<>();
jugadasDefensivas.getItems().addAll("Intercepcion");
//inicializa botones
Label CGA = new Label("Goles Equipo Azul");
Label CGR = new Label("Goles Equipo Rojo");
TextField golA= new TextField(String.valueOf(contGA));
golA.setEditable(false);
golA.setPrefWidth(75);
golA.setPrefHeight(75);
golA.setFont(Font.font("Verdana",FontWeight.BOLD, 40));
TextField golR= new TextField(String.valueOf(contGR));
golR.setEditable(false);
golR.setPrefWidth(75);
golR.setPrefHeight(75);
golR.setFont(Font.font("Verdana",FontWeight.BOLD, 40));
TextField tiempo = new TextField();
//tiempo.setPrefWidth(5);
TextField jugada = new TextField(jugadaComp);
jugada.setPrefWidth(300);
jugada.setEditable(false);
historial = new Button("Historial");
historial.setOnAction(e ->historialBox.display("Historial", "de lo mio mete tu historial aqui \n no bulto manito hasta salto de linea"));
jugar= new Button("Jugar");
jugar.setOnAction(e ->{ isInt(tiempo,tiempo.getText());
getArbitro(jugadasArbitro);
getOfensiva(jugadasOfensivas);
getDefensa(jugadasDefensivas);
});
//agrega imagenes segun posesion del balon
ImageView pelotaA = new ImageView(new Image(getClass().getResourceAsStream("/res/PelotaA.png"), 100, 100, true, true));
ImageView pelotaR = new ImageView(new Image(getClass().getResourceAsStream("/res/PelotaR.png"), 100, 100, true, true));
//forma del Gui y posiciona los botones
GridPane grid = new GridPane();
grid.setPadding(new Insets(10,10,10,10));
grid.setVgap(8);
grid.setHgap(10);
GridPane.setConstraints(CGA, 0, 0);
GridPane.setConstraints(golA, 0, 2);
GridPane.setConstraints(CGR, 37, 0);
GridPane.setConstraints(golR, 37, 2);
GridPane.setConstraints(pelotaA, 18, 2);
GridPane.setConstraints(pelotaR, 18, 2);
GridPane.setConstraints(historial, 0, 4);
GridPane.setConstraints(jugar, 37, 10);
//GridPane.setConstraints(jugadasArbitro, 7, 4);
//GridPane.setConstraints(jugadasOfensivas, 3, 4);
//GridPane.setConstraints(jugadasDefensivas, 3, 5);
//GridPane.setConstraints(jugada, 3, 6);
grid.getChildren().addAll(golA,golR,CGA,CGR,pelotaA,pelotaR,historial,jugar);
//tamanio de la ventana
Scene scene = new Scene(grid, 700,300);
primaryStage.setScene(scene);
primaryStage.show();
}
//leen el valor de los drop box
private void getDefensa(ChoiceBox<String> jugadasDefensivas) {
// TODO Auto-generated method stub
String opcionDefensa = jugadasDefensivas.getValue();
System.out.println(opcionDefensa);
}
private void getOfensiva(ChoiceBox<String> jugadasOfensivas) {
// TODO Auto-generated method stub
String opcionOfensiva = jugadasOfensivas.getValue();
System.out.println(opcionOfensiva);
}
private void getArbitro(ChoiceBox<String> jugadasArbitro) {
// TODO Auto-generated method stub
String opcionArbitro = jugadasArbitro.getValue();
System.out.println(opcionArbitro);
}
//valida que el tiempo solo sea INT
private boolean isInt(TextField tiempo, String message) {
// TODO Auto-generated method stub
try{
int minutos = Integer.parseInt(tiempo.getText());
return true;
}catch (NumberFormatException e){}
System.out.println("Error: introduzca numeros solamente");
return false;
}
@Override
public void handle(ActionEvent event) {
}
}
最佳答案
对于 javafx 新手来说,一个问题是您不知道如何正确设置网格 Pane 的格式。如果您想自由移动节点,只需使用 AnchorPane。至于设计您的 GUI 在场景生成器中,根据您的 IDE,您可以右键单击您的 XML 文件并单击在场景生成器中打开。如果此选项不可用,请在场景生成器中手动打开您的文件,并记得在运行您的应用程序之前保存它,否则您所做的更改将不会出现。 希望这有帮助
关于java - 如何: Organize Buttons and stuff with JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812668/