2016-04-21 13 views
0

私の問題は、ListViewがGUI上に何も表示していないことです。 プレースホルダを追加してプレースホルダテキストを表示しますが、JavaFX:ListViewがGUIに表示されない

私の目的はすべてのクライアントのアカウントのリストを持つことです。私はAccountクラスを含めて、すべてのアカウントIDをListViewに表示します。

何らかの理由でうまくいかない場合は、ランダムなデータを入力して問題があるかどうかを確認してみましたが、それでも問題はありません。

私は、Main.classファイルにallAccountsという静的なセットを持っています。

何か助けていただければ幸いです。なぜこれが機能していないのかを理解するために、私はこの闘争には新しくなっています。

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

Yあなたのリストビューはfxmlファイルで初期化されますが、listという新しいインスタンスをControllerに作成してください。次に、新しいインスタンスに項目を追加しますが、それはシーングラフに追加されないため、元のlistViewは空のままです。

+0

あなたは素晴らしいです!私は初期化 'list = new ListView <>();を削除しました。今はすべて期待どおりに動作します!私はそれが知って良いfxmlファイル内で既に初期化されていることを知らなかった。私はTableViewのために同じと仮定することはできますか? – J2FX

+0

'@ FXML'を使って何かを初期化した場合、' new'を使って初期化するべきではありません。そうすれば、TableViewでも同じことが言えます。 – jewelsea

+0

@ jewelsea thanks :)注釈を削除したときに機能が停止したように意味があります。 – J2FX