我的 Table JavaFX/SceneBuilder 中没有显示数据
Data is not showing in my Table JavaFX/SceneBuilder
我已经学习了很多关于如何在我的 table 中填充单元格的教程,但是当我 运行 程序时,我似乎无法让它们显示出来。知道我做错了什么以及如何解决吗?
谢谢,
package application;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("GUISCENEBUILDER.fxml"));
Scene scene = new Scene(root,850,700);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
属性
package application;
import javafx.beans.property.SimpleStringProperty;
public class Product {
private final SimpleStringProperty windowTime;
private final SimpleStringProperty emailTime;
public Product(String windowTime, String emailTime) {
this.windowTime = new SimpleStringProperty(windowTime);
this.emailTime = new SimpleStringProperty(emailTime);
}
public String getWindowTime() {
return windowTime.get();
}
public void setWindowTime(String newTime) {
windowTime.set(newTime);
}
public String getEmailTime() {
return emailTime.get();
}
public void setEmailTime(String newTime) {
emailTime.set(newTime);
}
}
TableViewController
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class TableViewController implements Initializable {
@FXML
private TableView<Product> tableID;
@FXML
private TableColumn<Product, String> windowTime;
@FXML
private TableColumn<Product, String> emailTime;
/*
* Get all the products
*/
ObservableList<Product> data = FXCollections.observableArrayList(
new Product("7:00am - 8:30am", "8:30am"),
new Product("10:00am - 11:10am", "11:10am"),
new Product("12:00pm - 1:30pm", "1:30pm"),
new Product("3:00pm - 4:30pm", "4:30pm")
);
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
windowTime.setCellValueFactory(new PropertyValueFactory<Product, String>("windowTime"));
emailTime.setCellValueFactory(new PropertyValueFactory<Product, String>("emailTime"));
tableID.setItems(data);
}
}
FXML
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.effect.InnerShadow?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<center>
<TabPane prefHeight="472.0" prefWidth="850.0" tabClosingPolicy="UNAVAILABLE" BorderPane.alignment="CENTER">
<tabs>
<Tab text="Press 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="526.0" prefWidth="805.0">
<children>
<ImageView fitHeight="559.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="Press 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ImageView fitHeight="561.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
<Tab fx:id="tableID" text="Press 3">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ImageView fitHeight="559.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</center>
<top>
<Pane prefHeight="126.0" prefWidth="850.0" BorderPane.alignment="CENTER">
<children>
<ImageView fitHeight="126.0" fitWidth="850.0">
<image>
<Image url="@1.1.jpg" />
</image>
</ImageView>
<Button layoutX="14.0" layoutY="23.0" mnemonicParsing="false" style="-fx-background-color: #9EBCD2;" text="Start">
<font>
<Font size="38.0" />
</font>
<effect>
<InnerShadow color="#b5b5b5" height="32.77" radius="15.907499999999999" width="32.86" />
</effect>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
</Button>
<Button depthTest="ENABLE" layoutX="154.0" layoutY="23.0" mnemonicParsing="false" style="-fx-background-color: #9EBCD2;" text="Stop">
<font>
<Font size="38.0" />
</font>
<effect>
<InnerShadow blurType="ONE_PASS_BOX" color="#b5b5b5" height="32.67" radius="15.8825" width="32.86" />
</effect>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
</Button>
</children>
<cursor>
<Cursor fx:constant="DEFAULT" />
</cursor>
</Pane>
</top>
</BorderPane>
您没有在 FXML 文件中指定控制器 class。您需要向根元素添加一个 fx:controller
属性:
<BorderPane fx:controller="application.TableViewController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
此外,您所有的 table 都具有相同的 fx:id
,相应的 table 列也是如此,这没有意义,并且您的其中一个选项卡还(莫名其妙地)与 table 共享相同的 fx:id
。 ID 应该是唯一的。
最后,您已将 table 行的高度设置为 1 像素,这会使看清任何内容变得有些困难。从 table 视图中删除 fixedCellSize
属性。
我已经学习了很多关于如何在我的 table 中填充单元格的教程,但是当我 运行 程序时,我似乎无法让它们显示出来。知道我做错了什么以及如何解决吗?
谢谢,
package application;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("GUISCENEBUILDER.fxml"));
Scene scene = new Scene(root,850,700);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
属性
package application;
import javafx.beans.property.SimpleStringProperty;
public class Product {
private final SimpleStringProperty windowTime;
private final SimpleStringProperty emailTime;
public Product(String windowTime, String emailTime) {
this.windowTime = new SimpleStringProperty(windowTime);
this.emailTime = new SimpleStringProperty(emailTime);
}
public String getWindowTime() {
return windowTime.get();
}
public void setWindowTime(String newTime) {
windowTime.set(newTime);
}
public String getEmailTime() {
return emailTime.get();
}
public void setEmailTime(String newTime) {
emailTime.set(newTime);
}
}
TableViewController
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class TableViewController implements Initializable {
@FXML
private TableView<Product> tableID;
@FXML
private TableColumn<Product, String> windowTime;
@FXML
private TableColumn<Product, String> emailTime;
/*
* Get all the products
*/
ObservableList<Product> data = FXCollections.observableArrayList(
new Product("7:00am - 8:30am", "8:30am"),
new Product("10:00am - 11:10am", "11:10am"),
new Product("12:00pm - 1:30pm", "1:30pm"),
new Product("3:00pm - 4:30pm", "4:30pm")
);
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
windowTime.setCellValueFactory(new PropertyValueFactory<Product, String>("windowTime"));
emailTime.setCellValueFactory(new PropertyValueFactory<Product, String>("emailTime"));
tableID.setItems(data);
}
}
FXML
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.effect.InnerShadow?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<center>
<TabPane prefHeight="472.0" prefWidth="850.0" tabClosingPolicy="UNAVAILABLE" BorderPane.alignment="CENTER">
<tabs>
<Tab text="Press 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="526.0" prefWidth="805.0">
<children>
<ImageView fitHeight="559.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="Press 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ImageView fitHeight="561.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
<Tab fx:id="tableID" text="Press 3">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ImageView fitHeight="559.0" fitWidth="850.0" layoutY="-7.0">
<image>
<Image url="@1.jpg" />
</image>
</ImageView>
<TableView fx:id="tableID" fixedCellSize="1.0" layoutX="594.0" layoutY="55.0">
<columns>
<TableColumn fx:id="windowTime" prefWidth="75.0" text="Window Times" />
<TableColumn fx:id="emailTime" prefWidth="75.0" text="Email Times" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</center>
<top>
<Pane prefHeight="126.0" prefWidth="850.0" BorderPane.alignment="CENTER">
<children>
<ImageView fitHeight="126.0" fitWidth="850.0">
<image>
<Image url="@1.1.jpg" />
</image>
</ImageView>
<Button layoutX="14.0" layoutY="23.0" mnemonicParsing="false" style="-fx-background-color: #9EBCD2;" text="Start">
<font>
<Font size="38.0" />
</font>
<effect>
<InnerShadow color="#b5b5b5" height="32.77" radius="15.907499999999999" width="32.86" />
</effect>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
</Button>
<Button depthTest="ENABLE" layoutX="154.0" layoutY="23.0" mnemonicParsing="false" style="-fx-background-color: #9EBCD2;" text="Stop">
<font>
<Font size="38.0" />
</font>
<effect>
<InnerShadow blurType="ONE_PASS_BOX" color="#b5b5b5" height="32.67" radius="15.8825" width="32.86" />
</effect>
<cursor>
<Cursor fx:constant="HAND" />
</cursor>
</Button>
</children>
<cursor>
<Cursor fx:constant="DEFAULT" />
</cursor>
</Pane>
</top>
</BorderPane>
您没有在 FXML 文件中指定控制器 class。您需要向根元素添加一个 fx:controller
属性:
<BorderPane fx:controller="application.TableViewController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
此外,您所有的 table 都具有相同的 fx:id
,相应的 table 列也是如此,这没有意义,并且您的其中一个选项卡还(莫名其妙地)与 table 共享相同的 fx:id
。 ID 应该是唯一的。
最后,您已将 table 行的高度设置为 1 像素,这会使看清任何内容变得有些困难。从 table 视图中删除 fixedCellSize
属性。