Netbeans说,对于observablearrayList,FXML文件中不存在类,但确实如此

时间:2013-12-03 21:14:20

标签: java netbeans javafx fxml

我有这个由Netbeans生成的FXML文件(但我修改了TableColumn位):

    <?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 javafx.scene.text.*?>
<?import javafx.scene.control.cell.*?>
<?import javafx.collections.*?>


<AnchorPane id="AnchorPane" fx:id="MainPane" prefHeight="529.0" prefWidth="513.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="d1example2.UserInterfaceController">
  <children>
    <SplitPane dividerPositions="0.17835671342685372" focusTraversable="true" layoutX="14.0" layoutY="14.0" orientation="VERTICAL" prefHeight="501.0" prefWidth="485.0">
      <items>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
          <children>
            <AnchorPane id="AnchorPane" layoutX="95.0" layoutY="32.0">
              <children>
                <TextField fx:id="FirstField" layoutX="0.0" layoutY="0.0" prefWidth="51.0" />
                <Text fx:id="TimesText" layoutX="65.0" layoutY="16.0" strokeType="OUTSIDE" strokeWidth="0.0" text="*" />
                <TextField id="FirstField" layoutX="90.0" layoutY="0.0" prefWidth="51.0" />
                <Text fx:id="EqualSign" layoutX="168.0" layoutY="16.0" strokeType="OUTSIDE" strokeWidth="0.0" text="=" />
                <Text fx:id="EquationResult" layoutX="245.0" layoutY="16.0" scaleX="1.632154219166214E8" scaleY="1.436917974231407" strokeType="OUTSIDE" strokeWidth="0.0" text="" />
              </children>
            </AnchorPane>
            <Button fx:id="SubmitButton" layoutX="356.0" layoutY="32.0" mnemonicParsing="false" onMouseClicked="#handleButtonAction" text="Submit" />
          </children>
        </AnchorPane>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
          <children>
            <TableView layoutX="13.0" layoutY="14.0" prefHeight="379.0" prefWidth="456.0">
              <columns>
     <TableColumn text="Half Value">
        <cellValueFactory><PropertyValueFactory property="HalfContent" />
        </cellValueFactory>
     </TableColumn>
     <TableColumn text="Double Value">
        <cellValueFactory><PropertyValueFactory property="DoubleContent" />
        </cellValueFactory>
     </TableColumn>
</columns> 
              <items>
            <FXCollections fx:factory="observableArrayList">
                <Data HalfContent="First Column Text" DoubleContent="Second Column Text" />
            </FXCollections>
            </items>
            </TableView>
          </children>
        </AnchorPane>
      </items>
    </SplitPane>
  </children>
</AnchorPane>

另一个名为“Data”的类看起来像这样:

package d1example2;

import javafx.beans.property.SimpleStringProperty;

/**
 *
 * @author zmeshign
 */
public final class Data {
   private final SimpleStringProperty HalfContent = new SimpleStringProperty("");
   private final SimpleStringProperty DoubleContent = new SimpleStringProperty("");

    public Data() {
        this("", "");
    }

    public Data(String HalfContent, String DoubleContent) {
        setHalfContent(HalfContent);
        setDoubleContent(DoubleContent);
    }

    public String getHalfContent() {
        return HalfContent.get();
    }

    public void setHalfContent(String hContent) {
        HalfContent.set(hContent);
    }

    public String getDoubleContent() {
        return DoubleContent.get();
    }

    public void setDoubleContent(String dContent) {
        DoubleContent.set(dContent);
    }

}

所以在这一行:

<Data HalfContent="First Column Text" DoubleContent="Second Column Text" />

它表示当我在相同的包下使用“数据”类时不存在。我要做的就是学习如何在TableView中的列下显示字符串。

我非常感谢任何帮助! 感谢

1 个答案:

答案 0 :(得分:1)

如何解决

在您的情况下,您需要添加到FXML文件中的相应指令才能找到您的Data类:

<?import d1example2.Data?>

为什么它失败了

FXML文件只是文件,它们不会编译为Java类(至少不是JavaFX 2.2版本)。这意味着文件本身并不真正了解它们所处的包(因为包装是Java概念)。可以告诉FXML文件在哪里找到他们需要的Java类。要执行此操作,请使用文件顶部的<?import java.lang.*?>指令(替换您的包名称以执行相应的导入)。


根据其他问题进行更新

  

这解决了“数据”部分的问题,但现在它说:类d1example2.Data不支持属性“HalfContent”。它也用“DoubleContent”来表示。

您需要遵循Java属性命名约定。根据这些约定,属性名称以小写字母开头而不是大写字母,因此在FXML中使用halfContentdoubleContent作为属性名称。

而不是:

<Data HalfContent="First Column Text" DoubleContent="Second Column Text" />

写:

<Data halfContent="First Column Text" doubleContent="Second Column Text" />

此外,您可能希望为属性定义属性访问器:

public StringProperty halfContentProperty() {
    return halfContent;
}
. . .