SWT TableItem getText没有返回我期望的内容

时间:2017-04-12 16:35:52

标签: java user-interface swt

我想在TableItem s中交换两个文本。首先,我设置文本,然后检查选择了哪个TableItem,将它们保存在2个变量中并覆盖它们。但我得到这些字符串而不是我想要的信息:

[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

1 个答案:

答案 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()