Hilfe zu JTable und JTabbedPane

Bonsai

Bekanntes Mitglied
Hallo liebe Community,

ich hätte da mal ein Problem, aber als erstes mal der Code
Java:
public static void main(String[] args){
		JFrame jcoatframe = new JFrame("Bsp");
		JTabbedPane jcoattabbed = new JTabbedPane();
		JTable jcoattable;
		String spalte[] = {"", "#", "Description", "Resource", "Line", "Number", "Package"};
		DefaultTableModel table = new DefaultTableModel(spalte,999);
		
		jcoatframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jcoatframe.setSize(600, 400);
		jcoattable = new JTable(table);
		jcoattabbed.addTab("Results", jcoattable);
		jcoattabbed.add(new JScrollPane(jcoattable));
		jcoattabbed.addTab("UPOP", new JTextArea(""));

		jcoattabbed.setVisible(true);
		jcoatframe.add(jcoattabbed);
		jcoatframe.setVisible(true);
		
		
	}

Und zwar wenn ich dass dann laufen lasse erscheint alles wie gewollt, allerdings ist, nachdem ich die tabelle dem Tab "Results" hinzugefügt hatte, der Name des Tabs verschwunden und es war nur noch ein namenloser Tab. wisst ihr woran das liegt?
Außerdem würde ich auch gern die Zeilenanzahl der Tabelle, die bei mir im Moment 999 ist variable machen. weiß aber nicht wie ich das machen kann...
Als letzte frage würde ich gern noch wissen, wie ich die spaltenbreite der tabelle anpassen kann, dass zum beispiel die spalte "#" weniger platz einnimmt als die spalte "description"

Bonsai
 
Java:
        jcoattabbed.addTab("Results", new JScrollPane(jcoattable));
        //jcoattabbed.add(new JScrollPane(jcoattable));
 
Zuletzt bearbeitet:
wenn ich die Lösche zeigt er mir nur nen ausschnitt aus der Tabelle an und ich seh dann den Tabellenkopf nich mehr. Was aus der Ursache resultiert das ich 999 Zeilen hab 🙂. Was sollte das löschen der Zeile bringen?(is eine ernst gemeinte frage, ne dass das jetzt irgendwie ironisch rüberkommt)
 
Und zwar wenn ich dass dann laufen lasse erscheint alles wie gewollt, allerdings ist, nachdem ich die tabelle dem Tab "Results" hinzugefügt hatte, der Name des Tabs verschwunden und es war nur noch ein namenloser Tab.

Ja weil du die Tabelle 2 mal benutzt und hinzufügst, das geht nicht...
Java:
jcoattabbed.addTab("Results", jcoattable);
jcoattabbed.add(new JScrollPane(jcoattable));

Spaltenbreite ändern mit
Java:
TableColumn column = jTable.getColumnModel().getColumn(index); 
column.setPreferredWidth(10);

Edit:
Vielleicht solltest du erstmal dass hier durchlesen, meistens benutzt man als content eines tabbed pane ein JPanel
How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 
Zuletzt bearbeitet von einem Moderator:
wenn ich die zeile mit JScrollPanel weglasse ist dann allerdings der Tabellenkopf komplett verschwunden. hab das auch mit nur einer zeile in der tabelle probiert. es wird kein kopf mehr angezeigt
 
hier nun die richtige Kombination..

Java:
jcoattabbed.addTab("Results", new JScrollPane(jcoattable));


jcoattabbed.setVisible(true);
ist übrigens überflüssig wie alle setVisible(true) am Anfang bis auf den JFrame-Aufruf

----

> Was sollte das löschen der Zeile bringen?
jede Zeile kann etwas kaputt machen, lieber weglassen und andersrum nur überlegen, sinnvolle Zeilen aufzunehmen
 
Zuletzt bearbeitet von einem Moderator:
danke an euch, die ersten beiden problem wären damit ja gelöst.
wär echt noch klasse wenn mir jemand bei der variablen länge der tabelle helfen könnte.
 
was gibt es da zu sagen?
vor Anlegen der GUI kannst du die Zahl 999 beliebig ändern, wovon das auch immer abhängig sein soll,

zur Laufzeit hast du das DefaultTableModel, da gibt es genug Methoden zur Modifikation,
das wirkt sich dann auch mehr oder weniger problemlos auf die GUI aus
 
