Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class beeMain extends JFrame
{
...
public void addEntryToBox(String s)
{
...
}
}
Sollte ja alles funktionieren.
Leider bekomme ich immer folgenden Fehler ausgegeben:
C:\...\Desktop\project#Bee\beeEntryEditor.java:88: non-static method addEntryToBox(java.lang.String) cannot be referenced from a static context
beeMain.addEntryToBox(textField.getText());
Wieso "static context"? actionPerformed ist doch gar nicht static.
Also ich hab schon alles mögliche probiert.
Ich weiß echt nicht mehr, was ich noch tun kann.
Du brauchst eine Instanz der Klasse beeMain (die Klasse sollte besser mit einem Großbuchstaben beginnen), damit du eine Instanzmethode aufrufen kannst.
Das hast du bereits - jede Methode, die nicht explizit als "static" deklariert wurde, ist eine Instanzmethode.
Hast du in der Klasse beeEntryEditor irgendwo eine Referenz auf ein Objekt vom Typ beeMain? Wenn ja, dann ruf daran die Methode auf. Existiert so eine Referenz noch nicht, dann musst du das Klassendesign möglichweise nochmal überdenken. Welche Aufgaben habe denn beeMain und beeEntryEditor? Wo werden Objekte dieser Klassen erzeugt?
Nein, so eine Referenz habe ich nicht.
Wie macht man sowas?
Aus der beeMain.addEntryToBox() werden in der Klasse beeMain() Elemente der GUI verändert (bsp.: textField.setEnabled(false).
Die Funktion wird dann von beeEntryEditor() aus aufgerufen.
Aus der beeMain.addEntryToBox() werden in der Klasse beeMain() Elemente der GUI verändert (bsp.: textField.setEnabled(false).
Die Funktion wird dann von beeEntryEditor() aus aufgerufen.
Stand vorher nicht drin.
Nur ausschließlich: beeMain.addEntryToBox();
Jetzt habe ich auf folgendes erweitert:
Code:
beeMain ba = new beeMain();
ba.addEntryToBox(textField.getText());
Jetzt bekomme ich aber den Fehler:
C:\...\Desktop\project#Bee\beeEntryEditor.java:88: cannot find symbol
symbol : constructor beeMain()
location: class beeMain
beeMain ba = new beeMain();
Du sollst erstmal nichts ändern; ich versuche doch nur, dein Programm zu verstehen. Eine Instanz von beeEntryEditor muss es bereits geben, sonst könnte doch die actionPerformed-Methode niemals aufgerufen werden. Ich wüsste nur gern, wo die entsteht, und wie der Code, wo das geschieht, in Verbindung zu deinen Klassen beeMain und beeEntryEditor steht.
Achso, klar!
die beeMain ist meine Main-Klasse. Wenn man diese öffnet und in der GUI einen bestimmten button klickt reagiert die actionPerformed der beeMain-Klasse mit folgendem:
Code:
...
public void actionPerfromed(ActionEvent ae)
{
Object source = ae.getSource();
if(source == open)
{
// Hier wird also die GUI in der beeEntryEditor-Klasse gestartet
beeEntryEditor editor = new beeEntryEditor()
editor.setVisible(true);
editor.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
...
}
Jetzt wird also die GUI von beeEntryEditor gestartet. (FUNKTIONIERT)
Wen man nun in dieser auf einen weiteren Button klickt, reagiert die actionPerformed der beeEntryEditor mit folgendem:
Code:
...
public void actionPerfromed(ActionEvent ae)
{
Object source = ae.getSource();
if(source == b1)
{
beeMain ba = new beeMain();
ba.addEntryToBox(textField.getText());
}
...
}
Daraufhin wird also aus der Main-Klasse (beeMain) eine Funktion aufgerufen (public void addEntryToBox(String s)).
Diese verändert in der beeMain einige Elemente. (FUNKTIONIERT NICHT)
OK, dann bau mal in beeEntryEditor ein Member vom Typ beeMain ein und eine set-Methode dafür.
Code:
public class beeEntryEditor {
/* ... */
private beeMain instBeeMain;
/* ... */
public void setBeeMain( final beeMain bm) {
instBeeMain = bm;
}
/* ... */
}
Beim Erzeugen hinterlegst du jetzt die Referenz:
Code:
public class beeMain {
/* ... */
public void actionPerfromed(ActionEvent ae)
{
Object source = ae.getSource();
if(source == open)
{
// Hier wird also die GUI in der beeEntryEditor-Klasse gestartet
beeEntryEditor editor = new beeEntryEditor()
editor.setBeeMain( this); //--- hier wird die Referenz hinterlegt
editor.setVisible(true);
editor.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
...
}
/* ... *
}
Und im Editor kannst du dann die Referenz verwenden:
Code:
public class beeMain {
public void actionPerformed(ActionEvent ae)
{
Object source = ae.getSource();
if(source == b1)
{
instBeeMain.addEntryToBox(textField.getText());
}
...
}
}