child fxml 文件未加载到 parent fxml
child fxml file not loading to parent fxml
大家好,我是 fxml 的新手,所以请忽略我的愚蠢问题
以下是我尝试了 2 天但没有成功的几件事
- 从 table 中删除白色 space 即 table 尺寸应达到
可用行(行数不同)
当用户单击 table 行(任何显示值)时,新的 fxml 文件打开
分配给 table 视图的锚窗格(显示 table 视图)但我想在主视图中显示它(其中整个 table 和 2 个文本字段和搜索按钮在这个主堆栈后面我想在这里展示)
主视图(其他只有 header 和侧边栏的 fxml 文件)
如下图link
table
image of required things
这是我的代码
public void initialize(URL location, ResourceBundle resources) {
databaseHandler = DatabaseHandler.getInstance();
initCol();
String qu = "SELECT * FROM country_tbl ";
ResultSet rs = databaseHandler.execQuery(qu);
try {
while (rs.next()) {
String id= rs.getString("id");
String name= rs.getString("countryname");
String description = rs.getString("descr");
String country2char= rs.getString("country2char");
String descrshort = rs.getString("descrshort");
data.add(new addcountryController(id,name, description,country2char,descrshort));
}
}catch (SQLException ex) {
Logger.getLogger(addcountryController.class.getName()).log(Level.SEVERE, null, ex);
}
tableUser.setItems(null);
tableUser.setItems(data);
tableUser.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
tableUser.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<addcountryController>() {
public void onChanged(ListChangeListener.Change<? extends addcountryController> c) {
try {
FXMLLoader loader =new FXMLLoader();
loader.load(getClass().getResource("/region/updatecountry.fxml").openStream());
updatecountryController usercontroller=(updatecountryController)loader.getController();
for (addcountryController p : c.getList()) {
String ADDID=p.getId();
String ADD=p.getName();
String ADD1=p.getDescriptionshort();
String ADD2=p.getDescription();
String ADD3=p.getCountrychar();
usercontroller.setText(ADDID,ADD,ADD1,ADD2,ADD3);
}
StackPane root = loader.getRoot();
stackmain.getChildren().clear();
stackview.getChildren().add(root);
} catch (IOException e) {
e.printStackTrace();
}
}
});
您好,第一点是解决方案:
您可以在 tableView
中设置您的 cellSize,然后您将能够使用它来获取行高(我发现这是获取行高的最简单方法)。
之后,您必须像这样将 table 的 prefHeight
绑定到您的数据大小:
tableView.setFixedCellSize(20);
tableView.prefHeightProperty().bind(Bindings.size(data).multiply(tableView.getFixedCellSize()).add(30));
有一个 .add(30)
,因为您必须添加 tableHeaderRow 的大小,这是最简单的方法,可以做一些实验并明确设置该值。如果你想得到准确的值,你可以通过 .lookup
s 来得到 TableHeaderRow
然后得到它的高度。
我不太明白你的第二个问题,你想把它显示在哪里。您可以使用 FXMLLoader 加载该视图并添加到它,但如果您指定更好一点,您到底想添加在哪里(其中 .fxml
,以及如何与 .fxml
链接包含 table).
大家好,我是 fxml 的新手,所以请忽略我的愚蠢问题 以下是我尝试了 2 天但没有成功的几件事
- 从 table 中删除白色 space 即 table 尺寸应达到 可用行(行数不同)
当用户单击 table 行(任何显示值)时,新的 fxml 文件打开 分配给 table 视图的锚窗格(显示 table 视图)但我想在主视图中显示它(其中整个 table 和 2 个文本字段和搜索按钮在这个主堆栈后面我想在这里展示) 主视图(其他只有 header 和侧边栏的 fxml 文件)
如下图link table image of required things
这是我的代码
public void initialize(URL location, ResourceBundle resources) {
databaseHandler = DatabaseHandler.getInstance();
initCol();
String qu = "SELECT * FROM country_tbl ";
ResultSet rs = databaseHandler.execQuery(qu);
try {
while (rs.next()) {
String id= rs.getString("id");
String name= rs.getString("countryname");
String description = rs.getString("descr");
String country2char= rs.getString("country2char");
String descrshort = rs.getString("descrshort");
data.add(new addcountryController(id,name, description,country2char,descrshort));
}
}catch (SQLException ex) {
Logger.getLogger(addcountryController.class.getName()).log(Level.SEVERE, null, ex);
}
tableUser.setItems(null);
tableUser.setItems(data);
tableUser.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
tableUser.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<addcountryController>() {
public void onChanged(ListChangeListener.Change<? extends addcountryController> c) {
try {
FXMLLoader loader =new FXMLLoader();
loader.load(getClass().getResource("/region/updatecountry.fxml").openStream());
updatecountryController usercontroller=(updatecountryController)loader.getController();
for (addcountryController p : c.getList()) {
String ADDID=p.getId();
String ADD=p.getName();
String ADD1=p.getDescriptionshort();
String ADD2=p.getDescription();
String ADD3=p.getCountrychar();
usercontroller.setText(ADDID,ADD,ADD1,ADD2,ADD3);
}
StackPane root = loader.getRoot();
stackmain.getChildren().clear();
stackview.getChildren().add(root);
} catch (IOException e) {
e.printStackTrace();
}
}
});
您好,第一点是解决方案:
您可以在 tableView
中设置您的 cellSize,然后您将能够使用它来获取行高(我发现这是获取行高的最简单方法)。
之后,您必须像这样将 table 的 prefHeight
绑定到您的数据大小:
tableView.setFixedCellSize(20);
tableView.prefHeightProperty().bind(Bindings.size(data).multiply(tableView.getFixedCellSize()).add(30));
有一个 .add(30)
,因为您必须添加 tableHeaderRow 的大小,这是最简单的方法,可以做一些实验并明确设置该值。如果你想得到准确的值,你可以通过 .lookup
s 来得到 TableHeaderRow
然后得到它的高度。
我不太明白你的第二个问题,你想把它显示在哪里。您可以使用 FXMLLoader 加载该视图并添加到它,但如果您指定更好一点,您到底想添加在哪里(其中 .fxml
,以及如何与 .fxml
链接包含 table).