使用Java场景生成器调整JavaFX GUI中所有元素的大小

使用Java场景生成器调整JavaFX GUI中所有元素的大小,javafx,autoresize,stage,scene,scenebuilder,Javafx,Autoresize,Stage,Scene,Scenebuilder,我正在用javaFx构建一个项目,并使用scene builder创建和管理我的GUI 我希望舞台可以调整大小,当用户调整窗口大小时,我希望所有元素都能相应地自动调整大小 另一件事是我希望舞台窗口根据场景大小自动调整大小 我在所有场景中使用锚窗格作为根节点。 我现在在调整窗口大小时得到的结果是窗口框架覆盖了窗口的内容,但并不影响它 以下是特定场景的控制器类: ![package screensframework; import GameEngine.Player; import GameEng

我正在用javaFx构建一个项目,并使用scene builder创建和管理我的GUI

我希望舞台可以调整大小,当用户调整窗口大小时,我希望所有元素都能相应地自动调整大小

另一件事是我希望舞台窗口根据场景大小自动调整大小

我在所有场景中使用锚窗格作为根节点。 我现在在调整窗口大小时得到的结果是窗口框架覆盖了窗口的内容,但并不影响它

以下是特定场景的控制器类:

![package screensframework;

import GameEngine.Player;
import GameEngine.PlayerActions;
import GameEngine.PlayerType;
import GameEngine.Table;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.GridPane;

public class TableSceneController implements Initializable, ControlledScreen {

    private ScreensController myController;
    private GameEngine.Table myTable;
    private int playerNumber;
    private int betindex;
    private SimpleBooleanProperty standPossible;
    private SimpleBooleanProperty hitPossible;
    private SimpleBooleanProperty doublePossible;
    private SimpleBooleanProperty splitPossible;

    @FXML
    private Button standButton;
    @FXML
    private Button hitButton;
    @FXML
    private Button splitButton;
    @FXML
    private Button doubleButton;
    @FXML
    private Button placeBetButton;
    @FXML
    private Label messageLabel;
    @FXML
    private Slider betSlider;

    @FXML
    private GridPane betGridPane;

    @FXML
    private Label betLabel;

    @FXML
    private Label Player1Money;
    @FXML
    private Label Player2Money;
    @FXML
    private Label Player3Money;
    @FXML
    private Label Player4Money;
    @FXML
    private Label Player5Money;
    @FXML
    private Label Player6Money;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        standPossible = new SimpleBooleanProperty();
        hitPossible = new SimpleBooleanProperty();
        doublePossible = new SimpleBooleanProperty();
        splitPossible = new SimpleBooleanProperty();
        splitPossible.set(false);
        doublePossible.set(false);
        hitPossible.set(false);
        standPossible.set(false);

        getDoublePossible().addListener(new ChangeListener<Boolean>() {

            @Override
            public void changed(ObservableValue<? extends Boolean> source, Boolean oldValue, Boolean newValue) {
                setDoubleButton(newValue);
            }
        });

        getHitPossible().addListener(new ChangeListener<Boolean>() {

            @Override
            public void changed(ObservableValue<? extends Boolean> source, Boolean oldValue, Boolean newValue) {
                setHitButton(newValue);
            }
        });

        getSplitPossible().addListener(new ChangeListener<Boolean>() {

            @Override
            public void changed(ObservableValue<? extends Boolean> source, Boolean oldValue, Boolean newValue) {
                setSplitButton(newValue);
            }
        });

        getStandPossible().addListener(new ChangeListener<Boolean>() {

            @Override
            public void changed(ObservableValue<? extends Boolean> source, Boolean oldValue, Boolean newValue) {
                setStandButton(newValue);
            }
        });

        betSlider.valueProperty().addListener(new ChangeListener() {

            @Override
            public void changed(ObservableValue ov, Object t, Object t1) {
                betLabel.textProperty().setValue(String.valueOf((int) betSlider.getValue()));
            }

        });

        playerNumber = 0;
        betindex = 0;

    }

    @Override
    public void setScreenParent(ScreensController screenParent) {
        myController = screenParent;
    }

    @FXML
    public void onHit(ActionEvent event) {
        myTable.hit(playerNumber, betindex);
        dealCardsAnimation();
        checkStillInGame();
    }

    @FXML
    public void onStand(ActionEvent event) {
        checkStillInGame();

    }

    @FXML
    public void onDouble(ActionEvent event) {
        myTable.playDouble(playerNumber, betindex);
        dealCardsAnimation();
        checkStillInGame();
    }

    @FXML
    public void onSplit(ActionEvent event) {
        myTable.split(playerNumber, betindex);
        dealCardsAnimation();
    }

    @FXML
    public void onPlaceBet(ActionEvent event) {
        myTable.getPlayersOnTable().get(playerNumber).AddBet((int) betSlider.getValue());
        betSlider.setValue(1);
        checkIfthereAreMorePlayersToBet();

    }

    public void checkIfthereAreMorePlayersToBet() {
        if (playerNumber + 1 < myTable.getNumberOfPlayers()) {
            playerNumber++;
            getBets();
        } else {
          //  messageLabel.textProperty().set("");
            //betGridPane.disableProperty().set(true);
            // myTable.dealCardsToPlyers();
            //dealCardsAnimation();
            startPlay();
        }
    }

    private void setStandButton(boolean value) {
        standButton.disableProperty().setValue(value);
    }

    private void setHitButton(boolean value) {
        hitButton.disableProperty().setValue(value);
    }

    private void setSplitButton(boolean value) {
        splitButton.disableProperty().setValue(value);
    }

    private void setDoubleButton(boolean value) {
        doubleButton.disableProperty().setValue(value);
    }

    private void dealCardsAnimation() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void startPlay() {
        for (Player player : myTable.getPlayersOnTable()) {
            System.out.println(player.getBet(0).getSumOfBet());
        }

//        standPossible.set(myTable.isActionPossible(playerNumber, betindex, PlayerActions.STAND));
//        hitPossible.set(myTable.isActionPossible(playerNumber, betindex, PlayerActions.HIT));
//        doublePossible.set(myTable.isActionPossible(playerNumber, betindex, PlayerActions.DOUBLE));
//        splitPossible.set(myTable.isActionPossible(playerNumber, betindex, PlayerActions.SPLIT));
    }

    private void endRound() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    public void checkStillInGame() {
        if (!myTable.isHandInPlay(playerNumber, betindex)) {
            if (myTable.getPlayerHand(playerNumber).size() - 1 > betindex) {
                betindex++;
                startPlay();

            } else if (playerNumber + 1 == myTable.getNumberOfPlayers()) {
                endRound();
            } else {
                playerNumber++;
                betindex = 0;
                startPlay();
            }
        }
    }

    public SimpleBooleanProperty getStandPossible() {
        return standPossible;
    }

    public SimpleBooleanProperty getHitPossible() {
        return hitPossible;
    }

    public SimpleBooleanProperty getDoublePossible() {
        return doublePossible;
    }

    public SimpleBooleanProperty getSplitPossible() {
        return splitPossible;
    }

    private void getBets() {
        if (myTable.getPlayersOnTable().get(playerNumber).getType() == PlayerType.HUMAN) {
            updateMessageLabel(" please enter your bet.");
            placeBetButton.disableProperty().setValue(false);
            betSlider.setMax(myTable.getPlayersOnTable().get(playerNumber).getSumOfMoney());
            betSlider.setMin(1);
        }else{
            myTable.placeComputerBet(playerNumber);
            checkIfthereAreMorePlayersToBet();
        }

    }

    private void updateMessageLabel(String message) {
        messageLabel.textProperty().set(myTable.getPlayersOnTable().get(playerNumber).getName() + message);

    }

    @Override
    public void onShow() {

        myTable.startNewRound();
        getBets();

    }

    @Override
    public void setMyTable(GameEngine.Table myTable) {
        this.myTable = myTable;
    }

}

AnchorPane将根据场景大小自动调整大小!也许我们错过了什么。一个图像或代码片段会有很大的帮助@ItachiUchiha我为场景添加了控制器类,还尝试添加了一个屏幕截图,但没有成功。希望你能帮忙