java - Netbeans 表示 observablearrayList 的 FXML 文件中不存在类,但它确实存在

标签 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" />

它说“Data”类不存在,而我将它放在同一个包下。我想做的就是学习如何在 TableView 的列下显示字符串。

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

最佳答案

如何解决

根据您的情况,您需要将适当的指令添加到 FXML 文件中,以便它找到您的 Data类是:

<?import d1example2.Data?>

为什么你失败了

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

<小时/>

根据其他问题进行更新

This fixed the problem with the "data" part, but now it's saying: Class d1example2.Data does not support property "HalfContent". It also says this with "DoubleContent".

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

而不是:

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

写:

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

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

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

关于java - Netbeans 表示 observablearrayList 的 FXML 文件中不存在类,但它确实存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361794/

相关文章:

java - 如何在 Java 中使单选按钮动态更改文本

java - 使用 AsyncTaskLoader 更新位置数据 UI?

java - Raspberry pi 与 java 应用程序 CPU 使用率高

java - 如何仅显示 JComponent/SwingNode/Java FX Pane 的一部分

java - Gradle + JavaFX-构建 'resources'目录的正确方法是什么?

java - 使用 Javascript 隐藏 HttpUnit 和参数

java - 为什么在这种情况下编译器不能限制返回类型

java - Netbeans 中的 J2me : How can I align my list items from right to left?

c++ - Linux 上 Netbeans 中的代码帮助

java - JDK 8 错误 : Can not start NetBeans 7. 3