Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步两个具有相同颜色的表中的选择_Java_Swt - Fatal编程技术网

Java 同步两个具有相同颜色的表中的选择

Java 同步两个具有相同颜色的表中的选择,java,swt,Java,Swt,我在一个Shell中有两个SWT表 当用户单击一个表中的一行时,我希望也选择下一个表中相应的行 然而,在当前的设置中(我用在线找到的代码片段演示),当单击一行时,相应的行也会高亮显示,但它是灰色的。我希望所有的选择都是一样的紫色 源代码: import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*;

我在一个Shell中有两个SWT

当用户单击一个表中的一行时,我希望也选择下一个表中相应的行

然而,在当前的设置中(我用在线找到的代码片段演示),当单击一行时,相应的行也会高亮显示,但它是灰色的。我希望所有的选择都是一样的紫色

源代码:

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class Snippet234 {
public static void main (String [] args) {
    int rowCount = 40;
    int columnCount = 15; 
    final Display display = new Display ();
    Shell shell = new Shell (display);
    shell.setLayout(new FillLayout());

    Composite parent = new Composite(shell, SWT.BORDER);
    GridLayout layout = new GridLayout(2, false);
    layout.marginWidth = layout.marginHeight = layout.horizontalSpacing = 0;
    parent.setLayout(layout);
    final Table leftTable = new Table(parent, SWT.MULTI | SWT.FULL_SELECTION);
    leftTable.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
    leftTable.setHeaderVisible(true);
    final Table rightTable = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    rightTable.setHeaderVisible(true);
    GridData table2Data = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2);
    rightTable.setLayoutData(table2Data);
    // Create columns
    TableColumn column1 = new TableColumn(leftTable, SWT.NONE);
    column1.setText("Name");
    column1.setWidth(150);
    for (int i = 0; i < columnCount; i++) {
        TableColumn column = new TableColumn(rightTable, SWT.NONE);
        column.setText("Value "+i);
        column.setWidth(200);
    }
    // Create rows
    for (int i = 0; i < rowCount; i++) {
        TableItem item = new TableItem(leftTable, SWT.NONE);
        item.setText("item "+i);
        item = new TableItem(rightTable, SWT.NONE);
        for (int j = 0; j < columnCount; j++) {
            item.setText(j, "Item "+i+" value @ "+j);
        }
    }
    // Make selection the same in both tables
    leftTable.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
            rightTable.setSelection(leftTable.getSelectionIndices());
        }
    });
    rightTable.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
            leftTable.setSelection(rightTable.getSelectionIndices());
        }
    });
    // On Windows, the selection is gray if the table does not have focus.
    // To make both tables appear in focus, draw the selection background here.
    // This part only works on version 3.2 or later.
    /*
    Listener eraseListener = new Listener() {
        public void handleEvent(Event event) {
            event.detail &= ~SWT.HOT;
            if((event.detail & SWT.SELECTED) != 0) {
                GC gc = event.gc;
                Rectangle rect = event.getBounds();
                gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
                gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_SELECTION));
                gc.fillRectangle(rect);
                event.detail &= ~SWT.SELECTED;                  
            }
        }
    };

    leftTable.addListener(SWT.EraseItem, eraseListener);
    rightTable.addListener(SWT.EraseItem, eraseListener);
    */

    // Make vertical scrollbars scroll together
    ScrollBar vBarLeft = leftTable.getVerticalBar();
    vBarLeft.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
            rightTable.setTopIndex(leftTable.getTopIndex());
        }
    });
    ScrollBar vBarRight = rightTable.getVerticalBar();
    vBarRight.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
            leftTable.setTopIndex(rightTable.getTopIndex());
        }
    });

    // Horizontal bar on second table takes up a little extra space.
    // To keep vertical scroll bars in sink, force table1 to end above
    // horizontal scrollbar
    ScrollBar hBarRight = rightTable.getHorizontalBar();
    Label spacer = new Label(parent, SWT.NONE);
    GridData spacerData = new GridData();
    spacerData.heightHint = hBarRight.getSize().y;
    spacer.setVisible(false);
    parent.setBackground(leftTable.getBackground());

    shell.setSize(600, 400);
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}
}
import org.eclipse.swt.*;
导入org.eclipse.swt.graphics.*;
导入org.eclipse.swt.layout.*;
导入org.eclipse.swt.widgets.*;
公共类代码段234{
公共静态void main(字符串[]args){
int rowCount=40;
int columnCount=15;
最终显示=新显示();
外壳=新外壳(显示);
setLayout(新的FillLayout());
复合材料母材=新复合材料(外壳、SWT.边框);
GridLayout=新的GridLayout(2,false);
layout.marginWidth=layout.marginHeight=layout.horizontalSpacing=0;
父.setLayout(布局);
最终表格leftTable=新表格(父级,SWT.MULTI | SWT.FULL_选择);
setLayoutData(新的GridData(SWT.LEFT,SWT.FILL,false,true));
leftTable.setheadervible(true);
最终表格右表=新表格(父级,SWT.MULTI | SWT.H| U滚动| SWT.V|U滚动| SWT.FULL|U选择);
rightTable.SetHeadServiceable(true);
GridData table2Data=新的GridData(SWT.FILL,SWT.FILL,true,true,1,2);
rightTable.setLayoutData(table2Data);
//创建列
TableColumn column1=新的TableColumn(leftTable,SWT.NONE);
第1列:setText(“名称”);
列1.设置宽度(150);
对于(int i=0;i
好的,我为你准备了一些东西。不要介意处理选择的糟糕方式,这不是我想要展示的。重要的部分是我绘制项目背景的地方,即
MyLabelProvider
s
paint()
方法:

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

    final TableViewer first = new TableViewer(shell);
    addColumn(first);
    first.setContentProvider(ArrayContentProvider.getInstance());
    final List<MyObject> firstInput = getInput();
    first.setInput(firstInput);
    first.setLabelProvider(new MyLabelProvider());

    final TableViewer second = new TableViewer(shell);
    addColumn(second);
    second.setContentProvider(ArrayContentProvider.getInstance());
    final List<MyObject> secondInput = getInput();
    second.setInput(secondInput);
    second.setLabelProvider(new MyLabelProvider());

    first.addSelectionChangedListener(new ISelectionChangedListener()
    {
        @Override
        public void selectionChanged(SelectionChangedEvent e)
        {
            int index = first.getTable().getSelectionIndex();
            second.getTable().setSelection(index);

            setSelection(firstInput, index);
            setSelection(secondInput, index);
        }
    });

    second.addSelectionChangedListener(new ISelectionChangedListener()
    {
        @Override
        public void selectionChanged(SelectionChangedEvent e)
        {
            int index = second.getTable().getSelectionIndex();
            first.getTable().setSelection(index);

            setSelection(firstInput, index);
            setSelection(secondInput, index);
        }
    });

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

private static void setSelection(List<MyObject> input, int index)
{
    for(MyObject obj : input)
    {
        obj.setSelected(false);
    }

    input.get(index).setSelected(true);
}

private static List<MyObject> getInput()
{
    List<MyObject> result = new ArrayList<MyObject>();

    result.add(new MyObject("First"));
    result.add(new MyObject("Second"));
    result.add(new MyObject("Third"));

    return result;
}

private static void addColumn(TableViewer viewer)
{
    TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE);
    col.getColumn().setWidth(200);
    col.getColumn().setText("Name:");
    col.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public String getText(Object element)
        {
            MyObject value = (MyObject) element;
            return value.getName();
        }
    });
}

private static class MyObject
{
    private String name;
    private boolean isSelected;

    public MyObject(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public boolean isSelected()
    {
        return isSelected;
    }

    public void setSelected(boolean isSelected)
    {
        this.isSelected = isSelected;
    }

    @Override
    public String toString()
    {
        return name;
    }
}

private static class MyLabelProvider extends StyledCellLabelProvider
{
    @Override
    protected void paint(Event event, Object element)
    {
        int width = 1000;
        int x = event.x - 2;
        int y = event.y;

        int height = event.height;
        GC gc = event.gc;

        MyObject object = (MyObject) element;

        Color oldBackground = gc.getBackground();

        Color color = object.isSelected ? Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION) : Display.getCurrent().getSystemColor(SWT.COLOR_LIST_BACKGROUND);

        gc.setBackground(color);

        gc.fillRectangle(x, y, width, height);

        gc.setBackground(oldBackground);

        super.paint(event, element);
    }
}
publicstaticvoidmain(字符串[]args)
{
显示=新显示();
最终外壳=新外壳(显示);
shell.setText(“StackOverflow”);
setLayout(新的FillLayout());
final TableViewer first=新TableViewer(shell);
添加列(第一);
首先是.setContentProvider(ArrayContentProvider.getInstance());
最终列表firstInput=getInput();
first.setInput(firstInput);
首先是setLabelProvider(新的MyLabelProvider());
最终TableViewer秒=新的TableViewer(外壳);
添加列(第二列);
setContentProvider(ArrayContentProvider.getInstance());
最终列表secondInput=getInput();
第二,设置输入(第二输入);
setLabelProvider(新的MyLabelProvider());
addSelectionChangedListener(新的ISelectionChangedListener()
{
@凌驾
公共无效选择已更改(选择更改已更改)
{
int index=first.getTable().getSelectionIndex();
second.getTable().setSelection(index);
选举