【问题标题】:Netbeans says class does not exist in FXML file for observablearrayList but it doesNetbeans 说 observablearrayList 的 FXML 文件中不存在类,但它确实存在
【发布时间】:2013-12-03 21:14:19
【问题描述】:

我有这个由 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 的列下显示字符串。

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

【问题讨论】:

    标签: java netbeans javafx fxml


    【解决方案1】:

    如何解决

    在您的情况下,您需要添加到 FXML 文件以使其找到您的 Data 类的适当指令是:

    <?import d1example2.Data?>
    

    为什么你失败了

    FXML 文件只是文件,它们没有被编译成 Java 类(至少在 JavaFX 2.2 版本中没有)。这意味着文件本身并不真正知道它们所在的包(因为打包是一个 Java 概念)。可以告诉 FXML 文件在哪里找到他们需要的 Java 类。为此,您使用文件顶部的&lt;?import java.lang.*?&gt; 指令(替换您的包名称以执行适当的导入)。


    根据其他问题更新

    这解决了“数据”部分的问题,但现在它说:类 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;
    }
    . . . 
    

    【讨论】:

    • 非常感谢!这解决了“数据”部分的问题,但现在它说:类 d1example2.Data 不支持属性“HalfContent”。它还使用“DoubleContent”来说明这一点。我在这里做错了什么?再次感谢,感谢您的帮助!
    • 我在答案中添加了更新以解决您的其他问题。
    • 非常感谢。所以我将它们的第一个字母更改为小写,并为它们添加了属性访问器,但它仍然给出了与它们中的 2 个相同的“类 d1example2.Data 不支持属性 halfContent”。还有什么我需要做但我没有做过的事情或我犯的任何错误吗?再次感谢您的帮助,非常感谢!
    • 对不起是我的错,我觉得我太累了! FXML 中仍有一些以大写字母开头的属性。我将它们全部替换为正确的格式并解决了问题。再次感谢您的帮助!
    • 这里不相关,但在 NetBeans 中出现此错误的另一个原因是您在 FXML 文件中编写类似 fx:controller="myPackage.myController.java" 的内容。错误在于它是类名,而不是包含该类的文件名,这是预期的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多