在SWT中闪烁TableViewer或TreeViewer的背景行

Mau*_*uli 9 java swt eclipse-rcp

我需要能够在TableViewer/TreeViewer中为行提供闪烁(红色,可能更多颜色)的背景.什么是最好的选择?

可能有多个行闪烁,闪烁必须是同步的,我需要两个闪烁模式,快速和慢速.

Pau*_*sma 0

您应该有一个类似于这样的结构:

LinkedList<Row> rows = new LinkedList<Row>();
Thread blinker = null;

public void start() {
    blinker = new Thread() {
        public void run() {
            while(!this.interrupted()) {
                try {
                    synchronized (rows) {
                        for (Row row : rows) {
                            row.setForegroundColor(color1);
                        }
                    }
                    Thread.sleep(500);
                    synchronized (rows) {
                        for (Row row : rows) {
                            row.setForegroundColor(color2);
                        }
                    }
                    Thread.sleep(500);
                } catch (InterruptException e) {
                    break;
                }
            }
        }
    };
    blinker.start();
}

public void stop() {
    if (blinker != null) {
        blinker.interrupt();
    }
}

public void add(Row row) {
    synchronized (rows) {
        if (!rows.contains(row)) {
            rows.add(row);
        }
    }
}

public void remove(Row row) {
    synchronized (rows) {
        rows.remove(row);
    }
}
Run Code Online (Sandbox Code Playgroud)

Shell显示时,它应该调用start(). 当它处置时,请致电stop()

请注意,我还没有实际测试过这一点;这是一些 Javaish 伪代码。如果您无法按照setForegroundColor()上面的建议设置行颜色,您也许可以引入一个小部件并定义一个paint()事件。