2016-11-22 78 views
0

我正在做一個家庭作業項目,其中用戶顯示一個產品目錄,然後用戶從目錄中選擇一個產品進行購買。SWT:表格調整問題

我決定使用SWT構建一個基本的UI。更不用說我剛開始學習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()); 
    } 

在UI啓動:

enter image description here

當用戶選擇產品: enter image description here

如您所見,第二張表格在填充表格時不會調整大小。儘管表格獲得垂直滾動窗格,但從用戶的角度來看,這是一個不便。

請問你能幫我嗎。我不確定這裏到底出了什麼問題。

回答

2

如果您希望包含此數據的Shell調整大小,您需要在向表中添加條目後調用Shellpack()方法。這將導致外殼重新計算外殼尺寸並重做組件佈局。

+0

太棒了!非常感謝。這工作。 –