当前位置: 首页 > 知识库问答 >
问题:

JavaFX面板内部面板自动调整大小

端木权
2023-03-14

我有一个JavaFX应用程序,它只有一个FXML文件。在这个文件中,我有一个AnchorPane,里面有一个StackPane。下面是截图:

当我启动这个应用程序时,我想用AnchorPane自动调整StackPane的大小。因此;StackPane将自动获得当前可用的宽度和高度。当我调整应用程序大小时,AnchorPane将自动调整大小,但StackPane将保持固定大小。

如何自动调整StackPane的大小,使其在父面板内完全拉伸?

我的代码

main.java

package app;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

  public static void main(String[] args) {
      Application.launch(args);
  }

  @Override
  public void start(Stage stage) throws Exception {
      Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
      Scene scene = new Scene(root,800,600);
      scene.getStylesheets().add(this.getClass().getResource("/app/style1.css").toExternalForm());
      stage.setScene(scene);
      stage.show();
  }
}
package app;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

public class MainController implements Initializable {

   @FXML
   private AnchorPane anchorPane;
   @FXML
   private StackPane stackPane;

   @Override
   public void initialize(URL url, ResourceBundle rb) {
     stackPane.setPrefSize(anchorPane.getPrefWidth(), anchorPane.getPrefHeight()); //didn't work
   }    
}
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:id="anchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="app.MainController">
    <StackPane fx:id="stackPane" ></StackPane>
</AnchorPane>
#anchorPane { 
    -fx-border-width: 2px;
    -fx-border-color: chartreuse;
}
#stackPane {
    -fx-border-width: 2px;
    -fx-border-color: red;

    /* didn't work */
   -fx-hgap: 100%;
   -fx-vgap: 100%;
}

共有1个答案

柯昱
2023-03-14

经过几个小时的搜索和测试终于在发布问题后才得到它!

您可以使用值为“0.0”的“anchorpane.topanchor,anchorpane.bottomanchor,anchorpane.leftanchor,anchorpane.righttanchor”fxml命令来调整/拉伸/对齐anchorpane中的子元素。因此,这些命令告诉子元素在调整大小时跟随其父元素。

我的更新代码main.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:id="anchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="app.MainController">
    <!--<StackPane fx:id="stackPane" ></StackPane>--> <!-- replace with the following -->
    <StackPane fx:id="stackPane" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ></StackPane>
</AnchorPane>

有关api文档:http://docs.oracle.com/javafx/2/api/javafx/scene/layout/anchorpane.html

 类似资料:
  • 我想有一个StackPane作为根节点,它使叠加效果变得容易。 但是通过使用stackpane作为根,内部控件可以移出窗口。在下面的示例中,如果您将窗口缩小到足够小,您可以看到控件移出窗口,例如菜单栏和列表视图都移到左侧。我想防止这种情况,我该怎么做? 更新: 为StackPane内部的BorderPane设置对齐方式似乎有所帮助:

  • 问题内容: 我有一个主JPanel,它实现Scrollable并使用BorderLayout。它包含一个NORTH只读JEditorPane,一个带有FlowLayout的CENTER JPanel(可动态添加JButton)和一个SOUTH JLabel(均按该顺序添加)。当将许多JButton添加到CENTER JPanel时,这些按钮将缠绕到下一行:问题是CENTER JPanel占用的垂直

  • 我正在尝试创建一个仪表板与可拖动和可调整大小的面板与PrimeFaces。当我将可调整大小添加到面板时,它就不起作用了。如果我在仪表板外使用它,它的工作很好。你能不能有一个请帮助我如何添加大小到面板上的仪表板。

  • 我是JavaFX的新手,目前我试图构建一个小型聊天窗口。为此,我为我的Listview获得了以下自定义单元格布局。 网格 我使用外部HBox,所以我可以像whatsapp一样对齐消息。。。(左右对齐)。在我的GridPane中,我得到了两列,消息(标签)在左侧,其他一些随机的东西在右侧(时间戳,一些小图标)。现在我需要的是:GridPane/左列/标签的高度应该根据文本消息的长度动态地增长/收缩。

  • 我正在尝试构建一个基于按钮的动态应用程序,这些按钮从创建的面板内部切换JFrame的主面板(这是我的应用程序的顶部内容)。 这个问题更多的是设计问题,而不是开发问题。我不确定我的设计,但我会试着解释一下。 我有一个JFrame代表我的应用程序,其中包含一个JTabbedPane(和多个Tabs)。每个选项卡都包含一个默认的JPanel,在那个JPanel中,我调用一个正在呈现我的视图的控制器(我正

  • 我试图在JPanel上画一些简单的形状,但是有一些困难。如果这个问题似乎以前已经回答过,但其他答案似乎没有帮助,请原谅。 我遵循了一个简单的教程,并成功地在JFrame上绘制了一些基本形状,但是当我将代码如何移动到一个扩展JPel的新类中时,屏幕上什么也没有出现。 我尝试过设置首选大小,重新验证和重新绘画。我添加了对super.paint组件的调用,尽管当我直接绘制到JFrame时,这两个调用都不