Swing alle Frames nutzen das gleiche Model

Status
Nicht offen für weitere Antworten.

razz85

Mitglied
Hallo!
Ich habe folgendes Problem und ich weiß ehrlich gesagt nicht so recht, wie ich das lösen kann.

Ich klicke doppelt in eine Zeile einer Tabelle
Java:
tCategory.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent pE) {
				if (pE.getClickCount() == 2 && pE.getModifiers() == MouseEvent.BUTTON1_MASK) {
					String selectedCategory = tCategory.getValueAt(tCategory.getSelectedRow(), 0).toString();
					new CatFrame("Inhalt der Fehlerkategorie " + selectedCategory , selectedCategory).show();
				}
			}
});

Der Listener der Tabelle ruft ein neues Frame (CatFrame) auf

Java:
public class CatFrame extends JFrame {
	/** Der Name der Queue, deren NAchrichten angezeigt werden sollen */
	private String catName;

	/** ScrollPane fuer die Nachrichten */
	private JScrollPane sTabelle;
	/** JTable fuer die Nachrichten */
	private JTable tNachrichten;

	/** TableSorter zum sortieren der Spalten */
	private TableSorter sorter;
	/** TableModel zur Anzeige der Nachrichten */
	private CatModel model;

	/** Menubar */
	[...]ELEMENTE WERDEN angelegt [...]
	
	
	/**Statusbar*/
	private static JLabel statusBar = new JLabel();
	
	/** Vector um die IDs der vom Anwender selektierten Prozesskontexte zu speichern*/
	private int[] selectedPCs;
	/** Variable dient zur Uebergabe einer einzlenen PCID*/
	private int singlePcID;
	/** Variable dient zur Uebergabe des Status eines PCs*/
	private String pStatus;
	

	/**
	 * Konstruktor erzeugt eine neue Instanz der Klasse
	 * @param pTitle der Titel, der im Kopf angezeigt werden soll.
	 * @param pCatName der Name der Queue, deren Nachrichten angezeigt werden sollen.
	 */
	public CatFrame(String pTitle, String pCatName) {
		super(pTitle + " Host: " + PCToolUtil.getHostName());
		this.catName = pCatName;
		System.out.println("Name der fk: " + pCatName);
		initialize();
		aktualisieren();
		Refresh.refreshCatFrame(pCatName);
        pack();
        
        try {
            PCToolUtil.restoreFrameDimension(this); 
        } catch (Exception _e) {
            System.out.println("Fehler bei Initialisierung: " + _e);
        }
	}

	/**
	 * Baut die MenuBar ded Dialogs auf
	 * @return die MenuBar des Dialogs
	 */
	public JMenuBar buildMenuBar() {
		[...]MENÜBAR wird gebaut[...]
	}

	/**
	 * Initialisiert die Oberflaechenelemente des Dialogs
	 *
	 */
	private void initialize() {
        
        setName("CatFrame");
		addWindowListener(new WindowAdapter() {
			public void windowOpened(WindowEvent pE) {
				System.out.println("LADE EINSTELLUNGEN");
			}
		});
		setJMenuBar(buildMenuBar());
		getContentPane().setLayout(new BorderLayout());

		tNachrichten = new JTable() {
			public Component prepareRenderer(TableCellRenderer pRenderer, int pRowIndex, int pColIndex) {
				Component _c = super.prepareRenderer(pRenderer, pRowIndex, pColIndex);
                if (pColIndex < 10) {
    				if (pRowIndex % 2 == 0 && !isCellSelected(pRowIndex, pColIndex)) {
    					_c.setBackground(Color.getHSBColor(82, 22, 255));
    				} else {
    					if (!isCellSelected(pRowIndex, pColIndex)) {
    						_c.setBackground(getBackground());
    					}
    				}
                }
				return _c;
			}
		};
		tNachrichten.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent pE) {
				if (pE.getClickCount() == 2 && pE.getModifiers() == MouseEvent.BUTTON1_MASK) {
					int selectedPC = Integer.parseInt(tNachrichten.getValueAt(tNachrichten.getSelectedRow(), 0).toString());
					new PCFrame("Prozesskontext " + selectedPC, selectedPC).show();
				}
			}
		});
		tNachrichten.setName("NachrichtenTable");
		tNachrichten.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		tNachrichten.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        
		this.model = new CatModel();
		this.sorter = new TableSorter(this.model);
		tNachrichten.setModel(this.sorter);
		this.sorter.setTableHeader(tNachrichten.getTableHeader());

		sTabelle = new JScrollPane(tNachrichten, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		statusBar.setText("STATUSBAR");
		getContentPane().add(statusBar, BorderLayout.SOUTH);
		getContentPane().add(sTabelle, BorderLayout.CENTER);
	}

In diesem CatFrame wird folgendes Model benutzt.

Java:
public class CatModel extends AbstractTableModel {
    
	/** Spaltennamen */
	public static final String[] COLUMN_NAMES =
		{
			"ID",
			"Status",
			"Prioritaet",
			};

	/** Klassen der einzelnen Spalten */
	public static final Class[] COLUMN_CLASS =
		{
		String.class,
		String.class,
		String.class,
		};
	
	/** Uebergabe des Vectors mit den Datensaetzen (Fehlerkat. und Anzahl)*/
	private static Object[][] uebergabePcDerFK;

	/** Die NAchrichten, die angezeigt werden sollen*/
	private TONachrichten toNachrichten;

	/**
	 * Konstruktor erzeugt einen neue Instanz der Klasse
	 * @param pToNachrichten Liste mit Nachrichten, die angezeigt werden sollen
	 */
	public CatModel() {
		super();
	}

	/** 
	 * @see javax.swing.table.TableModel#getColumnName(int)
	 */
	public String getColumnName(int pCol) {
		return COLUMN_NAMES[pCol];
	}

	/** 
	 * @see javax.swing.table.TableModel#isCellEditable(int, int)
	 */
	public boolean isCellEditable(int pRow, int pCol) {
        return false;
	}


	/** 
	 * @see javax.swing.table.TableModel#getColumnCount()
	 */
	public int getColumnCount() {
		return COLUMN_NAMES.length;
	}

	/** 
	 * @see javax.swing.table.TableModel#getRowCount()
	 */
	public int getRowCount() {
		return this.uebergabePcDerFK.length;
	}

	/** 
	 * @see javax.swing.table.TableModel#getColumnClass(int)
	 */
	public Class getColumnClass(int pColumn) {
		return COLUMN_CLASS[pColumn];
	}
	
	/** 
	 * @see javax.swing.table.TableModel#getValueAt(int, int)
	 */
	public Object getValueAt(int pRow, int pCol) {
		Object _obj = null;
		_obj = this.uebergabePcDerFK[pRow][pCol];
		return _obj;
	}
	
	/**
	 * Erhaelt die Daten aus der Datenbank und packt sie vom Vector in ein Array
	 * @param anzahlFK
	 */
	public static void getData(Vector pcDerFehlerkat){
		
		uebergabePcDerFK = new Object[pcDerFehlerkat.size()/14][pcDerFehlerkat.size()+1];
		int vectorZaehler = 0;
		for (int i = 0; i<(pcDerFehlerkat.size()/14);i++){
			for (int j = 0; j<14; j++){	
				uebergabePcDerFK[i][j] = pcDerFehlerkat.get(vectorZaehler);
				vectorZaehler++;
			}
		}
		
	}
}

Wenn man nun das CatFrame geöffnet lässt und über die erste Tabelle ein weiters CatFrame öffnen will, übernimmt das erste CatFrame die Daten die im zweiten geöffneten CatFrame stehen. Das heißt es sind 2 CatFrames mit dem gleichen Inhalt geöffnet. :(

Meine Vermutung ist die, dass beide auf die gleich Instanz des Models zugreifen bzw. das erste Model gekillt überschrieben wird.

Wäre schön wenn mir wer helfen könnte :oops:

Rückfragen können natürlich gerne gestellt werden ;)

