Hi!
Ich hab ein etwas lästiges Problem mit nem Table in SWT.
Voerst mal mein Code:
Hier noch eine Klasse um das Ganze schnell testen zu können:
Das Problem bei dem Ganzen ist nun folgendes. Wenn ich normal mit meinem Mausrad langsam runterscrolle geht die Sache wie sie soll, alle Widgets werden gezeichnet.
Wenn ich allerdings die Scrollleiste mit der Maus halte und damit schnell nach unten scrolle und dann wo stehen bleibe dann werden die HeaderLines des Tables nicht angezeigt; erst nachdem die Maus über diese Flächen gewandert ist oder ich was in dem Table selektiert habe.
Was könnte man gegen dieses lästige Problem machen bzw. ist da überhaupt was machbar (in Anspielung auf BUG?).
Danke
MfG Markus
Ich hab ein etwas lästiges Problem mit nem Table in SWT.
Voerst mal mein Code:
Code:
public class Gui extends Composite {
public Gui(Composite parent, int style){
super(parent, style);
intialize();
}
private void create(int fragen)
{
ScrolledComposite scrollbar = new ScrolledComposite(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 1;
gd.horizontalAlignment = GridData.CENTER;
scrollbar.setLayoutData(gd);
GridLayout layout0 = new GridLayout(1,true);
scrollbar.setLayout(layout0);
Group group = new Group(scrollbar, SWT.NONE);
scrollbar.setContent(group);
GridData data1 = new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_CENTER);
data1.horizontalAlignment = GridData.CENTER;
group.setLayoutData(data1);
GridLayout layout = new GridLayout(1,true);
layout.verticalSpacing = 30;
group.setLayout(layout);
Label label = new Label(group, SWT.CENTER);
label.setText("What the?");
registerLayoutData(label, 1, 0);
for (int i=0;i<fragen;i++)
{
Group myGroup = new Group(group, SWT.NONE);
registerLayoutData(myGroup, 1, 0);
myGroup.setLayout(new FillLayout(SWT.VERTICAL));
Text frage = new Text(myGroup, SWT.WRAP | SWT.BORDER);
frage.setText("test...." + i);
Label bild = new Label(myGroup, SWT.CENTER);
bild.setText("whatever");
Table table = new Table(myGroup, SWT.BORDER);
TableColumn col1 = new TableColumn(table, SWT.LEFT);
col1.setText("x");
col1.pack();
TableColumn col2 = new TableColumn(table, SWT.LEFT);
col2.setText("y");
table.setSize(640,table.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
col2.pack();
TableItem item = new TableItem(table, 0);
item.setText(new String[]{"xyz", "abc"});
table.setHeaderVisible(true);
table.setLinesVisible(true);
}
Point size = group.computeSize(SWT.DEFAULT, SWT.DEFAULT);
group.setSize(size);
}
private void registerLayoutData(Control c, int x, int style)
{
GridData data = null;
if (style==0)
data = new GridData();
else
data = new GridData(style);
data.horizontalSpan = x;
data.horizontalAlignment = GridData.CENTER;
c.setLayoutData(data);
}
private void intialize()
{
GridLayout layout = new GridLayout(1,true);
this.setLayout(layout);
registerLayoutData(this, 1, GridData.FILL_BOTH);
create(100);
}
}
Hier noch eine Klasse um das Ganze schnell testen zu können:
Code:
public class Tester {
private Shell myShell;
public Tester()
{
createSShell();
}
/**
* This method initializes sShell
*/
private void createSShell() {
myShell = new Shell();
GridLayout layout = new GridLayout(1,true);
myShell.setLayout(layout);
new Gui(myShell, SWT.BORDER);
}
public void show()
{
myShell.open();
}
public static void main(String args[])
{
org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
WidgetTester test = new WidgetTester();
test.show();
while (!test.myShell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep ();
}
display.dispose();
}
}
Das Problem bei dem Ganzen ist nun folgendes. Wenn ich normal mit meinem Mausrad langsam runterscrolle geht die Sache wie sie soll, alle Widgets werden gezeichnet.
Wenn ich allerdings die Scrollleiste mit der Maus halte und damit schnell nach unten scrolle und dann wo stehen bleibe dann werden die HeaderLines des Tables nicht angezeigt; erst nachdem die Maus über diese Flächen gewandert ist oder ich was in dem Table selektiert habe.
Was könnte man gegen dieses lästige Problem machen bzw. ist da überhaupt was machbar (in Anspielung auf BUG?).
Danke
MfG Markus
Zuletzt bearbeitet: