使用Java场景生成器调整JavaFX GUI中所有元素的大小
我正在用javaFx构建一个项目,并使用scene builder创建和管理我的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
![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我为场景添加了控制器类,还尝试添加了一个屏幕截图,但没有成功。希望你能帮忙