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

JavaFX/fxml:整个窗口旁边的垂直按钮

潘高岑
2023-03-14

我使用GridPane作为舞台的主要场景,布局完全是在FXML文件中定义的。我想有一个按钮在窗口的整个边(即在我的GridPane的所有行上),如下所示:

然而,我就是不能让它工作。更确切地说,它似乎只是按钮不会增加整个高度。我已经为按钮设置了gridpane.vgrow=alwaysmaxheight=“infinity”gridpane.fillheight=true,但按钮仍然与其中的文本一样长,并且放在侧面的中心。

我如何使按钮延伸到整个网格窗格?正如开头提到的,我当然已经正确设置了GridPane.rowspan。这并不是按钮没有正确地放置在网格窗格中,只是它自己不会占用整个可用的垂直空间。

请注意,我更喜欢通过FXML而不是Java代码的解决方案,因为我不希望在我的类中有这样的布局代码。

谢谢你!

共有1个答案

戚良弼
2023-03-14

最简单的方法是使用CSS。请执行以下步骤:

若要旋转按钮中使用的标签,请使用:

.button > .text {
    -fx-rotate: 90;
}

要扩展按钮以使用整个高度,请使用Infinity作为首选高度:

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>

<GridPane styleClass="root" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
   <columnConstraints>
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
   </columnConstraints>
   <rowConstraints>
      <RowConstraints minHeight="50.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="50.0" prefHeight="30.0" vgrow="SOMETIMES" />
      <RowConstraints minHeight="50.0" prefHeight="30.0" vgrow="SOMETIMES" />
   </rowConstraints>
   <children>
      <Button mnemonicParsing="false" text="Button" GridPane.rowSpan="3" />
      <VBox style="-fx-background-color: white;" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="1" GridPane.vgrow="ALWAYS" />
      <VBox style="-fx-background-color: white;" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" />
      <VBox style="-fx-background-color: white;" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" />
   </children>
</GridPane>

CSS

root是分配给GridPane的样式类。

.root {
    -fx-background-color: grey;
    -fx-hgap: 5;
    -fx-vgap: 5;
    -fx-padding: 5;
}

.root > .button > .text {
    -fx-rotate: 90;
}

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}

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 {

    @Override
    public void start(final Stage primaryStage) throws Exception {

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/grid.fxml"));
        final Parent root = fxmlLoader.load();
        final Scene scene = new Scene(root, 685, 411);
        scene.getStylesheets().add(getClass().getResource("/grid.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 我想有一个头像图像,右边有两个垂直对齐的div。 https://jsbin.com/qafiroquve/1/edit?html,css,输出 我读过很多关于这方面的帖子,但似乎没有一篇对我有帮助。 将图像放在左侧的30%主div()宽度和div的70%宽度的最佳方法是什么? 如果div(或)中的任何一个有太多文本,我希望div与其左侧的图像垂直对齐。我还希望这个div与图像有一个边距。 我尝试

  • 我需要通过控制器中的代码关闭当前的fxml窗口 我知道stage.close()或stage.hide()在fx中这样做 我们将非常感谢所有的帮助。谢谢!

  • 经过大量搜索,我发现了这样一个问题:如何创建JavaFX2.0应用程序MDI。我真正想知道的是,是否可以使用JavaFX组件和场景构建器创建一个到主窗口的弹出窗口或子窗口,以创建新窗口。 我最后给出了一个模态弹出窗口: 这是我在Scene Builder的帮助下创建的MessageBoxController类。它具有标准弹出框的基本布局,可用于显示图标(ImageView)、文本框(用于您的消息文

  • 问题内容: 为什么不行?但是, 确实 可以。 问题答案: 实际上,在这种情况下,这非常简单:对图像应用垂直对齐。由于所有内容都在同一行中,因此它实际上是要对齐的图像,而不是文本。 在FF3中测试。 现在,您可以将flexbox用于这种类型的布局。

  • 如何打印窗格或整个FXML页面。我尝试了这两种方法(doPrint和doPrintSecond在控制器中)进行打印,但不起作用;请纠正我的错误。是否有其他方法可以打印fxml页面或窗格。 FXML代码 控制器代码 这是应用程序,我点击打印按钮,但它不工作。

  • 如何在FXML(JavaFX)中获得用户调整大小后的新窗口大小?我已经搜索了一个“onResizeWindow”方法,但我什么也没有找到。