2017-04-12 1 views
0

두 개의 텍스트를 TableItem에 바꿔 넣고 싶습니다. 먼저 텍스트를 설정 한 다음 TableItem이 선택되었는지 확인하고 2 개의 변수에 저장하고 덮어 씁니다. 하지만 대신 내가 원하는 메시지의 이러한 문자열을 얻을 다음 @SWT TableItem getText가 예상 한 값을 반환하지 않습니다.

[Lorg.eclipse.swt.widgets.TableItem;@6fadae5d

부분은 항상 다르다, 나는 그것이 ID 또는 뭔가 그러나 나는 해결책을 찾을 수없는 것 같아요. 여기에 코드 스 니펫이 있습니다. groupsListString 어레이입니다.

for (int i = 1; i <= logic.amountOfGroups; i++) { 

     Table table = new Table(shell, SWT.MULTI | SWT.BORDER); 
     table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 
     for (int j = 0; j < logic.personsInGroup; j++) { 
      TableItem tableItem_1 = new TableItem(table, SWT.NONE); 
      tableItem_1.setText(logic.groupsList.get(i - 1)[j]); 
     } 
     tableList.add(table); 
    } 

그래서 나는 TableItems에 내용을 쓴 다음, 나는 그들을 교체하려면 : 여기

swapButton = new Button(shell, SWT.NONE); 
    swapButton.setText("Swap"); 
    swapButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseDown(MouseEvent e) { 
      int[] playerIndices = new int[2]; 
      int[] groupIndices = new int[2]; 
      int i = 0; 
      String toBeSwappedZero = ""; 
      String toBeSwappedOne = ""; 
      for (Table table : tableList) { 
       if (table.getSelectionCount() == 1) { 
        if (toBeSwappedZero == "") { 
         groupIndices[0] = i; 
         playerIndices[0] = table.getSelectionIndex(); 
         toBeSwappedZero = table.getSelection().toString(); 
        } else { 
         groupIndices[1] = i; 
         playerIndices[1] = table.getSelectionIndex(); 
         toBeSwappedOne = table.getSelection().toString(); 
        } 
       } 
       if (table.getSelectionCount() == 2) { 
        playerIndices = table.getSelectionIndices(); 
        groupIndices[0] = i; 
        groupIndices[1] = i; 
        toBeSwappedZero = table.getItem(playerIndices[0]).getText(); 
        toBeSwappedOne = table.getItem(playerIndices[1]).getText(); 
       } 
       i++; 
      } 
      System.out.println(toBeSwappedOne); 
      tableList.get(groupIndices[0]).getItem(playerIndices[0]).setText(toBeSwappedOne); 
      tableList.get(groupIndices[1]).getItem(playerIndices[1]).setText(toBeSwappedZero); 
     } 
    }); 

는 GUI enter image description here

+0

이 코드의 어느 부분이이 결과를 제공합니까? '[Lorg.eclipse.swt.widgets.TableItem, 6fadae5d' 당신이 테이블 항목의 배열에'toString'를 호출하여 얻을 것입니다 것입니다 @. –

답변

1

의 A의 이러한 라인을 찾아 가지고 당신의 MouseAdapter :

if (table.getSelectionCount() == 1) { 
    if (toBeSwappedZero == "") { 
     // ... 
     toBeSwappedZero = table.getSelection().toString(); 
    } else { 
     // ... 
     toBeSwappedOne = table.getSelection().toString(); 
    } 
} 

Table.getSelection()은배열을 반환합니다.개체. 그렉-449는 지적 @으로서 그 배열에 toString()를 호출하는 경우, 당신은 [Lorg.eclipse.swt.widgets.TableItem;@XXXXXXXX를 얻을 수 있습니다. 거기에 하나의 TableItem 선택, 그래서 안전하게 그 TableItem(다른 방법이 있다는 것을 적어도 하나를 검증 한 후 table.getItem(table.getSelectionIndex())을 할 수있는 액세스 할 수 table.getSelection()[0]을 할 수 있음을 이미 확인한 두 각각의 경우에

및 하나의 항목 만 선택). 나중에 관련이없는 if -statement에서

, 당신은 제대로 TableItem 텍스트가 있어요 : 시작 부분에 두 줄에 toString() 방법을 사용하는 그래서 그 대신

table.getItem(playerIndices[0]).getText(); 

을, 당신은 사용할 수 있습니다 getText() 여기에서 한 것처럼.

+0

감사합니다. 지금은 테스트 할 수 없지만 아마도 그럴 것입니다. – beld

+0

문제 없음 - 어떤 이유로 작동하지 않는지 및 다른 모습을 드리겠습니다. – avojak

관련 문제