DefaultTableModel hat folgenden Konstruktor
Java:
DefaultTableModel(Vector data, Vector columnNames)
Damit werden so viele Zeilen (und Spalten) aufgenommen, wie es in den Vektoren gibt.
 
naja in die Tabelle sollen immer eine beliebige anzahl an werte eingepflegt werden. und wenn es jetzt beispielsweise zufälligerweise mal 1000 wären, würde sich JTable automatisch eine neue Zeile nehmen, oder wird dann die letzte Zeile einfach nicht mehr angezeigt? Denn ich hätte gern, dass wenn mal blos 3 Einträge rein kommen, nicht die restlichen 996 Zeilen sinnloser weise mit angezeigt werden
 
DefaultTableModel hat folgenden Konstruktor
Java:
DefaultTableModel(Vector data, Vector columnNames)
Damit werden so viele Zeilen (und Spalten) aufgenommen, wie es in den Vektoren gibt.

Danke für die Antwort, aber würde dies gern auf die Tabellenreihen beziehen wollen. Hoffe da is kein Missverständnis bei rausgekommen. Mit Zeilen meinte ich die Tabellenreihen
 
Danke für die Antwort, aber würde dies gern auf die Tabellenreihen beziehen wollen. Hoffe da is kein Missverständnis bei rausgekommen. Mit Zeilen meinte ich die Tabellenreihen

Schau dir doch mal die FAQ zu Tabellen hier im Forum an die JTable ist nicht immer so einfach.
Wie alle bereits beschrieben haben in deinem TableModel gibts es einige Methoden zum adden und removen für Zeilen
 
> Denn ich hätte gern, dass wenn mal blos 3 Einträge rein kommen, nicht die restlichen 996 Zeilen sinnloser weise mit angezeigt werden

niemand weiß wie bei dir Zeilen reinkommen oder nicht, du kannst am Anfang auch 3 setzen,
du kannst später bei einem Button-Klick, der 3 Ergebnisse erbringt, die Tabelle genau auf 3 Einträge setzen,
alles ist machbar, du musst es nur tun

so allgemein besprochen kann man dazu aber keine Hilfe geben, rufe die richtigen Befehle auf,
wie sieht denn deine Methode aus die 3 Ergebnisse schafft, was passiert dort bisher im Detail?
 
ja ok werd ich mal machen, bei mir ging bloß vorhin die suchfunktion ne, da hätt ich vllt auch so ein paar fragen lösen können 🙂
 
Zum Erzeugen mit dynamischen Dingen vielleicht hilft dies?

Nur ein Schnellschuss!

Java:
	public static void main(String[] args) {

		JFrame jcoatframe = new JFrame("Bsp");
		JTabbedPane jcoattabbed = new JTabbedPane();
		JTable jcoattable;
		Vector<String> columns = new Vector<>();
		columns.add("");
		columns.add("#");
		columns.add("Description");
		columns.add("Resource");
		columns.add("Line");
		columns.add("Number");
		columns.add("Package");
		Vector<Vector<String>> rows = new Vector<>();
		for (int i = 0; i < 2000; i++) {
			Vector<String> aRow = new Vector<>();
			aRow.add("Row: "+i);
			rows.add(aRow);
		}
		DefaultTableModel table = new DefaultTableModel(rows, columns);

		jcoatframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jcoatframe.setSize(600, 400);
		jcoattable = new JTable(table);
		jcoattabbed.addTab("Results", new JScrollPane(jcoattable));
		// jcoattabbed.add(new JScrollPane(jcoattable));
		jcoattabbed.addTab("UPOP", new JTextArea(""));

		jcoattabbed.setVisible(true);
		jcoatframe.add(jcoattabbed);
		jcoatframe.setVisible(true);

	}
 
Danke an alle. soweit hab ich die probleme alle mit eurer Hilfe gelöst. Nun hätte ich für das weitere Programmieren ne frage.

Und zwar habe ich, um Einträge in die Tabelle zu tätigen, ein object array angelegt. Nun zu meiner Frage. Ich versuche jetzt schon recht lange mich dran, in der Tabelle ein Icon mir anzeigen zu lassen. Bekomme dies aber irgendwie überhaupt nicht hin. Kann mir da wer helfen?
 
'jtable icon' in eine Suchmaschine eingetippt liefert endlose Links,
seitenweise Erklärungen, Beispiele, Abbildungen, etwa
JTable

wie soll man das hier besser erklären? 😉
 

Zurück
Oben