2016-11-22 15 views
0

Я работаю над домашним проектом, в котором пользователь отображает каталог продуктов, а затем пользователь выбирает продукт из каталога для совершения покупки.SWT: Таблица Изменение размера номера

Я решил создать базовый интерфейс с использованием SWT. И не говоря уже о том, что я только начал изучать SWT.

Так вот что я сделал до сих пор. Первым компонентом UI является Table, который отображает каталог продуктов. Этот фрагмент кода для этого:

private void displayProductCatalog(List<Product> productList) { 
     Group group = new Group(shell, SWT.NULL); 
     group.setLayout(new GridLayout()); 
     Label label = new Label(group, SWT.NULL); 
     label.setAlignment(SWT.CENTER); 
     label.setText("Plese select a product by clicking on the desired row."); 

     Table table = new Table(group, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); 
     table.setLinesVisible(true); 
     table.setHeaderVisible(true); 
     GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); 
     table.setLayoutData(data); 
     String[] titles = { "Product ID", "Product Description", "Cost" }; 
     for (int i = 0; i < titles.length; i++) { 
      TableColumn column = new TableColumn(table, SWT.BOLD | SWT.CENTER); 
      column.setText(titles[i]); 
      column.setWidth(300); 
     } 

     String currency = " " + CurrencyHelper.fetchCurrency(); 

     for (Product product : productList) { 
      ProductDescription productDescription = product.getProductDescription(); 
      TableItem item = new TableItem(table, SWT.NONE); 
      item.setText(0, productDescription.getProductId()); 
      item.setText(1, productDescription.getDescription()); 
      item.setText(2, productDescription.getPrice().toString() + currency); 
     } 

     table.addSelectionListener(new TableRowSelectionListener(vendingMachine)); 
    } 

Затем следующий компонент снова представляет собой таблицу с двумя столбцами. Когда пользователь нажимает на любую строку в каталоге продуктов, на сервер выполняется вызов для выполнения нескольких проверок и для расчета окончательной цены с налогом. А затем эта вторая таблица заполняется различными налогами, которые были применены вместе с окончательной ценой. Таким образом, при запуске таблица каталогов продуктов заполняется, и эта вторая таблица создается, но остается пустой (заполняется, когда пользователь делает выбор). Фрагмент кода:

private void displaySaleLineItem(List<Product> productList) { 
     Group group = new Group(shell, SWT.NULL); 
     group.setLayout(new GridLayout()); 
     Label label = new Label(group, SWT.NULL); 
     label.setAlignment(SWT.CENTER); 
     label.setText("Product Details."); 

     saleLineItemTable = new Table(group, SWT.BORDER); 
     saleLineItemTable.setLinesVisible(true); 
     saleLineItemTable.setHeaderVisible(true); 
     // GridData data = new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1); 
     // saleLineItemTable.setLayoutData(data); 
     for (int i = 0; i < 2; i++) { 
      TableColumn column = new TableColumn(saleLineItemTable, SWT.BOLD | SWT.CENTER); 
      column.setWidth(450); 
     } 
    } 

Фрагмент кода, где вторая таблица заселяется:

@Override 
    public void onPropertyEventBeforeSale(Sale sale) { 
     TableItem item = new TableItem(saleLineItemTable, SWT.NONE); 
     item.setText(0, sale.getProduct().getProductDescription().getDescription()); 
     item.setText(1, sale.getProduct().getProductDescription().getPrice().toString()); 

     for (TaxTypeModel taxTypeModel : sale.getTaxModel().getTaxTypeModelList()) { 
      item = new TableItem(saleLineItemTable, SWT.NONE); 
      item.setText(0, taxTypeModel.getTaxName()); 
      item.setText(1, taxTypeModel.getTaxValue().toString() + "%"); 
     } 

     item = new TableItem(saleLineItemTable, SWT.NONE); 
     item.setText(0, "TOTAL"); 
     item.setText(1, sale.getTaxModel().getProductPriceIncludingTax().toString()); 
    } 

На пользовательском интерфейсе запуска:

enter image description here

Когда пользователь выбирает продукт: enter image description here

Как вы можете видеть, вторая таблица не изменяется при заполнении таблицы. Хотя таблица получает вертикальную панель прокрутки, но это неудобство с точки зрения пользователя.

Не могли бы вы помочь мне здесь. Я не уверен, что здесь точно не так.

ответ

2

Если вы хотите, чтобы Shell содержал эти данные для изменения размера, вам необходимо позвонить по методу pack() из Shell после добавления записей в таблицу. Это заставит оболочку пересчитать размер оболочки и повторить компоновку компонентов.

+0

Awesome !!! Большое спасибо. Это сработало. –