2013-10-25 2 views
0

В моем приложении у меня есть 2 таблицы, таблица A содержит дополнительные столбцы для таблицы B. Должно быть возможно перетащить «столбцы» (tableItem таблицы A) и отбросить их в таблицу B. Таблица B должна использовать перетаскиваемые элементы таблицы как новые столбцы. Это прекрасно работает. Таблица B добавляет их.org.eclipse.swt.widgets.TableColumn atPosition (x, y)

Теперь таблица B должна добавить столбцы в правильном порядке. org.eclipse.swt.dnd.DropTargetEvent знает свою позицию (DropTargetEvent.x/y). Поэтому я должен выяснить столбец/columnIndex в позиции drop, поэтому я мог бы добавить «новые столбцы» рядом с column.atPoint (x, y). org.eclipse.swt.widgets.Table сам получил метод, называемый getColumn (int index). Есть ли способ понять это?

ответ

1

Ниже приведен код, который будет распечатывать столбец для события щелчка мыши. Вы можете изменить его, чтобы использовать местоположение вашего капли вместо щелчка мыши:

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)); 

    Table table = new Table(shell, SWT.BORDER); 
    table.setHeaderVisible(true); 

    for(int col = 0; col < 3; col++) 
    { 
     TableColumn column = new TableColumn(table, SWT.NONE); 
     column.setText("Col: " + col); 
    } 

    for(int row = 0; row < 20; row++) 
    { 
     TableItem item = new TableItem(table, SWT.NONE); 

     for(int col = 0; col < table.getColumnCount(); col++) 
     { 
      item.setText(col, row + " " + col); 
     } 
    } 

    for(int col = 0; col < table.getColumnCount(); col++) 
    { 
     table.getColumn(col).pack(); 
    } 

    table.addListener(SWT.MouseDown, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      Table table = (Table) e.widget; 

      System.out.println("Column: " + getColumn(table, e.x)); 
     } 
    }); 

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

private static int getColumn(Table table, int x) 
{ 
    int overallWidth = 0; 

    for(int i = 0; i < table.getColumnCount(); i++) 
    { 
     overallWidth += table.getColumn(i).getWidth(); 
     if(x < overallWidth) 
     { 
      return i; 
     } 
    } 

    return -1; 
} 
+0

Возможно, я знал это, перебирая все столбцы. Я подумал, что, возможно, есть другой путь. Большое спасибо – user2919816

+0

@ user2919816 AFAIK нет встроенного способа сделать это. Во всяком случае, имейте в виду, что любое встроенное решение, вероятно, просто пропустит все столбцы. Если вы удовлетворены моим ответом, пожалуйста, подумайте о его принятии. – Baz

Смежные вопросы