JavaFX:ListView不在GUI中显示 [英] JavaFX: ListView not displaying in GUI

查看:170
本文介绍了JavaFX:ListView不在GUI中显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是我的ListView没有在GUI上显示任何内容,
我添加了一个占位符进行测试,它确实显示了占位符文本,但除此之外我无法添加到列表中。

My problem is that my ListView is not showing anything on the GUI, I have added a placeholder to test and it does show the placeholder text but other than that I cannot add to the list.

我的目标是列出所有客户帐户,我已经包含了帐户类,我想在ListView中显示我的所有帐户ID。

My aim is to have a list of all my clients accounts, I have included the Account class, I want to display all my accounts ID's in the ListView.

由于某种原因,它不起作用,我只是尝试输入随机数据,看看是否存在问题,但仍然没有运气。

For some reason it will not work, I have tried just inputting random data just to see if thats the issue but still not luck.

我在Main.class文件中有一个名为allAccounts的静态Set。

I have a static Set called allAccounts in my Main.class file.

任何帮助都会非常感激,我已经搜索了很远,因为我是这个斗争的新手了解为什么这不起作用。

Any help would be greatly appreciated, I have searched near and far and since I am new to this struggle to understand why this is not working.

Controller.class

public class Controller implements Initializable{

    @FXML
    private TableView<?> tableView;
    @FXML
    private TableColumn<?, ?> tableAccount;
    @FXML
    private TableColumn<?, ?> tableDate;
    @FXML
    private TableColumn<?, ?> tableTime;
    @FXML
    private TableColumn<?, ?> tableTotal;
    @FXML
    private TableColumn<?, ?> tableNotes;
    @FXML
    private ListView<String> list;
    @FXML
    private TextArea invoiceView;
    @FXML
    private TextField amountField;
    @FXML
    private Button addAmount;
    @FXML
    private Button newInvoice;
    @FXML
    private Button saveInvoice;
    @FXML
    private Button deleteInvoice;
    @FXML
    private Label messageBar;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //list.setPlaceholder(new Label("No Content In List"));
        ObservableList<String> names = FXCollections.observableArrayList(
                "Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise");
        list = new ListView<>();
        list.setItems(names);

        //tableView = new TableView<>(names);

    }

    @FXML
    public void newInvoiceFired() {
        System.out.println("new invoice button has been clicked");
    }

    @FXML
    public void deleteInvoiceFired() {
        System.out.println("delete invoice button has been clicked");

    }
    @FXML
    public void saveInvoiceFired() {
        System.out.println("save invoice button has been clicked");

    }

    public void setAccountsList(){

        for (Account account : Main.getAllAccounts()){

        }

    }

}

GUI.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="477.0" prefWidth="641.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <children>
      <SplitPane dividerPositions="0.24249999999999972" layoutY="50.0" prefHeight="427.0" prefWidth="641.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="50.0">
        <items>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <ListView fx:id="list" layoutX="-24.0" layoutY="62.0" prefHeight="425.0" prefWidth="151.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
               </children>
            </AnchorPane>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="445.0" prefWidth="411.0">
               <children>
                  <SplitPane dividerPositions="0.30023640661938533" layoutX="143.0" layoutY="123.0" orientation="VERTICAL" prefHeight="445.0" prefWidth="480.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                    <items>
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                           <children>
                              <TableView layoutX="128.0" layoutY="45.0" prefHeight="208.0" prefWidth="478.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                <columns>
                                    <TableColumn fx:id="tableAccount" prefWidth="75.0" text="Account" />
                                  <TableColumn fx:id="tableDate" prefWidth="75.0" text="Date" />
                                  <TableColumn fx:id="tableTime" prefWidth="75.0" text="Time" />
                                    <TableColumn fx:id="tableTotal" prefWidth="75.0" text="Amount" />
                                    <TableColumn fx:id="tableNotes" prefWidth="75.0" text="Notes" />
                                </columns>
                              </TableView>
                           </children>
                        </AnchorPane>
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="286.0" prefWidth="478.0">
                           <children>
                              <SplitPane dividerPositions="0.4474789915966387" layoutX="168.0" layoutY="48.0" prefHeight="292.0" prefWidth="478.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                <items>
                                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                                       <children>
                                          <TextArea fx:id="invoiceView" layoutX="5.0" layoutY="14.0" prefHeight="290.0" prefWidth="209.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
                                       </children>
                                    </AnchorPane>
                                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                                       <children>
                                          <TextField fx:id="amountField" layoutX="82.0" layoutY="86.0" prefHeight="27.0" prefWidth="104.0" promptText="0.00" />
                                          <Button fx:id="addAmount" layoutX="195.0" layoutY="86.0" mnemonicParsing="false" text="Add" />
                                          <Label layoutX="14.0" layoutY="91.0" text="Amount: : " />
                                       </children>
                                    </AnchorPane>
                                </items>
                              </SplitPane>
                           </children>
                        </AnchorPane>
                    </items>
                  </SplitPane>
               </children>
            </AnchorPane>
        </items>
      </SplitPane>
      <ImageView fitHeight="150.0" fitWidth="200.0" layoutX="14.0" layoutY="11.0" pickOnBounds="true" preserveRatio="true">
         <image>
            <Image url="@Icon/Logo.png" />
         </image>
      </ImageView>
      <HBox alignment="CENTER_RIGHT" layoutX="462.0" layoutY="14.0" spacing="15.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0">
         <children>
            <Button fx:id="newInvoice" mnemonicParsing="false" onAction="#newInvoiceFired" text="New" />
            <Button fx:id="saveInvoice" mnemonicParsing="false" onAction="#deleteInvoiceFired" text="Save" />
            <Button fx:id="deleteInvoice" mnemonicParsing="false" onAction="#deleteInvoiceFired" text="Delete" />
         </children>
      </HBox>
   </children>
</AnchorPane>

Account.class

public class Account {
    private String id;
    private String name;
    private String address1;
    private String address2;
    private String postCode;
    private Set<Invoice> invoiceArchive = new HashSet<>();

    public Account(String id, String name, String address1, String address2, String postCode) {
        this.id = id;
        this.name = name;
        this.address1 = address1;
        this.address2 = address2;
        this.postCode = postCode;
        Main.addAccount(this);
    }

    public Account(String id, String name, String address1, String postCode) {
        this.id = id;
        this.name = name;
        this.address1 = address1;
        this.postCode = postCode;
    }

    public Account(String name, String id) {
        this.name = name;
        this.id = id;
    }

    public String getId() {

        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress1() {
        return address1;
    }

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    public String getAddress2() {
        return address2;
    }

    public void setAddress2(String address2) {
        this.address2 = address2;
    }

    public String getPostCode() {
        return postCode;
    }

    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }

    public Set<Invoice> getInvoiceArchive() {
        return invoiceArchive;
    }

    public Invoice newInvoice(){
        Invoice i = new Invoice(this);
        invoiceArchive.add(i);
        return i;
    }

    @Override
    public String toString(){
        return this.getId();
    }
}


推荐答案

你尽管您的listview在fxml文件中初始化,但在 Controller 中创建 list 的新实例。然后将项目添加到新实例,但不会将其添加到场景图形中,因此原始listView保持为空

You create a new instance of list in Controller, though your listview is initialized in the fxml file. Then you add the items to the new instance, but that one is not added to the scenegraph, hence your original listView remains empty

这篇关于JavaFX:ListView不在GUI中显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