public void actionPerformed(...) ist statisch??

Status
Nicht offen für weitere Antworten.

TzA

Mitglied
Ich habe folgendes Problem:
Ich habe eine Klasse namens Fenster, in der befinden sich unter anderem 2 Buttons, die eine Zoomfunktion für eine Komponente namens Platine bereitstellen sollen. Jedoch erzählt mir JBuilder, ich könnte auf die Variable in Platine nicht zugreifen, da man aus einem statischen Kontext nicht auf nicht-statische Sachen zugreifen könnte.
Der Code dazu:
Fenster.java
Code:
public class Fenster
    extends JFrame implements ActionListener
{
  public Fenster(String titelText)
  {
    this.setTitle(titelText);
    this.setDefaultCloseOperation(3);
    this.getContentPane().setLayout(null);
    Platine erstePlatine = new Platine();
    this.getContentPane().add(erstePlatine);
    erstePlatine.setBounds(0, 0, 600, 600);
    JButton zoomIn = new JButton("+");
    JButton zoomOut = new JButton("-");
    this.getContentPane().add(zoomIn);
    zoomIn.setBounds(0, 600, 50, 30);
    this.getContentPane().add(zoomOut);
    zoomOut.setBounds(40, 600, 50, 30);
    zoomOut.addActionListener(this);
    this.setSize(1152, 800);
    this.setVisible(true);
  }

  public void actionPerformed(ActionEvent e)
      {
        Platine.grid++; //müsste noch zwischen den Buttons unterscheiden, aber erstmal egal
      }
}

Der Anfang von Platine.java
Code:
public class Platine
    extends JPanel
{
  Graphics2D g2 = null;
  Bauteil teil1 = new Bauteil(Color.red, 50, 50);
  Bauteil teil2 = new Bauteil(Color.green, 200, 300);
  int grid = 50;
  int gridXOffset = 10;
  int gridYOffset = 10;
...

Das Programm wird gestartet, indem ich in einer anderen Klasse eine Instanz von Fenster erzeuge (aus der main() heraus)

Kann mir wer erklären, woher es kommt, dass public void actionPerformed(..) als static angenommen wird, und wie ich das vermeiden/umgehen kann.
 
B

bygones

Gast
Also wenn ich deinen Code so in Eclipse lade meckert er mir, dass er die Variable Platine in der actionPerformed Methode nicht kennt !!

Desweiteren kennt die Klasse Platine keine Instanzvariable grid...

Wenn das dein kompletter Code ist, dann darfst du die Variblen nicht lokal in den Konstruktoren definieren !!
die methode actionperformed ist nicht statisch....
 

TzA

Mitglied
Code:
package versuche;

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

public class Platine
    extends JPanel
{
  Graphics2D g2 = null;
  //Bauteil teil1 = new Bauteil(Color.red, 50, 50);
  //Bauteil teil2 = new Bauteil(Color.green, 200, 300);
  int grid = 50;
  int gridXOffset = 10;
  int gridYOffset = 10;
  public Platine()
  {
    this.add(teil1);
    this.add(teil2);
    this.setLayout(null);
  }

  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g2 = (Graphics2D) g;
    int xPoints = (this.getWidth() - gridXOffset) / grid;
    int yPoints = (this.getHeight() - gridYOffset) / grid;
    for (int i = 0; i < xPoints; i++)
    {
      for (int j = 0; j < yPoints; j++)
      {
        g2.draw(new Ellipse2D.Float(gridXOffset + i * grid - grid / 10,
                                    gridYOffset + j * grid - grid / 10,
                                    grid / 5, grid / 5));
      }
    }
  }
}
Das ist die komplette Platine.java, ich hab mal alles asukommentiert, was ohne weiter Klassen nicht funzt. Wenn du dann die Fenster und die Platine in ein gemeinsames Package packst, sollten die eigentlich untereinander auf Variablen zugreifen können. Aber zumindest mein JBuilder sagt, dass das Probleme machen würde. Morgen kann ich es ja mal direkt mit javac testen ob es einen Unterschied macht.
 
B

bygones

Gast
Der Aufruf
Code:
Platine.grid++; //müsste noch zwischen den Buttons unterscheiden, aber erstmal egal
ist ein statischer Aufruf, du rufst in aber in einem nicht statischen Kontext auf (in der actionPerformed) --> daher der Fehler !
 

TzA

Mitglied
Und wie inkrementiere ich eine Variable auf eine nicht-statische Art (bzw was verursacht dass das als statisch angesehen wird?)
Denn die Variable grid selbst ist ja wohl eine nichtstatische Variable?
 
B

bygones

Gast
Mach das was ich hier schon immer predige:

Alle Instanzvariablen als private deklarieren und nür über get bzw. set zuzänglich machen.

In deinem Bsp. schreib in die Platine Klasse eine Methode "increaseGrid()", die erhöht dein grid. Die Klasse Fenster bekommt nun eine Insanz der Klasse Platine im Konstruktor mit übergeben und ruft dann in der actionPerformed einfach platine.increaseGrid() auf (wobei platine hier die Variable ist, nicht der Klassenname !!)

Noch fragen :wink: ???
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Public Static GUI für CRM / ERP AWT, Swing, JavaFX & SWT 6
C JavaFX Klasse wird nicht als public erkannt AWT, Swing, JavaFX & SWT 6
B void itemStateChanged() AWT, Swing, JavaFX & SWT 3
N Rückgabewerte bei private void jButton1ActionPerformed AWT, Swing, JavaFX & SWT 4
G von void zu image zu vergrößerung des Bilds AWT, Swing, JavaFX & SWT 5
M Graphics2D - abstract void draw(.) AWT, Swing, JavaFX & SWT 2
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
G lastFocusedComponent in ActionPerformed AWT, Swing, JavaFX & SWT 4
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
K Event Handling Mit ActionPerformed und java.io arbeiten AWT, Swing, JavaFX & SWT 3
Q AWT Methodenaufruf aus actionPerformed-Methode AWT, Swing, JavaFX & SWT 4
L ActionPerformed Variable übergeben AWT, Swing, JavaFX & SWT 3
J in actionPerformed() Koordinaten ändern AWT, Swing, JavaFX & SWT 9
C actionPerformed mit mehren Aktionen AWT, Swing, JavaFX & SWT 3
C Actionperformed funktioniert nicht AWT, Swing, JavaFX & SWT 13
H actionPerformed aufteilen AWT, Swing, JavaFX & SWT 12
G if-bedinung in actionperformed AWT, Swing, JavaFX & SWT 4
P Swing actionPerformed()-Methode funktioniert nicht AWT, Swing, JavaFX & SWT 3
S AWT Java actionPerformed "Ok" Button AWT, Swing, JavaFX & SWT 4
V Labeltext ändert sich nicht in actionPerformed AWT, Swing, JavaFX & SWT 5
M actionPerformed() wird zu oft aufgerufen AWT, Swing, JavaFX & SWT 10
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
M Swing Anfängerfrage: ActionPerformed AWT, Swing, JavaFX & SWT 3
B Swing NullPointerException bei actionPerformed() AWT, Swing, JavaFX & SWT 2
B actionPerformed Problem AWT, Swing, JavaFX & SWT 3
D JTree DefaultMutableTreeNode ActionPerformed AWT, Swing, JavaFX & SWT 3
J Aus ActionPerformed ein Plugin starten AWT, Swing, JavaFX & SWT 4
R paintComponent direkt bei actionPerformed aufrufen AWT, Swing, JavaFX & SWT 2
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
O Button (ActionPerformed) soll neues JFrame erzeugen AWT, Swing, JavaFX & SWT 8
J Action before actionPerformed! AWT, Swing, JavaFX & SWT 4
E ActionListener/actionPerformed() feuert nicht AWT, Swing, JavaFX & SWT 2
E AWT Implementierung einer Anweisung in Methode ActionPerformed AWT, Swing, JavaFX & SWT 2
B Komisches Problem mit actionPerformed() AWT, Swing, JavaFX & SWT 2
K Swing: 2 Buttons und actionPerformed AWT, Swing, JavaFX & SWT 4
B actionPerformed reagiert nicht auf das Canvas-objekt AWT, Swing, JavaFX & SWT 11
B Objekt in "actionPerformed" erzeugen und nutzen AWT, Swing, JavaFX & SWT 3
F actionPerformed und static? AWT, Swing, JavaFX & SWT 20
B Exceptions in actionPerformed() weiterleiten AWT, Swing, JavaFX & SWT 9
S Variablenübergabe bei actionPerformed funktioniet nicht? AWT, Swing, JavaFX & SWT 12
X actionPerformed in einer Klasse Buttons AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben