Variablen in Unterklassen benutzen

Xym

Erfahrenes Mitglied
Also:
ich habe 2 Klassen. Ein ma die Hauptklasse mit der Main-Methode. In der steht auch die Methode mouseMoved().
Code:
public int x;
public void mouseMoved( MouseEvent e )
   {
     x = e.getX();
     y = e.getY();
     repaint();
     e.consume();
   }
Dann eine 2. in der die Grafik produziert wird.
Code:
class AnyPanel extends JPanel
{

    @Override
    public void paintComponent(final Graphics g)
    {

      super.paintComponents(g);
      g.drawLine(x,100,1,1);


    }
}]

Wie komme ich nun in der Unterklasse an die X-Variable****
Ich bekomme immer die Fehlermeldung "x is not public in java.awt.Component;"
 
Hier ist zur sicherheit der ganze Quellcode:
Code:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Paint extends JFrame implements MouseMotionListener
{
  public  int neu = 0;
    int linie=1;
    public int x,y;

    public Paint()
    {
        super(Paint.class.getName());
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout());

        JButton button = new JButton("Neu");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(final ActionEvent e)
            {
             neu = 1;
            }
        });

        JButton button2 = new JButton("Linie");
        button2.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent e)
          {
           linie=1;
          }
        });
        
        Box menuBox = new Box(BoxLayout.X_AXIS);
        menuBox.add(button);
        menuBox.add(button2);


        cp.add(menuBox, BorderLayout.NORTH);

        final AnyPanel panel = new AnyPanel();
        cp.add(panel, BorderLayout.CENTER);
        setSize(600, 480);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        addMouseMotionListener( this );
    }
    
   public int getx(int x)
   {
     return x;
   }

    public void mouseMoved( MouseEvent e )
   {
     x = e.getX();
     y = e.getY();
     System.out.println (x);
     repaint();
     e.consume();

   }
  public void mouseDragged( MouseEvent e ) { }

  
  
    public static void main(final String[] argv)
    {
        new Paint();
    }
}


class AnyPanel extends JPanel
{

    @Override
    public void paintComponent(final Graphics g)
    {

      super.paintComponents(g);
      g.drawLine(x,100,1,1);


    }
}
 
Ok, also entweder du packst die Klasse AnyPanel [als private] in Klasse Paint, dann sollte der Zugriff auf die Variable x da sein, dann kannst du auch das public wieder in private umschreiben...


also so hier in etwa:

PHP:
public class Paint extends JFrame implements MouseMotionListener
{
  public  int neu = 0;
    int linie=1;
    private int x,y;
 
    public Paint()
    {
        super(Paint.class.getName());
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout());
 
        JButton button = new JButton("Neu");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(final ActionEvent e)
            {
             neu = 1;
            }
        });
 
        JButton button2 = new JButton("Linie");
        button2.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent e)
          {
           linie=1;
          }
        });
        
        Box menuBox = new Box(BoxLayout.X_AXIS);
        menuBox.add(button);
        menuBox.add(button2);
 
 
        cp.add(menuBox, BorderLayout.NORTH);
 
        final AnyPanel panel = new AnyPanel();
        cp.add(panel, BorderLayout.CENTER);
        setSize(600, 480);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        addMouseMotionListener( this );
    }
    
   public int getx(int x)
   {
     return x;
   }
 
    public void mouseMoved( MouseEvent e )
   {
     x = e.getX();
     y = e.getY();
     System.out.println (x);
     repaint();
     e.consume();
 
   }
  public void mouseDragged( MouseEvent e ) { }
 
  
  
    public static void main(final String[] argv)
    {
        new Paint();
    }
private class AnyPanel extends JPanel
{
 
    @Override
    public void paintComponent(final Graphics g)
    {
 
      super.paintComponents(g);
      g.drawLine(x,100,1,1);
 
 
    }
}
}


Grund ist der, das deine Klasse AnyPanel die Variable x gar nicht kennt. Das du sie in der Klasse Paint auf public gesetzt hast, zeigt nur, das du auf die Variable aus einer Instanz der Klasse Paint zugreifen kannst.
 
Danke ! Es geht nun .
Der Fehler war eig. das eine Mengenklammer falsch gesetzt war und die class AnyPanel nicht mehr in der Paint class war.
 
Zurück