cannot find symbol - symbol : method

Status
Nicht offen für weitere Antworten.

akaDisi

Aktives Mitglied
Hi, ich habe das Problem, dass ich aus einem AktionListener heraus eine Funktion in einer Canvas-Klasse ausführen möchte.
Es ist wahrscheinlich etwas total banales, aber ich komm im Moment einfach nicht drauf :-\

Hier mal die meines Erachtens nach die Wichtigesten Passagen meines Programms:

Java:
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class Applet extends JApplet {
  public Canvas cvsAnzeige = new GrafikCanvas();
[...]
  public void init() {
[...]
  Container cp = getContentPane();
  cp.setLayout(null);
[...]
  cvsAnzeige.setBounds(0, 0, 600, 473);
  cp.add(cvsAnzeige);
[...]
  public void btnShow_ActionPerformed(ActionEvent evt) {
[...]
  cvsAnzeige.zeichnen();
[...]
  }//ende Listener
}//ende class

class GrafikCanvas extends Canvas {
    public GrafikCanvas(){
    }
[...]
    public void zeichnen(){
      Graphics grafik = this.getGraphics();
      
      grafik.drawString("Hallo", 6,9);
    }
}

ich hoffe ihr könnte damit was anfangen...

Sollte iwas an Code fehlen, dann reiche ich das nach.

MfG Disi
 
canvas final setzen, wenn ich mich nicht irre. (so verstückelt das teil)

> Graphics grafik = this.getGraphics();

igit....mach das NIE !! paint Methode überschreiben.

Swing und AWT mischen. Generell schlechte Idee.
 
Hey, also ich habe mal deine Code ein wenig verändert und ich kann die Zeichen Methode aus dem AktionListener aufrufen.

Schau mal hier:
Java:
import java.awt.Canvas;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;

public class Applet extends JApplet {
	
	private static final long serialVersionUID = -448098890644311107L;
	
	public Canvas cvsAnzeige = new GrafikCanvas();

	// [...]
	
	public void init() {

		// [...]
		
		Container cp = getContentPane();
		cp.setLayout(null);
		
		// [...]
		
		cvsAnzeige.setBounds(0, 0, 600, 473);
		cp.add(cvsAnzeige);
		
		// [...]

		JButton b = new JButton();
		b.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				((GrafikCanvas) cvsAnzeige).zeichnen();
			}
		});
		cp.add(b);

		// [...]
	}

	private class GrafikCanvas extends Canvas {
				
		private static final long serialVersionUID = -2362983907655953833L;
		
		// [...]

		public GrafikCanvas() {
			
		}
		
		// [...]
		
		public void zeichnen() {
			Graphics grafik = this.getGraphics();
			grafik.drawString("Hallo", 6, 9);
		}
		
		// [...]
	}

}
 
> Graphics grafik = this.getGraphics();

igit....mach das NIE !! paint Methode überschreiben.

Swing und AWT mischen. Generell schlechte Idee.

Das ist mein Problem, die habe ich schon überschrieben .... da wird ein Koordinatensystem gezeichnet und ich will dann nachträglich, nachdem ich im hauptprogramm die Werte eingeben gelassen habe die Koordinaten ausrechnen und dann erst zeichnen


@ dayaftereh:

Keine Ahnung warum, aber mit dem (heißt das Ding so?) Cast geht es, danke 😉
 
Wenn du paint() überschreibst, kannst du jederzeit repaint() aufrufen, es gibt also keinen Grund paint() nicht zu überschreiben.
 
Hey, schau dir mal das Code beispiel an, hier wird eine Parabel auf eine JPanel mit Punkten gezeichnet, aber erst wenn man den Button Draw drückt. vielicht hilft es dir.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Applet extends JApplet implements ActionListener {

	private static final long serialVersionUID = -448098890644311107L;

	public JPanel drawPanel = null;

	private JFrame f = null;
	private List<Point> points = null;

	@Override
	public void init() {
		points = new ArrayList<Point>();
		initComponents();
		showFrame();
	}

	private void initComponents() {
		f = new JFrame();
		f.setTitle("Gitter");

		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new BorderLayout());

		drawPanel = new DrawPanel();
		drawPanel.setPreferredSize(new Dimension(800, 600));
		f.add(drawPanel, BorderLayout.CENTER);

		JButton draw = new JButton("Draw");
		draw.addActionListener(this);
		f.add(draw, BorderLayout.NORTH);
	}

	private void showFrame() {
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}

	private class DrawPanel extends JPanel {

		private static final long serialVersionUID = 4420012036293406142L;

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawLine(0, this.getHeight() / 2, this.getWidth(), this.getHeight() / 2);
			g.drawLine(this.getWidth() / 2, 0, this.getWidth() / 2, this.getHeight());
			g.setColor(Color.BLUE);

			synchronized (points) {
				for (Point p : points) {
					g.drawRect(p.x, p.y, 1, 1);
				}
			}
		}
	}

	public void actionPerformed(ActionEvent e) {
		int bereich = 40;
		for (int x = -bereich / 2; x <= bereich / 2; x++) {
			int xd = (x * -1) + drawPanel.getWidth() / 2;
			int yd = (x * x * -1) + drawPanel.getHeight() / 2;			
			synchronized (points) {
				points.add(new Point(xd, yd));
			}
		}

		drawPanel.repaint();
	}
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben