2013-10-22 79 views
3

我有一個隨機順序填充複合材料的GridLayout。現在,我正在對列表/集合中填充GridLayout的複合材料進行排序,並希望按照列表/集合中的排序結果對它們進行排序。我試圖通過將它們再次分配給父母來做到這一點,以便他們按照正確的順序進行,但由於某種原因沒有發生任何事情。然後我嘗試將它們緩存在你看不到的Composite中,然後用與第一次嘗試相同的方法將它們帶回到父項。根本沒有改變。任何人都有一個指針?我按日期排序,以防萬一/所以想知道。Reorder GridLayout SWT

這就是我的網格看起來像現在我想要像他們在我的arrayList();

回答

3

你正在尋找的是Control#moveAbove(Control control)Control#moveBelow(Control control)進行重新排序的方法:

private static List<Label> labels = new ArrayList<Label>(); 
private static List<Color> colors = new ArrayList<Color>(); 

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("Stackoverflow"); 
    shell.setLayout(new RowLayout(SWT.VERTICAL)); 

    colors.add(display.getSystemColor(SWT.COLOR_BLUE)); 
    colors.add(display.getSystemColor(SWT.COLOR_CYAN)); 
    colors.add(display.getSystemColor(SWT.COLOR_GREEN)); 
    colors.add(display.getSystemColor(SWT.COLOR_YELLOW)); 
    colors.add(display.getSystemColor(SWT.COLOR_RED)); 

    for (int i = 0; i < 5; i++) 
    { 
     Label label = new Label(shell, SWT.BORDER); 
     label.setText("Button " + i); 
     label.setBackground(colors.get(i)); 

     labels.add(label); 
    } 

    Button sortButton = new Button(shell, SWT.TOGGLE); 
    sortButton.setText("Sort"); 

    sortButton.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      Button source = (Button) e.widget; 

      final boolean asc = source.getSelection(); 

      Label oldFirst = labels.get(0); 

      Collections.sort(labels, new Comparator<Label>() 
      { 
       @Override 
       public int compare(Label o1, Label o2) 
       { 
        int result = o1.getText().compareTo(o2.getText()); 

        if (asc) 
         result = -result; 

        return result; 
       } 
      }); 

      Label label = labels.get(0); 
      label.moveAbove(oldFirst); 

      for (int i = 1; i < labels.size(); i++) 
      { 
       labels.get(i).moveBelow(labels.get(i - 1)); 
      } 
      shell.layout(); 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

啓動後:

enter image description here

按下該按鈕後:

enter image description here

+0

非常明確的例子,將其作爲答案! – Johnny000

+0

@ Johnny000乾杯隊友。欣賞它。 – Baz

+0

是不是moveAbove()和moveBelow()只適用於z軸?我有同樣的問題和moveAbove/moveBelow將不會改變任何訂單 – Stoppal

1

我找到了解決方案。你必須調用child.moveAbove(otherChild).moveBelow()當你與重新排序做到了父複合致電parent.layout()