Klassen Zugriff auf Instanz einer anderen Klasse

Carandiru

Mitglied
Hallo zusammen,

Ich habe folgendes Problem:
In meiner Hauptklasse werden mittels Konstruktur einige Objekte, wie auch eine Toolbar erzeugt.
Jetzt möchte ich gerne mit einem Button, der ebensfalls per Konstruktor generiert wird, dieser Toolbar weitere Elemente hinzufügen.
Leider funktioniert das nicht, da meine Instanzvariable, die im Konstruktor als "toolBar" deklariert wurde in der Methode nicht gefunden werden kann.
Wie gehe ich da am besten vor?
 
@EikeB
Das Ganze soll aber mittels ActionListener geschehen...würde das trotzdem funktionieren?
Also ich möchte die Aktion, die geschehen soll, gerne in die überladene actionPermoed() Methode schreiben.

@HimBromBeere
Wäre das in meinem Falle eine selbstgeschriebene add Funktion für die toolbar, die ich dann in actionPerformed() aufrufen kann?
 
Du speicherst in deiner Hauotklasse eine Referenz auf die Toolbar. Sofern du die actionPerformed auch innerhalb der Hauotklasse geschrueben hast, sollte die diese Referenz auch kennen...
 
@HimBromBeere:

Hmm, also die Struktur sieht folgendermaßen aus (stark vereinfacht):

Java:
Hauptklasse{

Konstruktor(){
erzeugt die Instanz der toolbar; name ="toolBar"
}

actionPerformed(){
toolbar.add <- funktioniert nicht
}

}

Trotzdem scheint kein Zugriff zu bestehen.
 
Ja, die bekomme ich:
>> Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: toolBar.add <<


Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;

public final class TestClass extends JFrame implements ActionListener {

    private JButton mainButton = null;
    static final private String PREVIOUS = "Zurück";
    static final private String UP = "Slideshow";
    static final private String NEXT = "Weiter";
    static final private String TEXT_ENTERED = "text";

    public TestClass() {
        super("Titel");
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.setBackground(Color.lightGray);


        mainButton = new JButton("Pfad öffnen");
        mainButton.addActionListener(this);
        mainButton.setVerticalAlignment(JButton.BOTTOM);


        JToolBar toolBar = new JToolBar("Draggable");
        toolBar.setFloatable(true);
        add(toolBar, BorderLayout.PAGE_START);

        JPanel mainPanel = new JPanel();

        mainPanel.setLayout(new FlowLayout());
        mainPanel.add(mainButton);

        mainPanel.setBorder(BorderFactory.createLineBorder(Color.red));

        contentPane.add("Center", mainPanel);
        setSize(new Dimension(800, 600));
        setVisible(true);
    }


    
       @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == mainButton) {
            JLabel sekunden = new JLabel("Interval (in s.): ");
            toolBar.add(sekunden);
        }

        System.out.println(e.getActionCommand());
    }


    protected class ToolBarListener implements ActionListener {

        String toolTipText;

        public ToolBarListener(String toolTipText) {
            this.toolTipText = toolTipText;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
           
        }
    }
}

Hier der komplette Code, wenn es was hilft 🙂
Bei Zeile 54 kommt der Fehler, dass er "toolBar" nicht finden kann.
 
Wenn ich das richtig überschaue, hast du keinerlei Referenz auf deine Toolbar.

Aaah, jetzt hab ich se gefunden... die Toolbar musst du als Instanzvariable definieren, also über dem Konstruktor. Dann müsstest du sie in der actionPerformed nutzen können...


EDIT: ups, das falsche kopiert .... hier nun das Richtiuge
Java:
 public TestClass() {
    private JButton mainButton = null;
    static final private String PREVIOUS = "Zurück";
    static final private String UP = "Slideshow";
    static final private String NEXT = "Weiter";
    static final private String TEXT_ENTERED = "text";
 
    
    JToolBar toolBar = new JToolBar("Draggable");

    public TestClass() {...}
 
Zuletzt bearbeitet:

Zurück
Oben