我需要绑定主控制器中不同fxml的控件.我有3个名为MainView.fxml,ChildView1.fxml和ChildView2.fxml的fxml文件.
MainView.fxml
<AnchorPane fx:id="view" prefHeight="280.0" prefWidth="500.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="binding.example2.MainViewController">
<children>
<VBox prefHeight="280.0" prefWidth="500.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<fx:include fx:id="child1" source="ChildView1.fxml" />
<fx:include fx:id="child2" source="ChildView2.fxml" />
</children>
</VBox>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
ChildView1.fxml
<AnchorPane fx:id="view" prefHeight="78.0" prefWidth="464.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="binding.example2.ChildView1Controller">
<children>
<HBox layoutX="32.0" layoutY="14.0" prefHeight="51.0" prefWidth="200.0" spacing="10.0">
<children>
<Button fx:id="button1" mnemonicParsing="false" prefHeight="37.0" text="Button1" />
<Button fx:id="button2" mnemonicParsing="false" prefHeight="37.0" text="Button2" />
</children>
</HBox>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
ChildView2.fxml
<AnchorPane fx:id="view" prefHeight="244.0" prefWidth="568.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="binding.example2.ChildView2Controller">
<children>
<TableView fx:id="tableView" prefHeight="244.0" prefWidth="568.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
MainController.java
package binding.example2;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.layout.AnchorPane;
public class MainViewController {
@FXML
private Parent view;
@FXML
private AnchorPane child1;
@FXML
private AnchorPane child2;
@FXML
private ChildView1Controller childView1Controller;
@FXML
private ChildView2Controller childView2Controller;
@FXML
void initialize() {
System.out.println("MainViewController.initialize()");
// childView1Controller.getButton1() ;
}
public Parent getView() {
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
ChildView1Controller.java
package binding.example2;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
public class ChildView1Controller {
@FXML private ResourceBundle resources;
@FXML private URL location;
@FXML private Button button1;
@FXML private Button button2;
@FXML private Node view;
@FXML
void initialize() {
System.out.println("ChildView1Controller.initialize()");
button1.setDisable(true);
}
public Node getView()
{
return view;
}
public Button getButton1(){
return button1;
}
}
Run Code Online (Sandbox Code Playgroud)
ChildView2Controller.java
package binding.example2;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class ChildView2Controller {
@FXML private Node view;
@FXML private TableView<Person> tableView;
ObservableList<Person> data ;
public Node getView(){
return view ;
}
@FXML
void initialize() {
System.out.println("ChildView2Controller.initialize()");
//populateTable();
}
public TableView<Person> getTableView(){
return tableView ;
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,从ChildView1Controller禁用button1.
我想在我的其他视图(ChildView2.fxml)中的表行被选中时启用它.取消选择表行时再次禁用它.基本上我想绑定按钮和表,以便在选择表行时启用该按钮.请帮我使用MainViewController代码绑定按钮和表格行.
您可以注入的包括FXML的控制器MainViewController控制,指示在这里.
然后,您可以在MainViewController初始化方法中执行所需的绑定.考虑到子控制器公开Button和TableView使用getter方法,MainViewController可能是:
public class MainViewController {
@FXML
private ChildView1Controller childView1Controller;
@FXML
private ChildView2Controller childView2Controller;
@FXML
public void initialize() {
childView1Controller.getButton1().visibleProperty().bind(
childView2Controller.getTableView().getSelectionModel().selectedItemProperty().isNotNull());
}
}
Run Code Online (Sandbox Code Playgroud)
要正确注入这些子控制器,需要更改MainView.fxml中的include元素,更新它们的fx:id属性:
<fx:include fx:id="childView1" source="ChildView1.fxml" />
<fx:include fx:id="childView2" source="ChildView2.fxml" />
Run Code Online (Sandbox Code Playgroud)
来自@Dil的相关评论:
要求是,如果包含的资源的fx:id是"xxx",则相应控制器的变量名称是xxxController(so details - > detailsController)
| 归档时间: |
|
| 查看次数: |
6864 次 |
| 最近记录: |