Reputation: 1141
I am trying to create the following dialog:
I have tried this:
import java.util.HashSet;
import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
public class CorrelationDlg extends Dialog {
private final GridLayout composite;
private Spinner spinner;
private Button button;
private final Table ancestors;
private final Table descendants;
public CorrelationDlg(Shell shell) {
super(shell);
composite = new GridLayout(4, false);
shell.setLayout(composite);
spinner = new Spinner(shell, SWT.FILL);
spinner.setMinimum(0);
spinner.setMaximum(7);
spinner.setIncrement(1);
GridData spinnerData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
spinnerData.horizontalSpan = 3;
spinner.setLayoutData(spinnerData);
spinner.pack();
button = new Button(shell, SWT.CHECK);
button.setText("Self:");
GridData buttonData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
buttonData.horizontalSpan = 3;
button.setLayoutData(buttonData);
button.pack();
ancestors = new Table(shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
final TableColumn ancestorsColumn = new TableColumn(ancestors, SWT.NONE);
ancestorsColumn .setText("Ancestors");
ancestors.setHeaderVisible(true);
GridData ancestorsData = new GridData(GridData.FILL_BOTH, SWT.BEGINNING, true, false);
ancestorsData.horizontalSpan = 3;
ancestors.setLayoutData(ancestorsData);
descendants = new Table(shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
final TableColumn descendantsColumn = new TableColumn(descendants, SWT.NONE);
descendantsColumn.setText("Descendants");
descendants.setHeaderVisible(true);
GridData descendantsData = new GridData(GridData.FILL_BOTH, SWT.BEGINNING, true, false);
descendantsData.horizontalSpan = 1;
descendants.setLayoutData(descendantsData);
}
public void addAncestors(Set<String> resourceKinds) {
for(final String resourceKind: resourceKinds) {
final TableItem item = new TableItem(ancestors, SWT.NONE);
item.setText(resourceKind);
}
ancestors.pack();
}
public void addDescendants(Set<String> resourceKinds) {
for(final String resourceKind: resourceKinds) {
final TableItem item = new TableItem(descendants, SWT.NONE);
item.setText(resourceKind);
}
descendants.pack();
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
CorrelationDlg dlg = new CorrelationDlg(shell);
Set<String> ancestors = new HashSet<>();
ancestors.add("A1");
ancestors.add("A2");
dlg.addAncestors(ancestors);
Set<String> ds = new HashSet<>();
ds.add("A1");
ds.add("A2");
dlg.addDescendants(ds);
shell.setSize(200, 200);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
But currently I am unable to see table items. Could you please point out what is the problem with this?
Upvotes: 0
Views: 805
Reputation: 7638
You didn't set the columns width and didn't correctly pack()
them, so their width is 0.
You can set the width using setWidth
, for example:
ancestorsColumn.setWidth(100);
or "pack" them with their pack()
method, for example in addAncestor
you could add this:
ancestors.getColumn(0).pack();
Upvotes: 1
Reputation: 2360
Your TableItem
s are definitely being added, which you can see if you resize the column:
What you'll need to do is either specify a width for the column via TableColumn#setWidth(int)
or via a TableLayout
(and potentially also TableColumnLayout
if your table will be resized, as this layout will maintain proportions per the documentation).
Upvotes: 1