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
Der Listener der Tabelle ruft ein neues Frame (CatFrame) auf
In diesem CatFrame wird folgendes Model benutzt.
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
Rückfragen können natürlich gerne gestellt werden
Viele Grüße und besten Dank im Vorraus
Daniel
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
Rückfragen können natürlich gerne gestellt werden
Viele Grüße und besten Dank im Vorraus
Daniel