SplitPane vordefinieren

Status
Nicht offen für weitere Antworten.

Rainbow

Bekanntes Mitglied
Hallo,
ich habe ein SplitPane, bei dem ich gerne im Code sagen würde, das eine Seite ausgeblendet ist.
Momentan nutze ich dazu setDividerLocation(0.0) ...dies ist jedoch nicht die optimale Lösung, gibt es noch andere möglichkeiten als diese?

Java:
public void setSplitPane(boolean flag) {
		int lastDividerLocation = splitPane.getLastDividerLocation();
		if(flag) {
			splitPane.setDividerLocation(0.0);
		}
		else {
			splitPane.setDividerLocation(lastDividerLocation);
		}
	}
 

0001001

Bekanntes Mitglied
Was bedeutet für dich denn ausgeblendet?
Eine Splitpane hat zwei Teile, das einzige was du machen kannst (und was du auch machst) ist den Teiler ganz auf eine Seite zu schieben.
 

Rainbow

Bekanntes Mitglied
Ja richtig und das möchte ich gerne anders lösen. Ich möchte das, was passiert, wenn ich auf einen Pfeil klicke, im Code schreiben.
Aber nicht so, wie ich es momentan tue, da diese Variante fehlerhaft ist.
z.B. bei mehreren Aufrufen der Methode erfolgt nicht mehr der gewünschte Effekt.
 

wessi

Mitglied
Meinst du es so?
Java:
splitPane.setOneTouchExpandable(true);
Damit ist es dann möglich den Trenner nach links und rechts zu verschieben, wenn man auf die Pfeile drückt.
 

Rainbow

Bekanntes Mitglied
genau das was die Pfeile machen möchte ich im Code vordefiniert hinschreiben....
so wie ich es bisher gemacht habe ist es vom optischen ja genau so wie ich es haben möchte....nur ist es wie gesagt bei mehreren Aufrufen fehlerhaft.....
 

wessi

Mitglied
Also so richtig habe ich noch nicht verstanden was du vor hast, aber man kann einen Klick - Listener auf den Trenner definieren.

Java:
BasicSplitPaneUI splitPaneUI = (BasicSplitPaneUI)(splitPane.getUI());
splitPaneUI.getDivider().addMouseListener(new MouseAdapter(){
	boolean t = false;
	@Override
	public void mouseClicked(MouseEvent e) {
		if(!t)
		{
			splitPane.setDividerLocation(0);
		}else
		{
			splitPane.setDividerLocation(200);
		}
			t = !t; 
		}
	}
);
 

Ebenius

Top Contributor
Sauberen Code wird's dafür nicht geben. Die beiden Buttons liegen auf dem SplitPaneDivider, welcher vollkommen von der UI-Delegate-Implementierung versteckt wird. Die Buttons haben leider auch keine Namen und sind so im Prinzip nichtmal voneinander zu unterscheiden. Du kannst Dir mal den Quelltext von BasicSplitPaneUI ansehen und findest eventuell einen Weg, die Buttons zumindest für alle BasicSplitPaneUI-Derivate über die Kontainer-Hierarchie herauszufinden und dann doClick() aufzurufen. Aber hübsch wird's nicht und mit jedem LookAndFeel wird's auch nicht funktionieren.

Ebenius
 

Rainbow

Bekanntes Mitglied
Ich dachte ich hätte es klar und deutlich geschrieben...sorry

Ich brauche doch keinen Klick-Listener auf die Pfeile? Die Pfeile interessieren mich gar nicht.

Ich denke, meine Methode ist durch den Aufruf von splitPane.getLastDividerLocation();
fehlerhaft.....das muss ich anders lösen.
 

wessi

Mitglied
Wenn du den Trenner einmal verschoben hast (nach 0.0), ist dann beim nächsten Aufruf von
Java:
splitPane.getLastDividerLocation();
der Wert 0. Also der Trenner wird nicht mehr verschoben.

Du müsstest also von vornherein den Wert in der Variable speichern, wohin du den Trenner später zurück schieben willst.
 

Ebenius

Top Contributor
Ich dachte ich hätte es klar und deutlich geschrieben...sorry
Dito. :-D Ich schrieb nix von einem Listener. Ich meinte: Du kannst Dir die Buttons rauswühlen und dann doClick() rufen... Und das ist zumindest ein Weg, zu erreichen was Du möchtest. Siehe API-Doc:
public void AbstractButton.doClick() hat gesagt.:
Programmatically perform a "click". This does the same thing as if the user had pressed and released the button.
Ebenius
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben