JavaFX TableView: adding individual values in specific column

前端 未结 1 570
余生分开走
余生分开走 2020-12-22 11:51

I cant seem to find a solution for this and new to java/ javafx:

I have a 3 column tableview , last column is a price column. I would like to display a running total

相关标签:
1条回答
  • 2020-12-22 12:30

    Since the items of tableview are ObservableList, you may track for ListChangeListener, and update the calculated total price:

    public class Sample extends Application
    {
    
        @Override
        public void start( Stage primaryStage )
        {
            // items set to tableview
            ObservableList<Product> products = FXCollections.observableArrayList();
    
            DoubleProperty totalProperty = new SimpleDoubleProperty( 0 );
    
            products.addListener(( ListChangeListener.Change<? extends Product> change ) ->
            {
                while ( change.next() )
                {
                    if ( change.wasAdded() )
                    {
                        for ( Product p : change.getAddedSubList() )
                        {
                            totalProperty.set( totalProperty.get() + p.getPrice() );
                        }
                    }
                    else if ( change.wasRemoved() )
                    {
                        for ( Product p : change.getRemoved() )
                        {
                            totalProperty.set( totalProperty.get() - p.getPrice() );
                        }
                    }
                }
            });
    
            TextField textField = new TextField();
            textField.textProperty().bind( totalProperty.asString() );
    
            Random random = new Random();
    
            Button btnAdd = new Button( "Add product" );
            btnAdd.setOnAction( ( ActionEvent event ) ->
            {
                products.add( new Product( "new", ( double ) random.nextInt( 100 ) ) );
            } );
    
            Button btnRemove = new Button( "Remove product" );
            btnRemove.setOnAction( ( ActionEvent event ) ->
            {
                if ( products.size() > 0 )
                {
                    products.remove( random.nextInt( products.size() ) );
                }
            } );
    
            VBox root = new VBox();
            root.getChildren().addAll( textField, btnAdd, btnRemove );
    
            Scene scene = new Scene( root, 300, 250 );
    
            primaryStage.setScene( scene );
            primaryStage.show();
        }
    
    
        public static class Product
        {
            String name;
            Double price;
    
    
            public Product( String name, Double price )
            {
                this.name = name;
                this.price = price;
            }
    
    
            public String getName()
            {
                return name;
            }
    
    
            public void setName( String name )
            {
                this.name = name;
            }
    
    
            public Double getPrice()
            {
                return price;
            }
    
    
            public void setPrice( Double price )
            {
                this.price = price;
            }
    
        }
    
    
        public static void main( String[] args )
        {
            launch( args );
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题