JavaFX: ListView not displaying in GUI

时间:2016-04-21 22:12:39

标签: java listview user-interface intellij-idea javafx

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.

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.

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();
    }
}

1 个答案:

答案 0 :(得分:2)

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