JSplitpane .

Status
Nicht offen für weitere Antworten.

Outlaw

Mitglied
Hallöle,

hab ne JSplitPane angelegt, vertikal geteilt -> links und rechts jeweils JScrollPane mit JTable eingefügt.
Funktioniert grundsätzlich. Das Problem ist, dass die linke Tabelle nicht bündig am linken Rand des Hauptfensters anfängt, sondern leicht versetzt.
Finde beim besten Willen nicht den Grund ...

Grüße

Outlaw
 
Hallöle,

semi hat gesagt.:
Zeig mal Code. (vielleicht irgendein Border?)

Code:
import javax.swing.*;
import java.awt.*;

class FMSJava extends JFrame
{
	static JFrame Hauptfenster;
	JPanel window;								// Das ist der Container, der alles wichtige enthält
	JMenuBar Menuzeile;							// Wird die Menuzeile, die in window erzeugt wird
	JSplitPane Dateifenster;						// Ein gesplitteter Container, der Dateien später darstellt
	JTextField Commandozeile;						// und unten dann die obligatorische Kommandozeile
	JScrollPane linkesFenster;
	JScrollPane rechtesFenster;
	JTable Dateiinforechtesfenster;
	JTable Dateiinfolinkesfenster;
	FMSEintrag DateiEintrag_links;
	FMSEintrag DateiEintrag_rechts;
	
	
	public void createMenubar()
	{
		Menuzeile = new JMenuBar();
		JMenu leftwindow = new JMenu ("Left");
		Menuzeile.add(leftwindow);
		window.add(Menuzeile);						// und nun das Element dem Container hinzufügen
	}
	
	
	public void createDateifenster()
	{
		Dateifenster = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		Dateifenster.setPreferredSize(new Dimension(640,460));
		
		DateiEintrag_links = new FMSEintrag();				// FMSEintrag ist eine das Interface TableModel ausfüllende Klasse zur Definition der Tabelleneinträge
		DateiEintrag_rechts = new FMSEintrag();
		
		// Das linke Fenster ..
		Dateiinfolinkesfenster = new JTable(DateiEintrag_links);	// Die Tabelle mit Verzeichnis-infos fürs linke Fenster
		Dateiinfolinkesfenster.setGridColor(new Color(0xFFF600));
		Dateiinfolinkesfenster.setForeground(new Color(0xFFF600));
		Dateiinfolinkesfenster.setBackground(new Color(0x415EA8));
		Dateiinfolinkesfenster.setFont(new Font("Arial",Font.PLAIN,14));
		Dateiinfolinkesfenster.setShowVerticalLines(true);
		Dateiinfolinkesfenster.setShowHorizontalLines(false);
		
		linkesFenster = new JScrollPane(Dateiinfolinkesfenster, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		linkesFenster.setPreferredSize(new Dimension(320,330));

		// Das rechte Fenster .. Eine Tabelle enthält Verzeichnisinfos, und falls sie zu groß ist, wird sie in ein Scrollpane gelegt
		Dateiinforechtesfenster = new JTable(DateiEintrag_rechts);
		rechtesFenster = new JScrollPane(Dateiinforechtesfenster, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		rechtesFenster.setPreferredSize(new Dimension(320,330));
		
		// Das SplitPane konfigurieren ...
		Dateifenster.setLeftComponent(linkesFenster);			// Die Splitpane hat 2 Teile - links/top die eine Componente, rechts/unten die andere
		Dateifenster.setRightComponent(rechtesFenster);
		Dateifenster.setDividerLocation(0.5);				// Ja, wo ist denn der Divider !
		Dateifenster.setResizeWeight(0.5);				// Wie wird der Platz verteilt, wenn sich das Fenster vergrößert .. welcher Teil des Splitpane bekommt was ..
		Dateifenster.setDividerSize(10);				// Größe des Trenners
		window.add(Dateifenster);
	}

	public void createCommando()
	{
		Commandozeile = new JTextField(1);
		window.add(Commandozeile);		
	}

	public FMSJava()							// Konstruktor
	{
		super("Filemanager");			// Hauptfenster-Bezeichnung

		window = new JPanel();					        // das wird der Hauptcontainer im JFrame
		BoxLayout Ausrichtung = new BoxLayout(window,BoxLayout.Y_AXIS); // alle Elemente werden vertikal geordnet
		window.setLayout(Ausrichtung);					// damit sagen wir es dem Container
		createMenubar();
		createDateifenster();
		createCommando();
		this.setContentPane(window);					// was wird im JFrame angezeigt -> der window-Container
		this.setPreferredSize(new Dimension(640,480));
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		// wenn Fenster geschlossen wird - Exit (standardmäßig implementiert)
		this.pack();
	}
	
	public static void main(String args[])
	{
		Hauptfenster = new FMSJava();					// so muss ein Swing-App initialisiert werden
	}
}

Hier mal nen screenshot:



Der rote Bereich ist der "Fehler".

Sorry, der Code ist übelst häßlich 😳 , bin gerade erst dabei, mich in JAVA einzufummeln :###



Grützi

Outlaw
www.yakuza.de.be
 
Mach mal

Hauptfenster.setJMenuBar(Menuzeile);
statt
window.add(Menuzeile);

-------------
Vielleicht eine Bemerkung zum Codestill
Schreibe Variablen bzw. Klassenattribute mit Kleinbuchstaben am Anfang.
Sie sind dann besser von Klassennamen zu unterscheiden.
 
Hallöle,

semi hat gesagt.:
Mach mal

Hauptfenster.setJMenuBar(Menuzeile);
statt
window.add(Menuzeile);

hm .. jetzt ist (was auch sehr schön ist 😀) der "Left"-Menüpunkt linksbündig, am Dateifenster hat sich nix geändert ...

Gruß

Outlaw
 
Hallöle,

so, habe jetzt mal den Umweg über JPanel window weggelassen und setze die Komponenten gleich in JFrame Hauptfenster ... jetzt ist das Dateifenster linksbündig.

Was mich aber wundert: jetzt kann ich nicht mehr die Commandozeile hinzufügen.

Reihenfolge: setJMenuBar , Hauptfenster.add(Dateifenster), Hauptfenster.add(Commandozeile)

Dann zeigt er Commandozeile nich. Wenn ich .add(Dateifenster) zuletzt nehme, zeigt er nur die "riesige" Commandozeile und das Dateifenster nicht ... kann ich bloß zwei Elemente in JFrame packen ? Muss ich den Umweg über JPanel gehen ?

Gruß

Outlaw
 
Ich kenn mich mitm BoxLayout net aus, aber mach mal Zeile 74 setLayout (new BorderLayout()) obs daran liegt.
 
Das ganze Layout ist bei Dir viel zu umständlich.
Mach' mal sowas dieser Art
Code:
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(new JScrollPane(table1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
splitPane.setRightComponent(new JScrollPane(table2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
this.getContentPane().add(splitPane, BorderLayout.CENTER);
this.getContentPane().add(textField, BorderLayout.SOUTH);
this.setJMenuBar(...);
...
 
Hallöle,

jo, ich mache das nochmal neu. Habe bloß alles mit expliziten Klassen gemacht, weil ich mir nicht sicher bin, auf welche ich später noch direkt zugreifen muss ...

Aber nochmal die Zwischenfrage: Muss ich zwingend dem JFrame nen anderen Container für JPanel hinzufügen, der Elemente aufnimmt, oder kann ich direkt mit JFrame über getContentPane arbeiten ?

Sehe das in tutorials immer ,dass die nen JPanel dem JFrame hinzufügen ..

Grützi

Outlaw

PS: der "Fehler" kommt immer, sobald ich BoxLayout etabliere ...
 
Brauchst Du nicht. ContentPane ist auch ein JPanel und ist leer mit BorderLayout initialisiert.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben