JavaFX自定义组件用法

时间:2015-08-27 20:49:52

标签: java javafx javafx-8 fxml

我的JavaFX中的自定义组件出现问题。

我的自定义组件包含包含TableView和TabPane的分割窗格:

MasterDetail.fxml

<fx:root type="javafx.scene.layout.VBox" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <SplitPane dividerPositions="0.5" orientation="VERTICAL">
            <items>
                <AnchorPane>
                    <children>
                        <TableView fx:id="table"/>
                    </children>
                </AnchorPane>

                <AnchorPane>
                    <children>
                        <TabPane fx:id="tabPane"/>
                    </children>
                </AnchorPane>
            </items>
        </SplitPane>
    </children>
</fx:root>

我想在另一个fxml中使用我的自定义控件,所以我创建了它,以及如何在MasterDetail组件中为TableView声明列?

例如,我想做这样的事情:

<MasterDetail fx:id="masterDetail">
    <table>
        <columns>
            <TableColumn fx:id="nameColumn" prefWidth="75.0" text="Name"/>
            <TableColumn fx:id="createDateColumn" prefWidth="75.0" text="Create date"/>
        </columns>
    </table>
</MasterDetail>

有可能在fxml中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

可以在&#39; masterDetail&#39;中定义表格列的数量。零件。但要发生这种情况,我们必须定义读取表格列的自定义属性。

示例:

   <CustomeTable>
        <children>
          <TableView fx:id="table"/>
        </children>
  </CustomeTable>

定义扩展AnchorPane的CustomeTable。

public class CustomeTable extends AnchorPane{

    private ObjectProperty<Integer> noOfColumns = new SimpleObjectProperty<Integer>();

public void setNoOfColumns(Integer noOfColumns){
noOfColumns.set(noOfColumns);    
}

public Integer getNoOfColumns(){
return noOfColumns.get();
}

public CustomeTable(){

// add the listener to the ObjectProperty
// which updates the noOfColumns into table
noOfCoulmns.addListener();

}


}