我试图在JavaFX中显示GridPane场景的网格线,但尽管调用它们仍未显示setGridLinesVisible(true)
.我究竟做错了什么?
我想在程序的主菜单上显示网格线,所以我可以告诉它在哪里放置节点.不幸的是,当我运行程序时,显示的所有内容都是带有单个按钮的空白屏幕.
我的MainMenu课程:
package screens;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
/**
* Creates the main menu Pane object and returns it.
* @author LuminousNutria
*/
public class MainMenu {
public MainMenu() {}
public Pane getPane() {
GridPane grid = new GridPane();
grid.setGridLinesVisible(true);
Button bttn = new Button("button");
grid.add(bttn, 2, 2);
return grid;
}
}
Run Code Online (Sandbox Code Playgroud)
我的主要课程:
package mainPackage;
import screens.*;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
/**
* Displays the Pane.
* @author LuminousNutria
*/
public class Main …
Run Code Online (Sandbox Code Playgroud) 我只是在试用JavaFX并且正在强行进入它,因为它被认为是未来.我正在尝试创建一个包含4列的表.列和表应调整大小以填充父窗格.我不能为我的生活让这个工作.我现在已经尝试了4个多小时,并且tableview没有调整大小.
这是我的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.*?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.collections.*?>
<?import t.cubed.fxml.*?>
<BorderPane styleClass="root" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="t.cubed.fxml.FXMLDocumentController">
<top>
<MenuBar fx:id="menuBar" styleClass="menu-bar">
<menus>
<Menu text="File">
<items>
<MenuItem onAction="#handleOpenAction" text="Open" />
<MenuItem onAction="#handleExitAction" text="Exit" />
</items>
</Menu>
<Menu text="Edit">
<items>
<MenuItem onAction="#handleWeightAction" text="Edit Weights" />
<MenuItem onAction="#handleFilterAction" text="Edit Filters" />
<MenuItem onAction="#handleOptionsAction" text="Options" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<center>
<GridPane> …
Run Code Online (Sandbox Code Playgroud) 我正在使用GridPane布局来定位应用程序中的内容.我想知道如何为行中的元素设置边距
GridPane.setConstraints(chip5, 1, 1, 1, 1, HPos.RIGHT, VPos.TOP); //I want to set
// margin for chip5 from top (for example 5px)
Run Code Online (Sandbox Code Playgroud)
在GridPane中可以吗?
我正在尝试使用包含2行和2列的gridpane设计布局.左上角区域和右上角区域共享宽度,它们都占50%.但在第二排我需要右下方区域才能获得60%的宽度,因此左下区域为40%.
我也尝试过像[[2col.,2col] [1col,3col]]矩阵那样的柱子.它既不起作用也不起作用.
这是我的代码;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
primaryStage.setTitle("Hello World");
Scene scene = new Scene(root, 1700, 1200);
//zoneTopLeft, spans 2 column
VBox zoneTopLeft = createBaseContainer();
//zoneTopRight, spans 2 columns
VBox zoneTopRight = createBaseContainer();
//zoneBottomLeft, spans 1 columns
VBox zoneBottomLeft = createBaseContainer();
//zoneBottomRight,spans 3 columns
VBox zoneBottomRight = createBaseContainer();
ColumnConstraints topRight=new ColumnConstraints();
topRight.setPrefWidth(300);
ColumnConstraints topLeft=new ColumnConstraints();
topRight.setPrefWidth(300);
ColumnConstraints bottomRight=new ColumnConstraints();
topRight.setPrefWidth(400);
ColumnConstraints bottomLeft=new ColumnConstraints();
topRight.setPrefWidth(200);
GridPane …
Run Code Online (Sandbox Code Playgroud) 我在fxml中有一个GridPane,它有一个文本标题和4个按钮.GridPane本身是居中对齐的,但所有按钮都在网格列内对齐.我知道如何使用Java代码更改项目的对齐方式,但这不是理想的情况,因为我希望使用FXML和CSS处理所有样式.任何人都可以建议在JavaFX的GridPane视图中居中对齐单元格元素的最佳方法吗?
JavaFX 中是否有任何方法可以充分利用 TilePane 或 FlowPane和GridPane?
\n这是我想要实现的目标:
首先,我喜欢 GridPane 的想法,我可以在其中设置一个 M\xc3\x97N 网格,该网格会在其父容器内自动调整大小,以将空间平均划分为 M 列和 N 行。然后我可以放置一些完全填充每个单元格的子元素,它们将沿着网格拉伸。这很酷。
\n但有一个缺点:我需要通过设置其行号和列号来明确指定每个控件的位置。
然后,还有诸如 FlowPane 或 TilePane 之类的布局容器,当父容器更改其大小时,它们会自动重排其子元素。当我添加另一个子元素时,它会自动附加到列表的末尾,并且当空间太少而无法容纳另一个元素时,元素列表在到达容器边缘后会自动换行。
\n但这也有一个缺点:子元素只能有严格的、预定义的大小。它们不会随其父元素一起拉伸。
这就是我所需要的:
\n我需要这两个容器的最佳性能,也就是说,我想要一个 M × N 网格(比方说 4\xc3\x974),其中每个单元格都是 ParentWidth/M by ParentHeight/N 并沿与窗口,因此它始终是 4\xc3\x974 个单元格,但它们的大小(以及其内容的大小)相应地拉伸。\n但我不想明确告诉容器要放在哪一行和哪列中我在那里添加的每个新孩子。相反,我只想添加它,并让容器找出要放入的第一个空单元格,从左到右填充单元格,如果当前行中没有空单元格,则从上到下填充单元格。
这些预定义容器的属性是否有一些神奇的设置可以让我实现这一目标?还是我需要自己写一个这样的容器?
\n是否可以在不使用的情况下使所有GridPane的网格线永久可见setGridLinesVisible()
?
我知道这setGridLinesVisible()
仅用于调试目的,我想显示网格线以方便最终用户.
另外,我需要处理Pane容器而不是Canvas.
我的程序能够在Pane类型或Pane子类型父容器上添加,删除,修改,移动等形状对象和组.
谢谢
我正在使用a GridPane
来存储关于城市的信息(在游戏中),但有时我想删除一些行.这是我用于我的课程GridPane
:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.franckyi.kingsim.city.City;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
public class CityGrid extends GridPane {
private List<City> cities;
public CityGrid() {
super();
cities = new ArrayList<City>();
}
public List<City> getCities() {
return cities;
}
public void deleteCity(int row) {
cities.remove(row - 1);
removeNodes(getNodesFromRow(row));
int i = row;
while (!getNodesFromRow(i + 1).isEmpty()) {
moveNodes(i + 1, getNodesFromRow(i + 1));
removeNodes(getNodesFromRow(i + 1));
i++;
}
}
public void …
Run Code Online (Sandbox Code Playgroud) 我有一个GridPane
5 列。这些分别是我hgrow
对列约束的设置。
SOMETIMES
ALWAYS
SOMETIMES
(固定尺寸)SOMETIMES
ALWAYS
整体GridPane
基本上是一个两栏形式的布局。我的第 1 和第 4 列(索引 0 和 3)是字段标签,而第 2 和第 5 列是输入字段(TextField
等)。第 3 列只是两个表单列之间的固定宽度填充。
ComboBox
我的表格中有一些- 有些在左栏,有些在右栏。我已将所有的最大宽度设置ComboBox
为MAX_VALUE
.
当表单加载时,布局看起来像我想要的(两个输入字段列的宽度相等)。但是,当我单击任何一个时ComboBox
,它会导致单击的列的ComboBox
宽度增加 - 这会导致另一个输入字段列减少相同的数量。
我可以交替单击ComboBox
左侧和右侧的 ,并且两列的宽度会不断变化。变化会越来越小,最终列将停止调整大小。最终结果是两列的宽度不相等。
对于库中的另一个控件JFXDatePicker
,我遇到了同样的问题JFoenix
。
我的另一个限制是这个表单在 a 内SplitPane
,所以我必须避免设置明确的宽度。
我能做些什么来解决这个问题?
我想我会在这里附上一个样本,考虑到这个问题的观点有多么少。
@Override
public void start(Stage primaryStage) throws Exception {
VBox root = FXMLLoader.load(getClass().getResource("Test.fxml"));
Scene sc = new Scene(root);
primaryStage.setScene(sc);
primaryStage.show(); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个在网格窗格中显示 4 个图像的简单程序。我在那里得到一个没问题,但是一旦我尝试添加第二个,我就遇到了一些问题。这是我的代码:
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
GridPane gridPane = new GridPane();
gridPane.add(new ImageView(new Image ("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif")), 1,1);
gridPane.add(new ImageView(new Image ("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif")), 2,2);
Scene scene = new Scene(gridPane, 1000, 500);
primaryStage.setTitle("Flags");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这可能是图像后的行和列的问题,但我尝试了一些方法但没有成功。任何帮助是极大的赞赏。谢谢