SWT TableItem getText 没有 return 我所期望的
SWT TableItem getText doesn't return what I expect
我想在 TableItem
秒内交换两个文本。首先,我设置文本,然后检查选择了哪些 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);
}
});
这是 GUI
看看你的 MouseAdapter
:
中的这些行
if (table.getSelectionCount() == 1) {
if (toBeSwappedZero == "") {
// ...
toBeSwappedZero = table.getSelection().toString();
} else {
// ...
toBeSwappedOne = table.getSelection().toString();
}
}
请注意 Table.getSelection()
returns 一个 TableItem
对象数组。正如@greg-449 指出的那样,如果您在该数组上调用 toString()
,您将得到 [Lorg.eclipse.swt.widgets.TableItem;@XXXXXXXX
。
在这两种情况中的每一种情况下,您都已经检查过只有一个 TableItem
被选中,因此您可以安全地执行 table.getSelection()[0]
来访问 TableItem
(或者,您可以 table.getItem(table.getSelectionIndex())
在确认至少选择了一项且仅选择了一项之后).
在稍后的一个不相关的 if
语句中,您正确地得到了 TableItem
文本:
table.getItem(playerIndices[0]).getText();
因此,与其在开始的那两行中使用 toString()
方法,不如像此处那样使用 getText()
方法。
我想在 TableItem
秒内交换两个文本。首先,我设置文本,然后检查选择了哪些 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);
}
});
这是 GUI
看看你的 MouseAdapter
:
if (table.getSelectionCount() == 1) {
if (toBeSwappedZero == "") {
// ...
toBeSwappedZero = table.getSelection().toString();
} else {
// ...
toBeSwappedOne = table.getSelection().toString();
}
}
请注意 Table.getSelection()
returns 一个 TableItem
对象数组。正如@greg-449 指出的那样,如果您在该数组上调用 toString()
,您将得到 [Lorg.eclipse.swt.widgets.TableItem;@XXXXXXXX
。
在这两种情况中的每一种情况下,您都已经检查过只有一个 TableItem
被选中,因此您可以安全地执行 table.getSelection()[0]
来访问 TableItem
(或者,您可以 table.getItem(table.getSelectionIndex())
在确认至少选择了一项且仅选择了一项之后).
在稍后的一个不相关的 if
语句中,您正确地得到了 TableItem
文本:
table.getItem(playerIndices[0]).getText();
因此,与其在开始的那两行中使用 toString()
方法,不如像此处那样使用 getText()
方法。