SWT Table disabled und Scrollbar enabled

Madli

Mitglied
Hi

ich habe folgendes Problem.
Ich verwende einen CheckboxTableViewer und will die Table deaktivieren aber die Scrollbalken nicht.

naheliegend währe ja eigendlich:

Java:
table.setEnabled(false);
table.getHorizontalBar().setEnabled(true);

Aber der Bar bleibt trotzdem disabled. Im SWT Scrollbar gibt es ja auch 2 Methoden um den Status abzufragen:

Java:
public boolean getEnabled () {
	checkWidget();
	return (state & DISABLED) == 0;
}

Java:
public boolean isEnabled () {
	checkWidget();
	return getEnabled () && parent.isEnabled ();
}

Meine Vermutung ist, das beim setzen der GUI isEnabled verwendet wird und ich deswegen den Scrollbalken nicht aktiv bekomme.
Kann mir jemand sagen wie ich das Problem lösen kann?

Danke im Vorraus
Madli
 
Keiner der mir helfen kann?
Das Problem muss doch bekannt sein, oder funktionier das nur bei mir nicht?
Hab schon wie wild das Internet durchstöbert aber nix gefunden.
 
Was soll dass denn bringen? Was hast du denn genau vor?
Warum muss die Tabelle disabled sein? Man kann doch eh nichts eingeben
 
Na eigendlich sollen die Checkboxes disabled sein aber ansich gehts auch um das Prinzip.
Ich möchte verstehen warum der Scrollbalken nicht eingeschaltet wird wenn ich
Java:
table.getHorizontalBar().setEnabled(true);
mache.
 
Na eigendlich sollen die Checkboxes disabled sein aber ansich gehts auch um das Prinzip.
Ich möchte verstehen warum der Scrollbalken nicht eingeschaltet wird wenn ich
Java:
table.getHorizontalBar().setEnabled(true);
mache.

Mach mal ein ein Beispiel (KSKB).
 
Ok ich hab mal ein Minimalprogramm geschrieben, es sollte das Problem verdeutlichen.

Java:
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;

public class TestWidget extends Composite
{

	public TestWidget(Composite parent)
	{
		super(parent, SWT.NONE);
		// TODO Auto-generated constructor stub
		createTable();
	}

	private void createTable()
	{
		Table table = new Table(this, SWT.CHECK | SWT.FULL_SELECTION | SWT.HIDE_SELECTION | SWT.VIRTUAL | SWT.BORDER);
		table.setHeaderVisible(true);
		CheckboxTableViewer tableViewer = new CheckboxTableViewer(table);
		tableViewer
				.add("Das ist ein verdammt langer Text, so das ein Scrollbalken erscheinen sollte!!! Denn so ein Text muss einfach gescrollt werden auch wenn die Checkbox ausgeschaltet ist.");
		GridData layoutData = new GridData(GridData.FILL, GridData.FILL, true, true);
		layoutData.heightHint = 5 * table.getItemHeight();
		layoutData.widthHint = 500;
		setLayoutData(layoutData);
		setLayout(new GridLayout(1, true));
		table.setEnabled(false);
		table.getHorizontalBar().setEnabled(true);
		//Hier sollte man normalerweise noch scrollen können

	}

	public static void main(String[] args)
	{
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new GridLayout());
		TestWidget testWidget = new TestWidget(shell);
		shell.open();
		while (!shell.isDisposed())
		{
			if (!display.readAndDispatch())
				display.sleep();
		}
	}

}

eigendlich sollte die Tabelle hier noch Scrollbar sein auch wenn der Inhalt disabled ist.

Vielen Dank
Madli
 
IMHO ist das ne relativ logische Konsequenz.
Das disablen eines Widgets führt dazu, dass dieses nicht mehr angewählt werden kann. Bei dieser Table bedeuted dies zwangsweise, dass alle enthaltenen Widgets ebenfalls nicht angewählt werden können.

Oder mal an nem platten Beispiel:
Wenn der Backofen keinen Strom hat, kannst du weder Herdplatte noch Ofen benutzen
 
Also muss das so sein? Find es halt nur komisch das man den Scrollbalken nach der Deaktivierung des tables nicht wieder aktivieren kann. Weil wenn ich der Herdplatte extra Strom gebe, hat der Backofen keinen Strom aber die Herdplatte 🙂
 
Ich hoffe du hast mein Beispiel verstanden und grad einfach nur zerpflückt.

Aber da du es vermutlich nicht ganz verstanden hast. Beim Disablen der Table wird der Scrollbalken nicht disabled. Er ist weiterhin enabled, nur eben nicht anwählbar, weil das ganze Widget (zu dem die scrollbar nunmal gehört) disabled ist.
 
Ich hoffe du hast mein Beispiel verstanden und grad einfach nur zerpflückt.

Aber da du es vermutlich nicht ganz verstanden hast. Beim Disablen der Table wird der Scrollbalken nicht disabled. Er ist weiterhin enabled, nur eben nicht anwählbar, weil das ganze Widget (zu dem die scrollbar nunmal gehört) disabled ist.

Richtig das ganze Composite von dem die Table erbt ist disabled sieht du an der farbe der Scrollbar.
Java:
table.getHorizontalBar().setEnabled(false);

Find ich eigentlich auch ein Bug, dass nicht alle Childrens disabled dargestellt werden.
 
Zuletzt bearbeitet von einem Moderator:
Ok dann habe ich das jetzt verstanden, nicht so schön wie in meiner Vorstellung aber ich denke wenn man es weiss kommt man damit klar 🙂


Danke Euch
Madli
 
Ok dann habe ich das jetzt verstanden, nicht so schön wie in meiner Vorstellung aber ich denke wenn man es weiss kommt man damit klar 🙂


Danke Euch
Madli

Du kannst mal ins Eclipse Forum zu SWT schreiben vielleicht wissen die wie man den CheckBoxTableViewer readonly machen kann.

Ansonsten sourcen anschauen, ich denk mal irgendwo gibt es einen EditingSupport und den kannst du eventuell abschalten (canEdit):
Eclipse RCP: JFace TableViewer
 

Zurück
Oben