我使用GridPane作为舞台的主要场景,布局完全是在FXML文件中定义的。我想有一个按钮在窗口的整个边(即在我的GridPane的所有行上),如下所示:
然而,我就是不能让它工作。更确切地说,它似乎只是按钮不会增加整个高度。我已经为按钮设置了gridpane.vgrow=always
、maxheight=“infinity”
和gridpane.fillheight=true
,但按钮仍然与其中的文本一样长,并且放在侧面的中心。
我如何使按钮延伸到整个网格窗格?正如开头提到的,我当然已经正确设置了GridPane.rowspan
。这并不是按钮没有正确地放置在网格窗格中,只是它自己不会占用整个可用的垂直空间。
请注意,我更喜欢通过FXML而不是Java代码的解决方案,因为我不希望在我的类中有这样的布局代码。
谢谢你!
最简单的方法是使用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”方法,但我什么也没有找到。