Swing Jtable über ganzes JPanel

Letavino

Aktives Mitglied
Hallo,
ich bin dabei ein Programm zu schreiben, welches folgenden Aufbau hat:

In einem JFrame habe ich eine JSplitPane.
Rechts dieser JSplitPane ist ein JPanel mit einem JTree.
Links ein JPanel mit einer JTable.
(Beide mit ScrollPane.)

Nun scheint aber sowohl der JTree, als auch die JTable eine feste Größe zu haben und liegen inmitten des eigenen JPanels.

Wie kann ich sowohl den JTree, als auch die JTable über das ganze eigene JPanel erstrecken lassen?
Ich hoffe, ihr versteht, was ich meine.

Ich wüsste gerade nicht, welcher Teil des Quellcodes hierfür relevant wäre, also falls da etwas fehlt um eine Aussage zu treffen, sagt einfach bescheid.

Noch eine kleine Frage:
Ich dimensioniere das JFrame mit
Java:
setSize(Toolkit.getDefaultToolkit().getScreenSize());
Aber es ist damit ja nicht maximiert (Was man oben rechts mit dem Viereck erreichen würde).
Wie könnte man das denn realisieren?

Lg, Florian
 
den Frame ansich, setzt du mit folgender Methode auf die Max. Größe, sofern deine Klasse von JFrame erbt..ansonsten die Variable des JFrames davor.

Java:
setExtendedState(JFrame.MAXIMIZED_BOTH);

deine Größen für den JTree und auch das JTable sind abhängig von deinem verwendeten Layout-Managern.
 
Danke! Die Vollansicht funktioniert nun soweit.

deine Größen für den JTree und auch das JTable sind abhängig von deinem verwendeten Layout-Managern.

Mit welchem Layout-Manager ließe sich das am besten lösen? Gibt es da Unterschiede?
Es ist ja nur ein Objekt im Panel, dafür ist das Panel aber durch die SplitPane von der Größe her variabel. Macht das etwas aus?
 
das lässt sich imho mit fast jedem Layout-Manager machen, warum das bei dir nicht funktioniert...ist (zumindest für mich) raten im Dunklen!

Ein kleines Bsp-Programm und das Table wird auf dem gesamten Frame angezeigt, zumindest in der Breite.

Zeig am besten in einem KSKB was du hast, was du gerne hättest...und dir wird sicherlich geholfen!

Java:
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTree;


public class TestPanelKlasse {

	public TestPanelKlasse() {
		JFrame frame = new JFrame();
		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		JTree tree = new JTree();
		String[] columnNames = { "First Name", "Last Name", "Sport",
				"# of Years", "Vegetarian" };
		Object[][] data = {
				{ "Kathy", "Smith", "Snowboarding", new Integer(5),
						new Boolean(false) },
				{ "John", "Doe", "Rowing", new Integer(3), new Boolean(true) },
				{ "Sue", "Black", "Knitting", new Integer(2),
						new Boolean(false) },
				{ "Jane", "White", "Speed reading", new Integer(20),
						new Boolean(true) },
				{ "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };

		JTable table = new JTable(data, columnNames);

		JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				tree, table);

		frame.add(splitPane);

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		new TestPanelKlasse();
	}
}
 
Die Tabelle soll die ganze sichtbare rechte Seite einnehmen und nicht nur dieses kleine Feld in der Mitte.

So in etwa sieht meine Grundstruktur aus:
(Vielleicht liegt ja dort schon irgendwo der Fehler.)

Java:
import javax.swing.*;

class GUI extends JFrame{
	
	static JPanel tabelle;
	private static JTable jtable; 

	public GUI()
	{
		super("Lizenz Verwaltung");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		splitpane.setRightComponent(tabelle);
		this.add(splitpane);
		
		setExtendedState(JFrame.MAXIMIZED_BOTH);
		setVisible(true);		
	}	
	public static void main(String[] args)
	{
		tabelle = new JPanel();

		String[] titel = {"A","B","C"};
		String[][] daten = {{"a1","a2","a3","a4"},{"b1","b2","b3","b4"},{"c1","c2","c3","c4"}};
	
		jtable = new JTable(daten,titel);
		tabelle.add(new JScrollPane(jtable));
	
		new GUI();
	}
}

€:
Ich sehe bei dir gerade, dass es scheinbar garnicht nötig ist, ein Panel anzulegen, worauf man die Tabelle übergibt.
Ich werde dies mal im richtigen Programm abändern, denn damit wäre das Problem ja eigentlich schon umgangen. 🙂
 
Zuletzt bearbeitet:
wenn du nur die Tabelle groß haben willst, dann nutze bspw das GridLayout()

Java:
tabelle = new JPanel(new java.awt.GridLayout());
 
Indem ich die Panels umgehe und die Tabelle direkt an die SplitPane übergebe stellt sich das Problem jetzt nicht mehr.
So funktioniert nun alles, wie es soll.
Dein Beispiel hat mir wirklich sehr geholfen!
Vielen Dank 🙂
 

Neue Themen


Zurück
Oben