Я не могу обернуть текст внутри ячейки таблицы, когда ширина превышает указанный предел.
Код:
public static void main(String[] args) {
List<TableData> list = Collections.synchronizedList(new ArrayList<TableData>());
list.add(new TableData("Jack Hodgins", 24) );
list.add(new TableData("This is just aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "\n" + "hugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+ "\n" + "messsageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+ "\n" + "to checkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
+ "\n" + "wrap functionalityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", 50));
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Table Viewer Column");
shell.setSize(800, 1500);
TableViewer viewer = new TableViewer(shell, SWT.FILL | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setSize(1000, 1500);
table.setLayout(new TableLayout());
/** Column for Name */
TableViewerColumn columnName = new TableViewerColumn(viewer, SWT.MULTI | SWT.WRAP);
columnName.getColumn().setWidth(250);
columnName.getColumn().setText("Name");
columnName.setLabelProvider(new ColumnLabelProvider() {
@Override
public void update(ViewerCell cell)
{
Object element = cell.getElement();
if (element instanceof TableData)
{
TableData obj = (TableData) element;
cell.setText(obj.getName());
}
}
});
/** Column for Age */
TableViewerColumn columnAge = new TableViewerColumn(viewer, SWT.NONE);
columnAge.getColumn().setWidth(100);
columnAge.getColumn().setText("Age");
columnAge.setLabelProvider(new ColumnLabelProvider() {
@Override
public void update(ViewerCell cell)
{
Object element = cell.getElement();
if (element instanceof TableData)
{
TableData obj = (TableData) element;
cell.setText(String.valueOf(obj.getAge()) );
}
}
});
viewer.setContentProvider(ArrayContentProvider.getInstance());
viewer.setInput(list);
viewer.refresh();
table.pack();
shell.pack();
shell.open();
shell.setVisible(true);
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
public static class TableData
{
String name;
int age;
public TableData(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
Я буду знать ширину своей ячейки таблицы, и если текст превышает этот предел, я хочу, чтобы оставшийся текст находился в новой строке.
Я просмотрел другие ссылки из stackoverflow -
многострочная функция или функция переноса текста в jface tableviewer http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet231.java http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet006TableMultiLineCells.java
До сих пор не удается найти решение для этого. Пожалуйста, помогите.
OwnerDrawLabelProvider
, но это означает рисовать ячейки самостоятельно. Однако в таблице всегда отображаются все строки с одинаковой высотой, поэтому все строки будут иметь высоту многострочной строки. - person greg-449   schedule 18.03.2015