#java #javafx
#java #javafx
Вопрос:
Я пытался отобразить кнопки и некоторый текст с помощью javafx, но он не работает, он просто отображается друг над другом в середине экрана:
Я пытался использовать vbox, и я также пытался использовать hbox, но оба не меняют внешний вид при запуске
(когда я запускаю его, я не получаю ошибок) (также я использую vs code, если это может что-то сказать)
Вот мой код на данный момент:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage primaryStage) {
// buttons
VBox vboxBtn = new VBox();
vboxBtn.setPadding(new Insets(10, 10, 10, 10));
vboxBtn.setSpacing(10);
Button btnRoom = new Button("changeRoom");
Button btnMap = new Button("changeMap");
vboxBtn.getChildren().addAll(btnRoom, btnMap);
// text
VBox vboxTxt = new VBox();
vboxTxt.setPadding(new Insets(10, 10, 10, 10));
vboxTxt.setSpacing(10);
Text txtRoom = new Text("Room");
Text txtMap = new Text("Map");
vboxTxt.getChildren().addAll(btnRoom, btnMap);
String currentRoom = "None";
String currentMap = "None";
// button for switching maps
btnMap.setText("Change the map");
// button click
btnMap.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
System.out.println("Hello world");
}
});
// text for maps
txtMap.setText("Map: " currentMap);
// button for switching rooms
btnRoom.setText("Hello world");
// button click
btnRoom.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello world");
}
});
// text
txtRoom.setText("Room: " currentRoom);
StackPane root = new StackPane();
root.getChildren().add(btnRoom);
root.getChildren().add(btnMap);
root.getChildren().add(txtRoom);
root.getChildren().add(txtMap);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Ответ №1:
Я думаю, проблема в том, что вы добавляете butons и txts на панель вместо Vboxes и Hboxes.
Я полагаю, что вы хотите, чтобы они отображались в сетке 4×4, для этого вам нужно добавить свои виртуальные поля в hbox, а затем добавить этот hbox на панель, или вы можете использовать сетку.
Или вы можете установить их местоположение, я не знаю, возможно ли это с помощью кода, но вы можете сделать это в screenbuilder.
PS: проверьте screenbuilder для javafx.
Комментарии:
1. Спасибо. я протестировал первое, что вы сказали, и это сработало. теперь я попробую scenebuilder (igoogled screenbuilder qnd scene builder запускается первым, поэтому я попробую)