当用户运行程序时,我需要将场景的组件放置在窗口的中间,事实并非如此。我该如何解决? 该场景似乎只出现在右侧,而没有出现在中央。 我附加了我得到的输出图像。
public class WelcomeScene extends Scene{
public WelcomeScene(Pane pane, double width, double height){
super(pane,width,height);
setFill(Color.PINK);
VBox vbox = new VBox();
Label label = new Label("Welcome to the typing\n practice world");
label.setFont(new Font("Cambria", 32));
label.setStyle("-fx-text-alignment: center;");
label.setTextFill(Color.RED);
label.centerShapeProperty().bind(pane.centerShapeProperty());
HBox hbox = new HBox();
Button StartTypingBtn = new Button("Start typing");
Button showFingurePosition = new Button("Check fingures prositions");
Button checkImprovement = new Button("Check Improvement");
hbox.setSpacing(10);
hbox.setAlignment(Pos.CENTER);
hbox.getChildren().add(StartTypingBtn);
hbox.getChildren().add(showFingurePosition);
hbox.getChildren().add(checkImprovement);
vbox.getChildren().addAll(label, new
ImageView("photos/hands_email.gif"),
hbox);
vbox.setAlignment(Pos.CENTER);
pane.getChildren().add(vbox);
pane.setCenterShape(true);
}
}
public class Touch extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds();
primaryStage.setScene(new WelcomeScene(new Pane(),
screenBounds.getWidth(),screenBounds.getHeight()));
primaryStage.show();
}
public static void main(String [] args) {
Application.launch(args);
}
}
答案 0 :(得分:1)
您可以做的一件事就是将Pane
更改为StackPane
。
触摸
primaryStage.setScene(new WelcomeScene(new StackPane(),
screenBounds.getWidth(), screenBounds.getHeight()));
WelcomeScene
public WelcomeScene(StackPane pane, double width, double height)
完整代码
触摸
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.layout.StackPane;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class Touch extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds();
primaryStage.setScene(new WelcomeScene(new StackPane(),
screenBounds.getWidth(), screenBounds.getHeight()));
primaryStage.show();
}
public static void main(String[] args)
{
Application.launch(args);
}
}
WelcomeScene
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
public class WelcomeScene extends Scene
{
public WelcomeScene(StackPane pane, double width, double height)
{
super(pane, width, height);
try {
setFill(Color.PINK);
VBox vbox = new VBox();
Label label = new Label("Welcome to the typing\n practice world");
label.setFont(new Font("Cambria", 32));
label.setStyle("-fx-text-alignment: center;");
label.setTextFill(Color.RED);
label.centerShapeProperty().bind(pane.centerShapeProperty());
HBox hbox = new HBox();
Button StartTypingBtn = new Button("Start typing");
Button showFingurePosition = new Button("Check fingures prositions");
Button checkImprovement = new Button("Check Improvement");
hbox.setSpacing(10);
hbox.setAlignment(Pos.CENTER);
hbox.getChildren().add(StartTypingBtn);
hbox.getChildren().add(showFingurePosition);
hbox.getChildren().add(checkImprovement);
vbox.getChildren().addAll(label, new ImageView(new Image(new FileInputStream("photos/hands_email.gif"))), hbox);
vbox.setAlignment(Pos.CENTER);
pane.getChildren().add(vbox);
pane.setCenterShape(true);
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
}
}
答案 1 :(得分:0)
一种可能性是您的vbox仅占用映像和hbox所需的空间。
尝试将vbox的高度和宽度设置为最大平衡,以便占用整个空间。