Viele Grüße und besten Dank im Vorraus
Daniel
 
S

SlaterB

Gast
static bedeutet, dass etwas nur einmal existiert,
die Daten im Model sind static, daher deine Vermutung,

static entfernen würde die Models voneinander lösen,
dann hast du aber vielleicht das Problem, dass bis auf ein Model alle anderen leer sind und du die Daten manuell von einem Model an andere übergeben musst, sofern notwendig
 

razz85

Mitglied
genau den gedanken hatte ich auch. die lösung ist mir nun auch eingefallen.
da bei mir daten über eine klasse aus der datenbank geholt werden und von da aus dann an das model übergeben werden, hatte ich jetzt die idee vom Frame aus, der Klasse die die Daten holt, das model mitzugeben, um der klasse zu sagen welches model betroffen ist...klappt soweit auch ganz gut :applaus:

vielen dank :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
_user_q JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11
Davee JavaFX JavaFX Jar ausführbar jedoch nicht alle Stages AWT, Swing, JavaFX & SWT 3
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
D JavaFX Alle Knöpfe auf die gleiche Größe AWT, Swing, JavaFX & SWT 14
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
X Swing setContentPane verdeckt mir alle Buttons Labels etc... AWT, Swing, JavaFX & SWT 14
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
Bluedaishi JTable alle Zeilen löschen AWT, Swing, JavaFX & SWT 7
J CellEditorListener wird für ALLE Zellen ausgeführt AWT, Swing, JavaFX & SWT 2
T Alle Swing-Elemente anzeigen AWT, Swing, JavaFX & SWT 9
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
C Swing JTattoo - Look and Feel für ALLE User AWT, Swing, JavaFX & SWT 5
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
O JFrame: Daten alle paar Sekunden aktualisieren AWT, Swing, JavaFX & SWT 3
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
AyKay SWT (alle) Listener bzw. ModifyEventListener entfernen AWT, Swing, JavaFX & SWT 2
D Funktion JList.getSelectedValues() gibt nicht alle values zurück AWT, Swing, JavaFX & SWT 2
E Swing TableCellRenderer für alle Splaten setzen?! AWT, Swing, JavaFX & SWT 3
V Alle offenen jDialoge schliessen AWT, Swing, JavaFX & SWT 3
M Alle Frame Methoden AWT, Swing, JavaFX & SWT 2
L 3D-Grafik Java3D - Alle SceneGraphObjects geordnet erhalten AWT, Swing, JavaFX & SWT 2
F Nicht alle Bilder werden angezeigt AWT, Swing, JavaFX & SWT 2
Iron Monkey Alle Anwendungen werden miniert AWT, Swing, JavaFX & SWT 2
D ALLE exceptions in Log fenster anzeigen AWT, Swing, JavaFX & SWT 17
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
J alle Ordner in einem Ordner anzeigen(Jlist) AWT, Swing, JavaFX & SWT 44
M Swing Dankeschön an alle AWT, Swing, JavaFX & SWT 8
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
kodela alle Buttons einer ToggleButtonGroup deselektieren AWT, Swing, JavaFX & SWT 2
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
J Swing Monospace-Schrift für alle Systeme AWT, Swing, JavaFX & SWT 3
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
J Swing Eine(und zwar ein und die selbe) WindowListener Instanz für alle JFrames AWT, Swing, JavaFX & SWT 8
J Swing Alle JFrames AWT, Swing, JavaFX & SWT 18
aze JTextfield nur so breit dass alle zeichen sichtbar sind AWT, Swing, JavaFX & SWT 2
André Uhres Swing Alle Komponenten eines JPanel aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 4
E Im Frame alle Componenten abrufen AWT, Swing, JavaFX & SWT 2
K Alle Events abfangen mit GlassPane AWT, Swing, JavaFX & SWT 7
T JTree - alle Nodes entfernen AWT, Swing, JavaFX & SWT 8
D JCheckBoxItem in Untermenüs alle gleichzeitig an- bzw. aus AWT, Swing, JavaFX & SWT 3
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
G Alle Werte einer Spalte in JTable zusammenrechnen AWT, Swing, JavaFX & SWT 2
G Alle Komponenten eines JPanels durchlaufen AWT, Swing, JavaFX & SWT 11
T Alle Folgefenster sollen im Hauptfenster geöffnet werden AWT, Swing, JavaFX & SWT 3
P Alle Komponenten von JPanel in der Mitte entfernen AWT, Swing, JavaFX & SWT 2
G Eine Schiftart für alle Komponenten festlegen AWT, Swing, JavaFX & SWT 6
G WindowListener für alle Fenster AWT, Swing, JavaFX & SWT 4
H <Synth> Alle die sich auskennen Bitte hier rein schaue AWT, Swing, JavaFX & SWT 2
Paule alle Elemente eines SWT Trees AWT, Swing, JavaFX & SWT 8
H JFileChooser für alle Dateien und Directories unterhalb AWT, Swing, JavaFX & SWT 7
C Beim Schließen eines fensters, schließen sich alle AWT, Swing, JavaFX & SWT 5
G Nicht alle Komponenten werden angezeigt AWT, Swing, JavaFX & SWT 8
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
0 JList alle 20 Sekunden aktualisieren? AWT, Swing, JavaFX & SWT 8
K Graphics-Objekt zeichnet nicht alle Bilder AWT, Swing, JavaFX & SWT 3
M Listener für alle inneren Elemente gültig machen? AWT, Swing, JavaFX & SWT 5
M JList zeigt nicht alle Elemente AWT, Swing, JavaFX & SWT 4
B Alle URLs aller offenen Browser. AWT, Swing, JavaFX & SWT 12
N Alle Pixel-Koordinaten von z.B. g.drawLine(.) speichern AWT, Swing, JavaFX & SWT 7
L Alle Inhalte in BorderLayout.CENTER löschen? AWT, Swing, JavaFX & SWT 2
N Alle Komponenten eines JPanel aktivieren/deaktivieren? AWT, Swing, JavaFX & SWT 5
J [SWT] alle Zellen in einem Tree einzeln selektieren AWT, Swing, JavaFX & SWT 2
T JTree alle nodes expanden AWT, Swing, JavaFX & SWT 4
M Hauptfenster und alle Kinder schließen? AWT, Swing, JavaFX & SWT 7
T Alle Kinder eines JTree bekommen AWT, Swing, JavaFX & SWT 11
G Double-Click f. alle Komps UNIX u. WIN verschieden ? AWT, Swing, JavaFX & SWT 5
P TableCellRender für ALLE Spalten AWT, Swing, JavaFX & SWT 10
G Alle Elemente eines JPanel herausfinden? AWT, Swing, JavaFX & SWT 3
Luma Alle Fenster verstecken und wieder sichtbar machen? AWT, Swing, JavaFX & SWT 6
D Alle Inhalte einer JTextArea in einem JScrollPane löschen AWT, Swing, JavaFX & SWT 2
P JTree: Alle Knoten geöffnet anzeigen AWT, Swing, JavaFX & SWT 2
P JTree: alle Elemente ausklappen AWT, Swing, JavaFX & SWT 3
bernd JTree: alle Laufwerke anzeigen AWT, Swing, JavaFX & SWT 3
B Alle jMenu und JMenuItem in einem Array AWT, Swing, JavaFX & SWT 4
R removeAll() beseitigt nicht alle Komponenten!? AWT, Swing, JavaFX & SWT 11
M JTabbedPane zeigt alle Panels übereinander an :( AWT, Swing, JavaFX & SWT 8
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
H Kombination von zwei Frames AWT, Swing, JavaFX & SWT 16
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
M LayoutManager Im Haupframe veränderbare Frames AWT, Swing, JavaFX & SWT 4
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
A Swing Frames richtig erstellen AWT, Swing, JavaFX & SWT 3
OnDemand Inhalt des Frames ändern AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
C 2 Frames, eins nicht editierbar AWT, Swing, JavaFX & SWT 2
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
M Anzahl Frames in Taskleiste AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben