我想在TableItem
s中交换两个文本。首先,我设置文本,然后检查选择了哪个TableItem
,将它们保存在2个变量中并覆盖它们。但我得到这些字符串而不是我想要的信息:
[Lorg.eclipse.swt.widgets.TableItem;@6fadae5d
@
之后的部分总是不同的,我猜它是ID或其他东西,但我无法找到解决方案。这是代码片段。 groupsList
是String
数组。
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);
}
});
答案 0 :(得分:1)
在MouseAdapter
:
if (table.getSelectionCount() == 1) {
if (toBeSwappedZero == "") {
// ...
toBeSwappedZero = table.getSelection().toString();
} else {
// ...
toBeSwappedOne = table.getSelection().toString();
}
}
请注意Table.getSelection()
返回TableItem
个对象的数组。正如@ greg-449指出的那样,如果你在该阵列上调用[Lorg.eclipse.swt.widgets.TableItem;@XXXXXXXX
,你将获得toString()
。
在这两种情况中,您已经检查过只选择了一个TableItem
,因此您可以安全地table.getSelection()[0]
访问TableItem
(或者,您可以在验证至少选择了一个且仅选择一个项目之后执行table.getItem(table.getSelectionIndex())
。
在以后的无关if
声明中,您正确地获取了TableItem
文字:
table.getItem(playerIndices[0]).getText();
因此,您不必在开始时在这两行上使用toString()
方法,而是希望在此处使用getText()
。