2017-02-17 27 views
2

我是Codename One的新手,對於Stack Overflow問題,我是新手。我覺得這兩個都很棒!如何在Codename One中的表格中選擇並高亮顯示一行

我對Codename One中的Table類有個疑問。我搜索了網頁,堆棧溢出,API,一切,並找不到一個好的答案。

我希望能夠選擇一行並突出顯示它,以便隨後可以對其中的數據執行操作。我已經通過重寫createCell方法並製作所有單元格按鈕來實現它,但這不是一個可接受的方法。問題是因爲每次用戶點擊一個單元格時都必須重建表格。

當表中包含的行數多於可以顯示的行數,並且重建表時,表跳轉回表的開始位置。如果用戶希望看到它,那麼用戶必須回滾到所選行。讓桌子像這樣跳躍是不可接受的。

此外,我可能想在表中使用其他控件。我知道有一個table.getSelectedRow(),所以有可能我錯過了一些東西。另外,我想知道如何以編程方式選擇一行。

任何幫助,非常感謝!

回答

0

,我將使用的解決方案是:

  1. 對於單一選擇,第一列中的單選按鈕。
  2. 對於多選,第一列中的複選框。

我仍然好奇com.codename1.ui.table.Table類中的getSelectedRow()是什麼。

我希望這可以幫助別人在他們的GUI設計。

0

這是基於來自javadocs的樣本Table。在一個較小的黑客我所做的就是setModel(getModel())觸發表的刷新手動:

Form hi = new Form("Table", new BorderLayout()); 
TableModel model = new DefaultTableModel(new String[] {"Col 1", "Col 2", "Col 3"}, new Object[][] { 
    {"Row 1", "Row A", "Row X"}, 
    {"Row 2", "Row B can now stretch", null}, 
    {"Row 3", "Row C", "Row Z"}, 
    {"Row 4", "Row D", "Row K"}, 
    }) { 
     public boolean isCellEditable(int row, int col) { 
      return col != 0; 
     } 
    }; 
Table table = new Table(model) { 
    private int selectedRow = -1; 
    @Override 
    protected Component createCell(Object value, int row, int column, boolean editable) { 
     Component cell; 
     if(row < 0) { 
      cell = super.createCell(value, row, column, editable); 
     } else { 
      cell = new Button(value.toString()); 
      cell.setUIID("TableCell"); 
      ((Button)cell).addActionListener(e -> { 
       selectedRow = row; 
       setModel(getModel()); 
      }); 
     } 
     if(selectedRow > -1 && selectedRow == row) { 
      cell.getAllStyles().setBgColor(0xff0000); 
      cell.getAllStyles().setBgTransparency(100); 
     } 
     return cell; 
    } 

    @Override 
    protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) { 
     TableLayout.Constraint con = super.createCellConstraint(value, row, column); 
     if(row == 1 && column == 1) { 
      con.setHorizontalSpan(2); 
     } 
     con.setWidthPercentage(33); 
     return con; 
    } 
}; 
hi.add(BorderLayout.CENTER, table); 
hi.show(); 

enter image description here

+0

謝謝你的回答。在對該主題進行研究並提出問題之前,我提出了相同的解決方案。但是,它不符合我的所有要求。我確實想出了一個替代方案,我將作爲答案發布。再次感謝你的幫助。 – Chuck