如何在Java SWT表中获取列的值

时间:2018-12-05 12:24:02

标签: java swt

我想问一下如何从SWT表的每一列中获取相应的值。我很难得到这个,希望这次您能为我提供帮助。所以我的问题是我有列,我想获取此列的值。附件是我的程序中示例表的屏幕截图

enter image description here

在这种情况下,我想从Column1-Column6(1250、2305、1120、2450、2312、2134)中获取值,并将其总计并存储在 文本框。我还有一个表,其中有一个复选框,当您选中它时,它将自动显示如图所示的值。我试图获取值,但似乎它无法与我拥有的代码一起使用。

TotalItem= 0L;
    for (x= 0; x < tblPrice.length; x++) { 
            for (int y = 0; y < tblPrice[x].getColumnCount(); y++){ //columns
                if (tblItems[x].getItem(x).getChecked()) {
                    TotalItem = TotalItem+ Long.parseLong(tblPrice[x].getItem(y).getText());
                }
            } 
        }

1 个答案:

答案 0 :(得分:0)

很难说出您正在苦苦挣扎,但我将假设您没有从想要的表中获取值。

您正在调用TableItem#getText(),它将为您提供该行第一列的值。 如果要在特定的列中获取文本,则必须使用相应的表列索引调用TableItem#getText(int)

以下示例应对此进行说明。它显示了一个包含三列的表格,当您单击一个单元格时,它会打印该单元格的值。

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);

    int cols = 3;
    for (int c = 0; c < cols; c++)
    {
        TableColumn column = new TableColumn(table, SWT.NONE);
        column.setText("Column " + c);
    }

    int rows = 10;
    for (int r = 0; r < rows; r++)
    {
        TableItem item = new TableItem(table, SWT.NONE);

        for (int c = 0; c < cols; c++)
        {
            item.setText(c, r + " " + c);
        }
    }

    for (int c = 0; c < cols; c++)
        table.getColumn(c).pack();

    table.addListener(SWT.MouseDown, e -> {
        Point pt = new Point(e.x, e.y);
        TableItem item = table.getItem(pt);

        if (item != null)
        {
            for (int c = 0; c < table.getColumnCount(); c++)
            {
                Rectangle rect = item.getBounds(c);
                if (rect.contains(pt))
                {
                    System.out.println(item.getText(c));
                }
            }
        }
    });

    shell.pack();
    shell.open();
    shell.setSize(400, 300);

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