2016-04-21 50 views
0

我的问题是我的ListView没有在GUI上显示任何东西, 我添加了一个占位符来测试,它确实显示占位符文本,但除了我不能添加到列表中。JavaFX:ListView不显示在GUI中

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

由于某些原因,它不会工作,我试图只是输入随机数据只是为了看看是否这是问题,但仍然不是运气。

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

任何帮助将不胜感激,我搜索了近和远,因为我是新的这场斗争,理解为什么这是行不通的。

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

回答

2

ÿ您可以在Controller中创建list的新实例,但您的listview已在fxml文件中初始化。然后你将这些项目添加到新的实例,但是那个不会添加到scenegraph中,因此你的原始listView保持为空

+0

你先生真棒!我删除了初始化'list = new ListView <>();'现在全部按预期工作!我不知道它已经在fxml文件中初始化好了。我可以假设为TableView相同? – J2FX

+0

如果你通过'@ FXML'初始化某些东西,你不应该再次通过'new'初始化它,所以是的,你可以假定TableView是相同的。 – jewelsea

+0

@jewelsea谢谢:),因为当我删除注释它停止工作。 – J2FX