我想创建一个自定义控件,我可以设置另一个自定义控件的列表,我希望能够像在JavaFX TableView中那样使用FXML(参见列列表):
<TableView fx:id="tableView">
<columns>
<TableColumn>
...
</TableColumn>
<TableColumn>
...
</TableColumn>
...
</columns>
</TableView>
public class FXMLTableViewController {
@FXML TableView<MyBean> tableView;
private void myMethod1() {
ObservableList<TableColumn<MyBean, ?>> columns = tableView.getColumns();
...
}
}
我只想写点:
<?import javafx.scene.control.*?>
<fx:root type="javafx.scene.control.Control" xmlns:fx="http://javafx.com/fxml">
<customList>
<CustomControl2>
...
</CustomControl2>
<CustomControl2>
...
</CustomControl2>
...
</customList>
</fx:root>
public class CustomControl1 extends Control {
private ObservableList<CustomControl2> controls2;
public CustomControl1() {
FXMLLoader fxmlLoader = new
FXMLLoader(getClass().getResource("CustomControl1.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
private void myMethod1() {
controls2 = getControls2();
...
}
}
我已经知道如何实现简单的自定义控件,但我还没有找到任何关于以这种方式编写自定义控件的信息。你能指点一些方向吗?
答案 0 :(得分:0)
您应该在<fx:root>
元素中使用该类的实际类型,因为Control
不提供customList
。即使用像type="my.package.CustomControl1"
这样的东西。
此外,以TableView
允许您为周围标记创建的类的方式添加元素需要提供带有标记名称的只读列表属性,即
public class CustomControl1 extends Control {
...
public ObservableList<CustomControl2> getCustomList() {
return controls2;
}
}