GridPane中的JavaFX标签未扩展
我目前正在制作一个小JavaFX应用程序。 在这个应用程序中,我创建了一个标签,并希望在两个方向上拉伸自己。 标签放在一个网格窗格中,我尝试了所有我知道的方法,包括Double.MAX_VALUE方法,在我看来,这个方法似乎不是很优雅,有时也会以错误的方式工作。下面是我得到的结果: 这是我的代码:GridPane中的JavaFX标签未扩展,java,user-interface,javafx,gridpane,Java,User Interface,Javafx,Gridpane,我目前正在制作一个小JavaFX应用程序。 在这个应用程序中,我创建了一个标签,并希望在两个方向上拉伸自己。 标签放在一个网格窗格中,我尝试了所有我知道的方法,包括Double.MAX_VALUE方法,在我看来,这个方法似乎不是很优雅,有时也会以错误的方式工作。下面是我得到的结果: 这是我的代码: package sample; import javafx.application.Application; import javafx.geometry.Insets; import javafx
package sample;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
GridPane gp = new GridPane();
gp.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
Label label = new Label("Some text that could be longer");
label.setFont(new Font(20));
label.setTextFill(Color.WHITE);
label.setBackground(new Background(new BackgroundFill(Color.rgb(34, 35, 36), CornerRadii.EMPTY, Insets.EMPTY)));
label.setBorder(new Border(new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
// Commands that don't look like to work
GridPane.setHgrow(label, Priority.ALWAYS);
GridPane.setFillWidth(label, true);
GridPane.setVgrow(label, Priority.ALWAYS);
GridPane.setFillHeight(label, true);
ColumnConstraints cc = new ColumnConstraints();
cc.setFillWidth(true);
cc.setHgrow(Priority.ALWAYS);
cc.setPercentWidth(100);
RowConstraints rc = new RowConstraints();
rc.setFillHeight(true);
rc.setVgrow(Priority.ALWAYS);
rc.setPercentHeight(100);
// end
gp.add(label, 0, 0);
gp.getColumnConstraints().add(cc);
gp.getRowConstraints().add(rc);
primaryStage.setScene(new Scene(gp, 800, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我不知道还能做什么,因为上面的方法都不适合我。在多个示例中,它们甚至一次都不起作用。默认情况下,标签的maxWidth设置为Region.USE_PREF_SIZE,因此它不能比首选大小更宽。使用将maxWidth设置为无界
label.setMaxWidth(Double.MAX_VALUE);
在其他设置中,您只需将hgrow设置为“始终”,可以使用静态方法或通过列约束执行此操作:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
GridPane gp = new GridPane();
gp.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
Label label = new Label("Some text that could be longer");
label.setFont(new Font(20));
label.setTextFill(Color.WHITE);
label.setBackground(new Background(new BackgroundFill(Color.rgb(34, 35, 36), CornerRadii.EMPTY, Insets.EMPTY)));
label.setBorder(new Border(new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
label.setMaxWidth(Double.MAX_VALUE);
GridPane.setHgrow(label, Priority.SOMETIMES);
// Can use the following instead of the previous line:
// ColumnConstraints cc = new ColumnConstraints();
// cc.setHgrow(Priority.ALWAYS);
// gp.getColumnConstraints().add(cc);
gp.add(label, 0, 0);
primaryStage.setScene(new Scene(gp, 800, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
您还必须使标签覆盖多个列。请参阅:void addNode child、int columnIndex、int rowIndex、int colspan、int rowspan from.@Sedrick在示例代码中,只有一列,因此不需要使标签覆盖多个列。大概OP只是想让它水平地填充网格中的单元格。@James_D,谢谢!我没有注意到。如果GridPane只有一行和一列,我建议使用不同的父节点。好的,我理解,这是有意义的。但是为什么我的代码中的命令不能做到这一点呢?两者之间的界线comments@Alex因为网格窗格的标签大小不会超过最大宽度。这就是“最大宽度”的含义。此外,当我将maxHeight或maxWidth设置为父窗格时,它只是被忽略,而具有Double.max_值的子窗格则会被忽略。这是另一个我无法解决的问题,我可以自由地根据孩子们认为合适的大小来安排他们的孩子——pref/max/min只是一些提示。每个人都做了什么,在其java文档中都有明确的解释:@Alex我不明白这是什么意思。父窗格的大小由其父窗格控制,并尝试遵守其最小、首选和最大大小。我建议你重读这本书