我不能为我的生活弄清楚如何使SWT单选按钮单元使用当前的基础机制来确定交替的行'颜色和'选定的行'表中的颜色。
表格(默认情况下?)已经有交替/选定的行颜色,所有其他列/行都正确显示它们。注意 - 我一直在挖掘代码,但无法弄清楚备用/选定的行颜色是如何设置的。人们会认为它是ColumnLabelProvider,但事实并非如此。我看到了一个如何在下面的链接中手动设置交替颜色的示例,但我想避免这样做,因为我不会使用已经在引擎盖下使用的任何架构。
下面提供了代码示例。任何帮助将不胜感激!!
private Map<Object, Button> buttons = new HashMap<>();
...
private void createColumns(final TableViewer viewer) {
final TableViewerColumn column0 = new TableViewerColumn(viewer, SWT.CENTER);
column0.getColumn().setWidth(50);
column0.getColumn().setText("MyColumnTitle");
column0.setLabelProvider(new ColumnLabelProvider() {
@Override
public void update(final ViewerCell cell) {
cell.setImage(null);
cell.setText(null);
Button button;
if (buttons.containsKey(cell.getElement())) {
button = buttons.get(cell.getElement());
} else {
final TableItem item = (TableItem) cell.getItem();
button = new Button((Composite) cell.getViewerRow().getControl(), SWT.RADIO);
buttons.put(cell.getElement(), button);
// Make the radio button clickable
final TableEditor editor = new TableEditor(item.getParent());
editor.horizontalAlignment = SWT.LEFT;
editor.grabHorizontal = true;
editor.minimumWidth = 50;
editor.setEditor(button, item, cell.getColumnIndex());
editor.layout();
}
// Some things I have tried without success
// button.setBackground(null);
// button.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
// cell.getViewerRow().getControl().getParent().setBackgroundMode(SWT.INHERIT_NONE);
// cell.setBackground(cell.getNeighbor(ViewerCell.RIGHT, true).getBackground());
// cell.setForeground(cell.getNeighbor(ViewerCell.RIGHT, true).getForeground());
}
});
// This is a column that works fine (shows alternating rows/highlighting as expected)
final TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT);
column.getColumn().setWidth(240);
column.getColumn().setText("ColumnName");
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(final Object element) {
if (element instanceof MyObject) {
return MyObject.getText();
}
return super.getText(element);
}
});
答案 0 :(得分:1)
如果平台提供交替的行颜色,您可以^将表格的背景模式设置为SWT.INHERIT_FORCE
table.setBackgroundMode( SWT.INHERIT_FORCE );
如果通过标签提供者设置行颜色,则需要设置按钮的背景颜色以匹配按钮所在的行。
这是一个简单的SWT片段,我做了我认为你正在寻找的东西。每个偶数行都有一个绿色背景,并且单选按钮在激活之前会被指定所选项目的背景。
public static void main( String[] args ) {
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new FillLayout() );
Table table = new Table( shell, SWT.NONE );
TableColumn column = new TableColumn( table, 0 );
column.setWidth( 100 );
for( int i = 0; i < 10; i++ ) {
TableItem item = new TableItem( table, SWT.NONE );
item.setText( "item " + i );
if( i % 2 == 0 ) {
item.setBackground( display.getSystemColor( SWT.COLOR_GREEN ) );
}
}
final Button button = new Button( table, SWT.RADIO );
button.setText( "radio" );
table.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent event ) {
TableItem item = ( TableItem )event.item;
TableEditor editor = new TableEditor( item.getParent() );
button.setText( item.getText() );
button.setBackground( item.getBackground() );
editor.horizontalAlignment = SWT.LEFT;
editor.grabHorizontal = true;
editor.setEditor( button, item, 0 );
editor.layout();
}
} );
shell.pack();
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
display.dispose();
}