Wie erzeugt man zwei identische JPanel

g-a-s-t

Aktives Mitglied
Hallo zusammen,

ich versuche zwei JPanels (Komponenten sind JTables und JButtons) nach diversen Aktionen den gleichen Inhalt zu zuweisen, d.h. die JPanels sollen beide identisch sein.
Dafür habe ich zwei Varianten probiert.
1. Ich erzeuge beide JPanel (mit der selben Funktion) jeweils einzeln. Beide sehen nun natürlich gleich aus. Doch erhält die im Panel integrierte Tabelle einen Wert, so wird dieser Wert nur in einem Panel (und somit in der JTable) sichtbar.
(Grund dafür sind sicherlich die zwei JPanel-Instanzen. oder?)
2. Ich erzeuge das JPanel mit all seinen Komponenten nur einmal und weise es anschließend dem zweiten JPanel zu. Sodass ich doch theoretisch zwei identische JPanels haben sollte?
Doch hier wird leider nur ein JPanel angezeigt, das zweite wird nicht gezeichnet.

Was gibt es da noch so für Möglichkeiten / Lösungen? Wo liegt der Fehler?

Ich bin über jeden Hinweis dankbar!!
 
Ich würde sagen: Variante 1. Dann hast du aber 2 JPanel-Objekte und musst dann auch bei beiden die Daten bzw. die Tabelle aktualisieren. Wozu brauchst du denn 2 identische JPanel? Sind die immer komplett identisch, oder nur zu Beginn und später unterscheidet sich der Inhalt?
 
Eine Component kann immer nur EINmal vorhanden sein (was sollte "getParent" sonst liefern?). Wenn da eine Tabelle drin ist, klingt das so komplex, dass du dir überlegen solltest, ob du das nicht anders modellieren kannst. Aber eine Möglichkeit, das zu Lösen, wäre, dass die beiden Tables (in den beiden Panels) dasselbe TableModel haben. (Das geht!). Das müßte dann übergeben werden, so wie
Code:
JPanel createPanelWithTableThatContainsThisModel(TableModel tableModel)
{
    ...

    JTable table = new JTable(tableModel);
    ...
 
Diese 2 JPanel befinden sich an zwei unterschiedlichen Stellen. Das Erste ist etwas verkleinert im eigentlichen Programm zu sehen, das Zweite ist größer und erscheint nach einer Benutzereingabe in einem separaten JFrame. Es ist dem Benutzer überlassen welche Variante er bevorzugt, dennoch sollten beide (auch gleichzeitig) sichtbar sein.

eine der Tabellen hat folgenden Aufbau:
Java:
	tableLines = new JTable(rows, columnNames);
	tableLines.getTableHeader().setReorderingAllowed(false);
	tableLines.setDragEnabled(true);
	tableLines.setTransferHandler(new LineTableTransferHandler());
		
	tableLines.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	ListSelectionModel rowSL = tableLines.getSelectionModel();
	rowSL.addListSelectionListener(new ListSelectionListener() {
		public void valueChanged(ListSelectionEvent e) {
			selectList(1, tableLines);
		}
	});
			
	tabs.addTab("L", new JScrollPane(tableLines));
 
Zuletzt bearbeitet:
Ja, wie gesagt, wenn das komplexere Components sind (und das sind sie offenbar) kann das ein bißchen Frickelig werden. Man muss halt zusehen, dass gemeinsame Datenmodelle auch wirklich nur EINmal existieren. In diesem Fall: Die Rows und ColumnHeaders vorher in ein DefaultTableModel packen, und das DefaultTableModel an diese Funktion übergeben (so dass dasSELBE Modell in beiden Tables verwendet wird)
 

Neue Themen


Zurück
Oben