我试图将背景尺寸设为窗口尺寸。 但是,这很挑剔。我没有使用css文件格式。
这是实现窗口的主要部分。
public void start(Stage primaryStage) throws Exception {
GameLoopManager loop = GameLoopManager.instance();
Controller controller = new Controller(loop, primaryStage);
loop.start(new MenuState());
primaryStage.show();
primaryStage.setFullScreen(true);
}
这是实现背景和阶段的主体部分。
private UISubScene optionSubScene;
private UISubScene helpSubScene;
private UISubScene creditsSubScene;
private UISubScene buttonChooserScene;
private UISubScene sceneToHide;
List<UIButton> menuButtons;
List<ButtonPicker> buttonsList;
private BUTTON chosenButton;
public MenuViewManager(Stage mainStage) {
sound.backgroundMusic();
menuButtons = new ArrayList<>();
mainPane = new AnchorPane();
mainScene = new Scene(mainPane);
mainScene.setFill(null);
mainStage.setScene(mainScene);
super.mainStage = mainStage;
createSubScenes();
createButtons();
createBackground();
createLogo();
super.mainStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
controller.stop();
}
});
// mainStage.show();
}
private void createBackground() {
Image backgroundImgae = new Image("main/resources/images/jxoPOUxa.gif",true);
BackgroundImage background = new BackgroundImage(backgroundImgae, BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, BackgroundSize.DEFAULT);
mainPane.setBackground(new Background(background));
}
我厌倦了使用BackgroundSize.AUTO,但是我不能。 我应该怎么做才能得到解决方案?
如果可以,我可以使用CSS格式怎么使用?但是我不能重写和修改很多代码,因为我的工作快完成了,我正在集成和调试。
答案 0 :(得分:1)
如果要拉伸图像以填满整个Region
,则应使用:
// Side note: Are you sure having "main/resources" in the path is correct?
var image = new Image("main/resources/images/jxoPOUxa.gif", true);
var bgImage = new BackgroundImage(
image,
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
BackgroundPosition.DEFAULT,
new BackgroundSize(1.0, 1.0, true, true, false, false)
);
mainPain.setBackground(new Background(bgImage));
true
的两个BackgroundSize
自变量分别表示width
和height
自变量是成比例的而不是绝对的。在这种情况下,width
和height
应该在[0.0, 1.0]
范围内,否则称为0%到100%。两个false
自变量分别是contain
和cover
。要使用false
和width
参数,它们必须是height
。换句话说,这告诉JavaFX使图像填充Region
的宽度和高度的100%。请注意,这不会保持图像的长宽比(请参见下文)。
有关更多信息,请参见documentation of BackgroundSize
:
定义BackgroundImage相对于样式区域应填充的区域大小。有几个属性的值优先于其他属性。特别是,有4个关键属性,
width
,height
,contain
和cover
。宽度和高度都相互独立,但是都与包含和覆盖相互作用。根据CSS规范,
cover
定义为:
- 将图像缩放,同时保留其固有的长宽比(如果有),以最小的尺寸,使其宽度和高度都可以完全覆盖背景定位区域。
contain
定义为:
- 将图像缩放至最大尺寸,同时保留其固有的宽高比(如果有的话),以使其宽度和高度都可以适合背景定位区域。
宽度和高度均指定(以绝对值或百分比表示)要使用的大小。仅当cover和contain均为false时,这两个属性才适用。如果Cover和Contain均为true,则将使用Cover。
宽度和高度也可以设置为
AUTO
,指示应该调整区域的大小以使用图像的固有尺寸,或者如果无法确定,则为100%。