Swing JSplitPane Componenten ausrichten

Status
Nicht offen für weitere Antworten.

Tallan

Bekanntes Mitglied
Hallo zusammen,

ich habe einen einfachen JSplitPane in dem 2 JToolBar Componenten sind, eine links die andere Rechts, ich hätte nun gerne das die Rechte JToolBar eine feste Größe hat und am Rechten Rand plaziert ist, wohingegen die Linke JToolBar den restlichen Platz einnimmt.


--------------------------------------------------
| LinkeToolBar---------------------|Rechtetoolbar |
--------------------------------------------------

Leider ist es in der Praxis genau umgekehrt.
Die Linke ToolBar soll keine feste größe Haben
und der JFrame in dem sie sich befinden auch nicht (zumindest keine Maximale)
mein Code hierzu



Java:
		//LeftToolBar
		leftToolBar = new LeftToolBar();
			leftToolBar.setFloatable(false); 
		//RightToolBar
		rightToolBar = new RightToolBar();
			rightToolBar.setFloatable(false); 
			rightToolBar.setPreferredSize(new Dimension(100,0));

		//Splitpane für die Toolbars
		toolBarSP = new JSplitPane();
			toolBarSP.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
			toolBarSP.setDividerSize(0);
			toolBarSP.setLeftComponent(leftToolBar);
			toolBarSP.setRightComponent(rightToolBar);
			


		setLayout(new BorderLayout()); 
		getContentPane().add(toolBarSP, BorderLayout.NORTH);
 
Zuletzt bearbeitet:
Hm, klingt zumindest knifflig 🙂
Spontan kann ich mal drei Versuchsmöglichkeiten nennen:
Java:
// ...
rightToolBar.setMinimumSize( rightToolBar.getPreferredSize() );
rightToolBar.setAlignmentX( JToolbar.RIGHT_ALIGNMENT ); // kA ob das was bringt

// beim SplitPane:
toolBarSP.setDividerLocation( /*hier irgendwie die richtige Stelle berechnen*/  );

Aber: Gibt es einen Grund, dass du einen Splitter benutzt?
Code:
Mit DividerSize=0
kann man es doch sicher nicht hin und her schieben (oder irre ich hier?). Daher könnte ein normales
Code:
JPanel
auch seinen Dienst tun und hier wüsste ich eher, wie man eine Links-Rechts-Ausrichtung hinbekommt.
 
Hm, klingt zumindest knifflig 🙂
Spontan kann ich mal drei Versuchsmöglichkeiten nennen:
Java:
// ...
rightToolBar.setMinimumSize( rightToolBar.getPreferredSize() );
rightToolBar.setAlignmentX( JToolbar.RIGHT_ALIGNMENT ); // kA ob das was bringt

// beim SplitPane:
toolBarSP.setDividerLocation( /*hier irgendwie die richtige Stelle berechnen*/  );

Aber: Gibt es einen Grund, dass du einen Splitter benutzt?
Code:
Mit DividerSize=0
kann man es doch sicher nicht hin und her schieben (oder irre ich hier?). Daher könnte ein normales
Code:
JPanel
auch seinen Dienst tun und hier wüsste ich eher, wie man eine Links-Rechts-Ausrichtung hinbekommt.

die idee ist folgende ich habe 2 Toolbars, die Linke wird dynamisch während der Laufzeit gefüllt und die Rechte enthält eine fixe Anzahl Icons, ich möchte das die rechte Toolbar ganz recht am Rand sitzt und die Linke ganz links, so das die Icons dann dynamisch ergänzt werden können (auf der linken Seite) ohne das die Rechte seite betroffen ist


Also :

Toolbar1----------------|Toolbar2|
Icon1 Icon2-------------|1 2 3 4 |

Im nächsten Schritt z.B
Toolbar1----------------|Toolbar2|
Icon1 Icon2 Icon3-------|1 2 3 4 |

Das JSplitpanel benutze ich um die beiden Toolbars zu übergeben, wenn es da eine Alternative gibt die das gewünschte Ergebnis bringt würde das natürlich völlig ausreichen.
 
Ok, hier mal ein minimales Testprogramm. Für dich relevant ist wohl das
Code:
tbPanel
. Wenn es für dich reicht, dass die Toolbars fix in ihren Ecken hängen, geht das ganz gut. Allerdings wirkt es nicht mehr, wenn die Toolbars
Code:
floatable
sind.
Java:
public class TestFrame
{
	public static final void main(String[] args)
	{
		new JFrame("Test")
		{
			{
				JToolBar left = new JToolBar();
					left.add(new JButton("b1"));
					left.add(new JButton("b2"));
					left.setFloatable(false);
				
				JToolBar right = new JToolBar();
					right.add(new JButton("RECHTS"));
					right.setMinimumSize( right.getPreferredSize() );
					right.setMaximumSize( right.getPreferredSize() );
					right.setFloatable(false);
				
				JPanel tbPanel = new JPanel(new BorderLayout());
					tbPanel.add(left, BorderLayout.WEST);
					tbPanel.add(Box.createHorizontalGlue(), BorderLayout.CENTER);
					tbPanel.add(right, BorderLayout.EAST);
				
				
				this.add(tbPanel, BorderLayout.NORTH);
				this.add(new JLabel("Mitte"), BorderLayout.CENTER);
				
				this.setDefaultCloseOperation(EXIT_ON_CLOSE);
				this.setLocationRelativeTo(null);
				this.pack();
			}
		}.setVisible(true);
	} //void main(String[])
} //class
Hoffe es löst dein Problem.
 
Ok, hier mal ein minimales Testprogramm. Für dich relevant ist wohl das
Code:
tbPanel
. Wenn es für dich reicht, dass die Toolbars fix in ihren Ecken hängen, geht das ganz gut. Allerdings wirkt es nicht mehr, wenn die Toolbars
Code:
floatable
sind.
Java:
public class TestFrame
{
	public static final void main(String[] args)
	{
		new JFrame("Test")
		{
			{
				JToolBar left = new JToolBar();
					left.add(new JButton("b1"));
					left.add(new JButton("b2"));
					left.setFloatable(false);
				
				JToolBar right = new JToolBar();
					right.add(new JButton("RECHTS"));
					right.setMinimumSize( right.getPreferredSize() );
					right.setMaximumSize( right.getPreferredSize() );
					right.setFloatable(false);
				
				JPanel tbPanel = new JPanel(new BorderLayout());
					tbPanel.add(left, BorderLayout.WEST);
					tbPanel.add(Box.createHorizontalGlue(), BorderLayout.CENTER);
					tbPanel.add(right, BorderLayout.EAST);
				
				
				this.add(tbPanel, BorderLayout.NORTH);
				this.add(new JLabel("Mitte"), BorderLayout.CENTER);
				
				this.setDefaultCloseOperation(EXIT_ON_CLOSE);
				this.setLocationRelativeTo(null);
				this.pack();
			}
		}.setVisible(true);
	} //void main(String[])
} //class
Hoffe es löst dein Problem.


Ich konnte das Problem grade lösen, ich denke das ist dasselbe was du grade vorgeschlagen hast, daher vielen dank


Java:
			jp = new JPanel();
			jp.setLayout(new BorderLayout());
			jp.add(leftToolBar,BorderLayout.WEST);
			jp.add(rightToolBar,BorderLayout.EAST);
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben