"cannot find symbol" bei Methodenzugriff Panel

lobo74

Grünschnabel
Hallo, ich habe folgendes Problem:

ich habe mit Hilfe der Entwicklungsumgebung NetBeans IDE 6.1 ein JFrame (TestView extends FrameView) angelegt auf dem sich ein Panel (DrawPanel extends JPanel) befindet. Weiterhin befindet sich ein MouseListener auf dem Panel. Der Klasse DrawPanel habe ich nun Variablen und Methoden hinzugefügt.

Möchte ich nun aus der Methode mainPanelMouseClicked auf die Methoden meines Panels zugreifen so erhalte ich folgende Meldung von NetBeans:

cannot find symbol
symbol: method getdrawn()
location: class javax.swing.JPanel

Für jegliche Hilfe wäre ich äußerst dankbar.

DrawPanel.java

Code:
...

class DrawPanel extends JPanel {

    boolean drawn = false;
    
    protected void setdrawn(boolean dw){
    this.drawn=dw;
    }
    
    protected boolean getdrawn(){
    return drawn;
    }    
    
    @Override
    protected void paintComponent(Graphics g) {
    ...
    }

TestView.java

Code:
public class TestView extends FrameView {

...

   private void initComponents() {

        mainPanel = new DrawPanel();
        
        ...
        }
        
 ...
        
  private void mainPanelMouseClicked(java.awt.event.MouseEvent evt) {

    if (evt.getSource().equals(mainPanel)) {
        
        if (mainPanel.getdrawn() == true) {
            mainPanel.repaint();
            mainPanel.setdrawn(false);
        } else {
            mainPanel.repaint();
            mainPanel.setdrawn(true);
        }
    }
}
...
}
 
Hallo,

das verwundert mich nicht weiter, denn die Methoden sind protected und somit nur für Subklassen sichtbar und TestView ist keine. Daher sind die Methoden für TestView schlichtweg unsichtbar. Beheben lässt sich das, indem du die Methoden public machst.

Gruß

taouri
 
Das ist nicht ganz korrekt. Denn protected-Methoden sind auch im gleichen Package sichtbar. Also, wenn die Klassen im gleichen Package liegen, kann auch die Klasse TestView die Methoden sehen.

Die Variable mainPanel hast du die so angelegt?
Code:
JPanel mainPanel;

MFG

Sascha
 
Hallo taouri, danke für die schnelle Antwort.
Wie zerix bereits korrekt festgestellt hat, löst Dein Vorschlag mein Problem leider nicht.

@zerix: mainPanel ist die Instanz der Klasse DrawPanel, welche von JPanel abgeleitet ist. Die Instanzierung erfolgt durch den Aufruf mainPanel = new DrawPanel();
 
Code:
mainPanel = new DrawPanel();
Diese Zeile sehe ich ja.
Es ist aber möglich mainPanel auf zwei Arten zu deklarieren.

Code:
JPanel panel1 = new DrawPanel();
DrawPanel panel2 = new DrawPanel();

Ich wollte jetzt wissen, welches von beiden zu gemacht hast.

MFG

Sascha
 
Code:
mainPanel = new DrawPanel();
Diese Zeile sehe ich ja.
Es ist aber möglich mainPanel auf zwei Arten zu deklarieren.

Code:
JPanel panel1 = new DrawPanel();
DrawPanel panel2 = new DrawPanel();

Ich wollte jetzt wissen, welches von beiden zu gemacht hast.

MFG

Sascha

Hallo Sascha,

hier die Deklaration:

Code:
private javax.swing.JPanel mainPanel;
 
Du erstellst also eine Instanz von JPanel, willst aber eine Methode von deinem DrawPanel nutzen, kann also nicht gehen. Probier mal die Version die ich gepostet/Saschas 2. Variante.
 
Wie Matze auch schon gesagt hat, wenn du die Methode nutzen möchtest, musst du das so machen
Code:
DrawPanel panel2 = new DrawPanel();

MFG

Sascha
 

Neue Beiträge

Zurück