JFace TableViewer でラップされた SWT テーブルがあります。列全体を右揃えにする方法を知っています:
TableColumn column = new TableColumn(viewer.getTable(), SWT.RIGHT);
ただし、入力に応じてセルごとに配置を変更したいのですが、基本的には、数字を含むセルのみを右揃えにしたいと考えています。
私はこれをスニペットで試してきました(http://wiki.eclipse.org/JFaceSnippets#Snippet016TableLayoutから取得)。このテーブルは CellLabelProvider を使用します。update(ViewerCell cell)
このメソッドでは、セルごとに背景色などを設定できるため、メソッドの配置を変更できると思いました。しかし、私は生産するのに適したものを見つけることができません。
助言がありますか?以下の完全なスニペット。
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* Snippet for alignment in a table viewer.
*/
public class TableViewerAlignmentSnippet {
private class MyContentProvider implements IStructuredContentProvider {
public Object[] getElements(final Object inputElement) {
return (MyModel[]) inputElement;
}
public void dispose() {
}
public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
}
}
private class MyLabelProvider extends CellLabelProvider implements ITableLabelProvider {
@Override
public Image getColumnImage(final Object element, final int columnIndex) {
return null;
}
@Override
public String getColumnText(final Object element, final int columnIndex) {
return element.toString();
}
@Override
public void update(final ViewerCell cell) {
// TODO - set alignment based on the cell text?
}
}
public class MyModel {
public int counter;
public MyModel(final int counter) {
this.counter = counter;
}
@Override
public String toString() {
return "Item " + this.counter;
}
}
public TableViewerAlignmentSnippet(final Composite comp) {
final TableViewer v = new TableViewer(new Table(comp, SWT.BORDER));
v.setLabelProvider(new MyLabelProvider());
v.setContentProvider(new MyContentProvider());
v.getTable().setHeaderVisible(true);
TableColumnLayout ad = new TableColumnLayout();
comp.setLayout(ad);
TableColumn column = new TableColumn(v.getTable(), SWT.NONE);
column.setText("Column 1");
column.setMoveable(true);
ad.setColumnData(column, new ColumnWeightData(90, 290));
column = new TableColumn(v.getTable(), SWT.NONE);
column.setText("Column 2");
column.setMoveable(true);
ad.setColumnData(column, new ColumnWeightData(10, 200));
MyModel[] model = createModel();
v.setInput(model);
v.getTable().setLinesVisible(true);
}
private MyModel[] createModel() {
MyModel[] elements = new MyModel[10];
for (int i = 0; i < 10; i++) {
elements[i] = new MyModel(i);
}
return elements;
}
public static void main(final String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new TableViewerAlignmentSnippet(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}