2016-04-25 16 views
0

私はまったく新しいJavaとImをちょっと試してみました。次のコードでは、AddButton経由で新しい項目を追加できるListViewを設定しました。項目をAddButton経由でTableViewに追加しましたか?

  1. は今、私は次の時間は、イム、コード内のデフォルトの項目1-5でなく、私がした項目だけでなく、コードを実行しているように、私のプログラムでは、これらの手動で追加したアイテムを保存する方法を思ったんだけど手動で追加されたものが私のテーブルに表示されますか?私は手動で追加された項目が保存され、コードを再度実行するたびに読み込まれるいくつかの外部ライブラリを構築する必要があると思いますか?

  2. また、削除ボタンをクリックして1つのボタンで複数のアイテムをマーキングして削除するにはどうすればよいですか?

  3. さらに、このコードをライトするもう1つの詳細な方法があります。selectedProducts.forEach(allProducts :: remove);ここで何が起こっているの背景を確認するには?


public class Main extends Application {  

    public static void main(String[] args) { 
     launch(args);        
    } 

    @Override             
    public void start(Stage stage) throws Exception {  

     //BAUSTEINE - Eingabefeld: 
     TextField nameInput = new TextField(); 
     nameInput.setMinWidth(100); 
     nameInput.setPromptText("Name"); 

     TextField priceInput = new TextField(); 
     priceInput.setMinWidth(100); 
     priceInput.setPromptText("Price"); 

     TextField quantityInput = new TextField(); 
     quantityInput.setMinWidth(100); 
     quantityInput.setPromptText("Quantity"); 


     //BAUSTEINE - Tabelle: 
     TableColumn<Product, String> nameSpalte = new TableColumn<>();   
     nameSpalte.setText("Name");            
     nameSpalte.setMinWidth(200);            
     nameSpalte.setCellValueFactory(new PropertyValueFactory<>("Name"));  
     TableColumn<Product, Double> priceSpalte = new TableColumn<>(); 
     priceSpalte.setText("Price"); 
     priceSpalte.setMinWidth(200); 
     priceSpalte.setCellValueFactory(new PropertyValueFactory<>("price")); 

     TableColumn<Product, String> quantitySpalte = new TableColumn<>(); 
     quantitySpalte.setText("Quantity"); 
     quantitySpalte.setMinWidth(200); 
     quantitySpalte.setCellValueFactory(new PropertyValueFactory<>("quantity")); 

     TableView<Product> tabelle = new TableView<Product>();     
     tabelle.getColumns().addAll(nameSpalte, priceSpalte, quantitySpalte); 
     tabelle.setItems(getProduct());           



     //BAUSTEINE - Buttons: 
     Button addButton = new Button("Add"); 
     addButton.setOnAction(new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent event) {      
       Product product = new Product(); 
       product.setName(nameInput.getText());       
       product.setPrice(Double.parseDouble(priceInput.getText()));  
       product.setQuantity(Integer.parseInt(quantityInput.getText())); 
       tabelle.getItems().addAll(product);        
       nameInput.clear();            
       priceInput.clear();            
       quantityInput.clear();           
      } 
     }); 

     Button deleteButton = new Button("Delete");        
     deleteButton.setOnAction(new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent event) { 
       ObservableList<Product> allProducts = tabelle.getItems();  
       ObservableList<Product> selectedProducts = tabelle.getSelectionModel().getSelectedItems(); 
       selectedProducts.forEach(allProducts:: remove); 
      } 
     }); 


     //LAYOUT: 
     HBox hBox = new HBox(); 
     hBox.setPadding(new Insets(10,10,10,10)); 
     hBox.setSpacing(10); 
     hBox.getChildren().addAll(nameInput, priceInput, quantityInput, addButton, deleteButton); 

     VBox vBox = new VBox(); 
     vBox.getChildren().addAll(tabelle, hBox); 

     //EIGENSCHAFTEN DER SCENE: 
     Scene scene = new Scene(vBox); 

     //EIGENSCHAFTEN DER STAGE: 
     stage.setScene(scene); 

     //PROGRAMMSTART: 
     stage.show(); 
    } 

    public ObservableList<Product> getProduct() {         
     ObservableList<Product> products = FXCollections.observableArrayList();  
     products.add(new Product("Item 1", 859.00, 20)); 
     products.add(new Product("Item 2", 2.49, 198)); 
     products.add(new Product("Item 3", 99.00, 74)); 
     products.add(new Product("Item 4", 19.99, 12)); 
     products.add(new Product("Item 5", 1.49, 856)); 
     return products;            
    } 

} 

答えて

0
  1. おそらく、このフォーラムのために広すぎる質問です。永続的な形式で表される製品の希望方法については、 を決定する必要があります。再び標準 java.ioを使用してそれ は、ユーザーが定義するテキスト形式(この場合は あなただけ それらを読み書きするために、標準的なjava.ioクラスを使用します)で、フラット・ファイルであることができ、あなたはJavaのシリアル化を使用することができます(;このことに注意してください最近はあまり普及しておらず、 はそれを稼働させるのは簡単ですが、それを稼働させるのは難しいかもしれません )。 JSONやXMLなどの標準形式を使用し、 ライブラリ(例:JacksonまたはGoogle GSON)を使用して 製品をこの形式に整列/非整列します。あるいは、リレーショナルデータベースと JDBCまたはJPAを使用して、データベースの読み書きを行うこともできます。 (あなたがそれらを表現する方法を決めたら、あなたが立ち往生している場合、実装、およびポスト具体的な質問をしてみてください。)
  2. 使用tabelle.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
  3. あなたの現在のコードが

    for (Product p : selectedProducts) { 
        allProducts.remove(p); 
    } 
    

    注意することは基本的に同等ですが選択された項目をリセットする(選択モデルの実装などに応じて)ので、リストを反復しようとすると悪いことが起こるため、これは少し壊れやすくなりますそれは変化している。これは、新しいリストに選択した項目をコピーすることはおそらく良いでしょう:

    List<Product> selectedItems = new ArrayList<>(tabelle.getSelctionModel().getSelectedItems()); 
    for (Product p : selectedItems) { 
        allProducts.remove(p); 
    } 
    

    、これもありますのでご注意:

    List<Product> selectedItems = new ArrayList<>(tabelle.getSelctionModel().getSelectedItems()); 
    allProducts.removeAll(selectedItems); 
    
+0

やあジェームス、最も一般的なまたは最も近代的な方法は何か、JSON + GsonライブラリまたはJDBC?私はJsonの方法のために、私はいくつかのjavascriptを理解する必要があると思います。私はまだそれを学んでいませんでした...私もSQLを使用できますか?長所短所? – Richi888

+0

それには簡単な答えはありません。あなたはJSONを使うためにjavascriptを知る必要はありません。オブジェクトを表現するためのテキスト形式です(javascriptは非常に分かりやすいですが、javascriptは必要ありません)。しかし、どちらを選択するかは、ユースケースによって異なります。アプリケーションの外部からデータにアクセスしたいのですか?アプリケーションにデータベースエンジンを組み込むのがどれくらい簡単か、サードパーティのライブラリなどを使うのがどれくらい簡単かなどです –

関連する問題