Hallo zusammen.
Ich wollte folgendes tun: in der Klasse GUI erzeuge ich ein Array von Vektoren. Es müssen Vektoren sein und kein 2-dimensionales Array, da nicht feststeht, wie viele Werte da rein sollen. Dieses Array möchte ich jetzt an verschiedene Klassen übergeben und ihm einige Elemente hinzufügen/löschen, dieses neue Vektorfeld dann wieder in GUI ablegen. Dafür bietet sich ja eine Übergabe by reference an oder?
Ich habe mich ein bisschen schlau gemacht und erfahren, dass Objekte (also auch mein Array?) immer by reference übergeben werden. Deswegen habe ich folgendes geschrieben(Auszug):
Ich habe die Beispiele nur auf das nötigste zusammengeschrumpft, ich hoffe das ist trotzdem ausreichend. Wenn nicht, kann ich ja noch mehr posten.
Ich erhalte jetzt eine Fehlermeldung die da sagt: "Cannot refer to a non-final variable data inside an inner class defined in a different method".
Ich habe mal probiert, den Konstruktor von Dialog so zu ändern: Dialog(final JFrame f,final Vector[] data) und siehe da, es ging auf einmal. Aber jetzt habe ich Bedenken: final bewirkt doch eigentlich, dass eine Variable nicht mehr geändert werden kann. Aber genau das möchte ich doch :autsch: Und bezieht sich dieses nicht-ändern dann nur auf die Klasse Dialog oder auf alle Klassen? Ich hab final noch nie benutzt und bin mir deswegen sehr unsicher.
Gibt es vielleicht noch einen besseren Ansatz das Problem zu lösen?
Ich wollte folgendes tun: in der Klasse GUI erzeuge ich ein Array von Vektoren. Es müssen Vektoren sein und kein 2-dimensionales Array, da nicht feststeht, wie viele Werte da rein sollen. Dieses Array möchte ich jetzt an verschiedene Klassen übergeben und ihm einige Elemente hinzufügen/löschen, dieses neue Vektorfeld dann wieder in GUI ablegen. Dafür bietet sich ja eine Übergabe by reference an oder?
Ich habe mich ein bisschen schlau gemacht und erfahren, dass Objekte (also auch mein Array?) immer by reference übergeben werden. Deswegen habe ich folgendes geschrieben(Auszug):
Code:
public class Gui extends JFrame
{
Dialog dialog;
public Vector[] data = new Vector[4];
Gui(int width, int height)
{
dialog = new Dialog(this,data);
}
}
Code:
public class Dialog extends JDialog
{
Dialog(final JFrame f,Vector[] data)
{
super(f,"Add data record",true);
bAdd.setBounds(450,300,100,30);b
Add.setText("Add!");
bAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae1)
{
if( tfAuthor.getText().equals("") ||
tfTitle.getText().equals("") ||
cbSw1.getSelectedItem().toString().equals("") ||
cbSw2.getSelectedItem().toString().equals(""))
{
JOptionPane.showMessageDialog(
Dialog.this,
"Please fill in all the necessary information",
"Error",
JOptionPane.ERROR_MESSAGE);
}
else
{
//hier wird der Inhalt diverser ComboBoxes und TextFields hinzugefügt...
data[0].addElement(Dialog.this.cbSw1.getSelectedItem().toString());
data[1].addElement(Dialog.this.cbSw2.getSelectedItem().toString());
data[2].addElement(Dialog.this.tfAuthor.getText().toString());
data[3].addElement(Dialog.this.tfTitle.getText().toString());
JOptionPane.showMessageDialog(
Dialog.this,
"Data record was added to library.",
"Congratulations",
JOptionPane.INFORMATION_MESSAGE);
}
}
});
}
}
Ich habe die Beispiele nur auf das nötigste zusammengeschrumpft, ich hoffe das ist trotzdem ausreichend. Wenn nicht, kann ich ja noch mehr posten.
Ich erhalte jetzt eine Fehlermeldung die da sagt: "Cannot refer to a non-final variable data inside an inner class defined in a different method".
Ich habe mal probiert, den Konstruktor von Dialog so zu ändern: Dialog(final JFrame f,final Vector[] data) und siehe da, es ging auf einmal. Aber jetzt habe ich Bedenken: final bewirkt doch eigentlich, dass eine Variable nicht mehr geändert werden kann. Aber genau das möchte ich doch :autsch: Und bezieht sich dieses nicht-ändern dann nur auf die Klasse Dialog oder auf alle Klassen? Ich hab final noch nie benutzt und bin mir deswegen sehr unsicher.
Gibt es vielleicht noch einen besseren Ansatz das Problem zu lösen?