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.
Ich habe folgendes Problem: Ich habe eine Hauptklasse mit mehreren JButtons, JPaneln, JTextFields etc. In einer zweiten Klasse will ich auf eines davon zugreifen.Vereinfacht also folgender Code in der zweiten Klasse:
...
Java:
public class ButtonListener implements java.awt.event.ActionListener {
public void macheEtwas() {
Fielddebug.setText("IrgendeinText");
}
...
}
An der Seite wird mir der Fehler cannot find symbol angezeigt, da ja das Textfeld Fielddebug natürlich in der ersten Klasse ist. Ich habe bereits alles erdenkliche versucht, z.B. Hauptklasse.Fielddebug.setText(...); oder hk.Fielddebug.setText(...) , da ich von der Hauptklasse ein Objekt namens hk erzeigt hatte, hat aber alles nicht funktioniert. Ich weiß also, wo der Fehler liegt, aber nicht, wie ich ihn lösen kann. Ich freue mich daher auf Lösungsvorschläge! Vielen Dank im Voraus,
Da du ja offensichtlich eine Referenz auf das Objekt der Hauptklasse hast könntest du dort auch schlicht und einfach getter-Methoden für die interessierenden GUI-Element machen und diese verwenden.
Edit: oder ist das so zu verstehen dass du dir in der zweiten Klasse eben mal so ein Objekt der Hauptklasse angelegt hast ? Dann geht das natürlich nicht so.
Danke für die Antworten!
Ich hab zunächst die Sache mit getter-Methoden probiert und in die Hauptklasse eine getter-Methode für Fielddebug hinzugefügt. Allerdings ist mir nicht ganz klar, wie ich in der zweiten Klasse darauf zugreifen soll, Hauptklasse.getFielddebug() und hk.getFielddebug() funktionieren beide nicht, da steht dann wieder cannot find symbol.
Nein, das Objekt der Hauptklasse habe ich in einer weiteren Klasse mit der main-Methode erstellt.
Ich hab in Sachen dependency injection einige Seiten überflogen, es könnte das sein, was ich suche, allerdings steige ich da überhaupt nicht durch, und der Import javax.inject.*; wird bei mir auch nicht gefunden.
Also die Klasse mit der main-Methode sieht folgendermaßen aus:
Java:
//hier die imports und das package
public class Launchpad {
public static void main(String args[]) {
Hauptfenster lp = new Hauptfenster();
lp.setPreferredSize(new Dimension(800, 600));
lp.setVisible(true);
lp.setSize(new Dimension(800, 600));
}
}
Erstellt also bloß ein Objekt von Hauptfenster namens lp. Die Hauptfensterklasse kann ich hier nicht ganz hinkopieren, da sie zu lang ist, aber das Relevanteste ist folgendes:
Java:
//hier die imports und das package
public class Hauptfenster extends javax.swing.JFrame {
javax.swing.JPanel panel = new javax.swing.JPanel();
javax.swing.JTextField Fielddebug = new javax.swing.JTextField();
javax.swing.JButton TonButton = new javax.swing.JButton();
Buttonlistener bl = new Buttonlistener();
public Hauptfenster() {
TonButton.addActionListener(bl);
panel.add(TonButton);
this.getContentPane.add(panel);
}
}
Wie gesagt, die Klasse ist um einiges komplizierter, aber nur dies ist für mein Problem wichtig. Und schließlich die Klasse Buttonlistener:
Java:
//hier die importe und package
public class ButtonListener implements java.awt.event.ActionListener {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource == TonButton) {
Fielddebug.setText("Der Knopf wurde gedrückt");
}
}
}
Mir ist natürlich klar, dass ich hier nichts so einfach auf Fielddebug zugreifen kann, ich habe allerdings keine Ahnung, wie ich es sonst anstellen soll; mit lp.Fielddebug oder Hauptfenster.Fielddebug geht es ja auch nicht.
Oben im Editor auf das Symbol klicken, das aussieht wie ein Brief. Maus drüber halten und es erscheint "einfügen..." drauf klicken. Den Rest solltes du hinkriegen.
Unter deinem Post siehst du eine kleine blaue Schrift "Bearbeiten" zum editieren deines Beitrags.
Ah, im Konstruktor von der Klasse ButtonListener musst du entweder die Klasse Hauptfenster oder das JTextField Fielddebug mit geben. Das heißt die Klasse ButtonListener hat eine Instanz Variable von Fielddebug.
Java:
public class ButtonListener implements java.awt.event.ActionListener {
private JTextField fielddebug;
public ButtenListener (JTextField fielddebug ){
this.fielddebug = fielddebug;
}
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource == TonButton) {
this.fielddebug.setText("Der Knopf wurde gedrückt");
}
}
}
PS: Bitte um Java Conversion, Variablennamen werden klein geschrieben, aus sie sind final und static....