Objekte "durch" ActionListener zeichnen

Status
Nicht offen für weitere Antworten.

Vril

Bekanntes Mitglied
Hallo habe folgendes kleines Programm geschrieben.
Jetzt hätte ich gerne das nach den entsprechenden Buttons folgendes geschieht:
löschen = Zeichenfeld soll gelöscht werden
Oval zeichnen = ein Oval soll gezeichnet werden usw.

Ich habe aber leider keine wirklich Idee wie ich das machen soll. Hab es mit g.drawRect (10, 20, 10, 30);
versucht, aber da sagt der compiler: cannot find symbol variable g

Was habe ich da falsch gemacht:
Code:
import java.awt.*;
import java.awt.event.*;

class MyCanvas extends Canvas {
	String text = "";
	
	public void paint (Graphics g) {
		g.drawString ( text, 10, 10);
	}
	
	public void setText (String text) {
		this.text = text;
		repaint();
	}
}

public class Grafik_Programm extends Frame implements ActionListener {
		
	private Panel panelCenter;
	private Button loeschen, ozeichnen, lzeichnen, rzeichnen;
	public Grafik_Programm (String Title) {
		super (Title);
		Panel panelNorth = new Panel();
		panelNorth.add (loeschen = new Button ("clear"));
		panelNorth.add (ozeichnen = new Button ("Oval zeichnen"));
		panelNorth.add (lzeichnen = new Button ("Linie zeichnen"));
		panelNorth.add (rzeichnen = new Button ("Rechteck zeichen"));
		panelCenter = new Panel();
		add ("North", panelNorth);
		
		panelCenter.setLayout (new CardLayout());
		add ("Center", panelCenter);
		setSize (600,400);
		//for (int i = 1; i <= 7; i++)
		//panelCenter.add ("Schalter " + i, new Button ("Schalter " + i));
		setVisible(true);

    loeschen.addActionListener (this);
    ozeichnen.addActionListener (this);
    lzeichnen.addActionListener (this);
    rzeichnen.addActionListener (this);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				System.exit(0);
			}
		});
	
	}
	
	public void actionPerformed(ActionEvent event) {
		CardLayout cl = (CardLayout)panelCenter.getLayout();
	
		if (loeschen == event.getSource())
		//Zeichenfeld soll gelöscht werden
  
   	else if (ozeichnen == event.getSource())
	  //ein Oval soll gezeichnet werden
	
		else if (lzeichnen == event.getSource())
		//eine Linie soll gezeichnet werden
	
		else if (rzeichnen == event.getSource())
		g.drawRect (10, 10, 20, 25)
		//ein Rechteck soll gezeichnet werden
	}
	
	
	public static void main (String [] args) {
		new Grafik_Programm ("BorderLayout");
	}
}
 
B

Beni

Gast
Du kannst entweder ein Image benutzen, und auf dieses Image zeichnen, das würde dann etwa so aussehen:
Code:
public class GrafikProgramm extends ...{
  private BufferedImage image = new BufferedImage( 600, 600, BufferedImage.TYPE_INT_RGB );

  public void actionPerformed( ActionEvent e ){
     if( ... ){
        Graphics g = image.getGraphics(); 
        g.setColor( Color.RED );
        g.fillRect( 10, 10, 30, 30 );
        repaint();
     }
  }

  public void paint( Graphics g ){
    g.drawImage( 0, 0, image, this );
  }
}

Oder du speicherst die Rechtecke, Ovale und was auch alles als Objekte in einer Liste, und zeichnest diese Liste jeweils. Das würde dann in diese Richtung gehen.
 

Vril

Bekanntes Mitglied
@Beni
Schon mal danke! Schaut nicht schlecht aus!
Jetzt habe ich aber das Problem, wenn ich das mit "private BufferedImage..." usw. mit einbinde, der Compiler meckert und meint: cannot find symbol class BufferedImage

Muß ich bzgl. BufferedImage noch eine eigene Klasse schreiben bzw. was anderes implementieren?
 
B

Beni

Gast
Du musst noch einen import machen, "import java.awt.image.BufferedImage" am Anfang der Datei hinschreiben.
 

Vril

Bekanntes Mitglied
@Beni
Danke! Dachte wenn ich import java.awt.* schreibe, import er den Rest automatisch...
So, also ich bin dank deiner Hilfe wieder ein Stück weiter gekommen. Jetzt hängt der Compiler aber bei g.drawImage!

cannot find symbol
symbol : method drawImage(int,int,java.awt.image.BufferedImage,Grafik_Programm)
location: class java.awt.Graphics
g.drawImage( 0, 0, image, this );
^

Also hier noch mal mein Code, damit man sieht wie ich es eingebaut habe:
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

class MyCanvas extends Canvas {
		public void paint (Graphics g) {
				
		g.drawRect (50, 50, 10, 10);
		g.drawLine (0, 10, 251, 121);
		g.drawLine (100, 0,100, 100);
		g.drawOval (29, 32, 32, 23);
	
	
	}
}

public class Grafik_Programm extends Frame implements ActionListener {
	private BufferedImage 
	image = new BufferedImage( 600, 600, BufferedImage.TYPE_INT_RGB ); 	
	private Panel panelCenter;
	private Button loeschen, ozeichnen, lzeichnen, rzeichnen;
	public Grafik_Programm (String Title) {
		super (Title);
		Panel panelNorth = new Panel();
		panelNorth.add (loeschen = new Button ("clear"));
		panelNorth.add (ozeichnen = new Button ("Oval zeichnen"));
		panelNorth.add (lzeichnen = new Button ("Linie zeichnen"));
		panelNorth.add (rzeichnen = new Button ("Rechteck zeichen"));
		panelCenter = new Panel();
		add ("North", panelNorth);
		
		panelCenter.setLayout (new CardLayout());
		add ("Center", panelCenter);
		setSize (600,400);
		//for (int i = 1; i <= 7; i++)
		//panelCenter.add ("Schalter " + i, new Button ("Schalter " + i));
		setVisible(true);

    loeschen.addActionListener (this);
    ozeichnen.addActionListener (this);
    lzeichnen.addActionListener (this);
    rzeichnen.addActionListener (this);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				System.exit(0);
			}
		});
	
	}
	
	public void actionPerformed(ActionEvent event) {
		CardLayout cl = (CardLayout)panelCenter.getLayout();
	
		if (loeschen == event.getSource()){
		 		
		//add (new MyCanvas(), BorderLayout.CENTER);
		Graphics g = image.getGraphics(); 
        g.setColor( Color.RED ); 
        g.drawRect( 10, 10, 30, 30 ); 
        repaint();
        	g.dispose();
         
}
  
   	else if (ozeichnen == event.getSource())
	  System.out.println("Oval zeichen");
	
		else if (lzeichnen == event.getSource())
		System.out.println("Linie zeichnen");
	
		else if (rzeichnen == event.getSource())
		System.out.println("Rechteck zeichnen");
	}

	public void paint( Graphics g ){ 
    g.drawImage( 0, 0, image, this ); 
    }
	
	public static void main (String [] args) {
		new Grafik_Programm ("BorderLayout");
	}
}
 
B

Beni

Gast
Ops, hab die Reihenfolge der Argumente vertauscht.

g.drawImage( image, 0, 0, this );

Sowas kannst du übrigens ganz gut in der API nachgucken :wink:
 

Vril

Bekanntes Mitglied
@Beni
Nochmals danke, jetzt meckert der Compiler nicht mehr!
Aber leider zeichnen tut er immer noch nichts........ :cry:
Warum nur?

Ja das mit der api und dem JCreator LE funktioniert irgendwie nicht. Das Problem haben mehrere und keiner weiss warum....
 

Illuvatar

Top Contributor
Vril hat gesagt.:
Ja das mit der api und dem JCreator LE funktioniert irgendwie nicht. Das Problem haben mehrere und keiner weiss warum....
Bei mir im JC Pro tut die API auch nur so halb, mit STRG+F1 sucht der nach irgendnem Quatsch... aber dann schau halt in deinem Browser ;)
 
B

Beni

Gast
Hab da mal was rumgebastelt, und die Ovale als Test implementiert. Das ist eine mögliche Art, das ganze zu lösen:

Code:
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

class MyCanvas extends Canvas {
	private BufferedImage image;
	
	public MyCanvas( int width, int height ){
		image = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
		setPreferredSize( new Dimension( width, height ) );
	}
	
	public void drawOval( int x, int y, int width, int height ){
		Graphics g = image.getGraphics();
		g.setColor( Color.RED );
		g.fillOval( x, y, width, height );
		g.dispose();
		repaint();
	}
	
	public void paint (Graphics g) {
		g.drawImage( image, 0, 0, this );
	}
}

class Grafik_Programm extends Frame implements ActionListener {
       
   
   private MyCanvas canvas = new MyCanvas( 600, 600 );
   private Button loeschen, ozeichnen, lzeichnen, rzeichnen;
   
   public Grafik_Programm (String Title) {
      super (Title);
      Panel panelNorth = new Panel();
      panelNorth.add (loeschen = new Button ("clear"));
      panelNorth.add (ozeichnen = new Button ("Oval zeichnen"));
      panelNorth.add (lzeichnen = new Button ("Linie zeichnen"));
      panelNorth.add (rzeichnen = new Button ("Rechteck zeichen"));
      add ("North", panelNorth);
      
      
      add ("Center", canvas );
      pack();
      //for (int i = 1; i <= 7; i++)
      //panelCenter.add ("Schalter " + i, new Button ("Schalter " + i));
      setVisible(true);

    loeschen.addActionListener (this);
    ozeichnen.addActionListener (this);
    lzeichnen.addActionListener (this);
    rzeichnen.addActionListener (this);
      
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent event) {
            System.exit(0);
         }
      });
   
   }
   
   public void actionPerformed(ActionEvent event) {
   
      if (loeschen == event.getSource()){
      	
      }
 
      else if (ozeichnen == event.getSource()){
      		canvas.drawOval( (int)(500 * Math.random()), 
      				(int)(500 * Math.random()), 
      				(int)(100 * Math.random()), 
      				(int)(100 * Math.random()) );
      }
   
      else if (lzeichnen == event.getSource())
      System.out.println("Linie zeichnen");
   
      else if (rzeichnen == event.getSource())
      System.out.println("Rechteck zeichnen");
   }
   
   public static void main (String [] args) {
      new Grafik_Programm ("BorderLayout");
   }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Durch DrawLine verschwindet das Fenster und die Objekte AWT, Swing, JavaFX & SWT 13
Juelin Objekte refresh AWT, Swing, JavaFX & SWT 3
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
Redeason Objekte in meiner GUI verschieben AWT, Swing, JavaFX & SWT 1
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
_user_q JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
J Objekte von 2 GUIs zusammenfassen AWT, Swing, JavaFX & SWT 2
T Swing Objekte in Liste AWT, Swing, JavaFX & SWT 2
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
I Objekte aus contentPane löschen funktioniert nicht AWT, Swing, JavaFX & SWT 3
C Swing Java Objekte AWT, Swing, JavaFX & SWT 4
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
M SWT Durchlagen der SWT Objekte mit Tabulator AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
D Swing Objekte bewegen mit MouseMotionListener AWT, Swing, JavaFX & SWT 4
P Objekte anzeigen und verschieben - wie? AWT, Swing, JavaFX & SWT 6
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
G Objekte in und aus einer JTable laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
propra Objekte auf Zeichenfläche verschieben AWT, Swing, JavaFX & SWT 2
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Objekte in JPanel bewegen AWT, Swing, JavaFX & SWT 4
E Objekte zu Path2D zusammensetzen AWT, Swing, JavaFX & SWT 2
M verschieben der Objekte in JPanel nur stückchenweise möglich AWT, Swing, JavaFX & SWT 14
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
R komplette Objekte in JTable einfügen AWT, Swing, JavaFX & SWT 18
C File-Objekte an JList übergeben und abrufen AWT, Swing, JavaFX & SWT 6
J Objekte aus Defaulttablemodel AWT, Swing, JavaFX & SWT 5
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
M JGraph Kante ohne Objekte AWT, Swing, JavaFX & SWT 2
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
T Mehrere sich bewegende Objekte in einem Frame AWT, Swing, JavaFX & SWT 14
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
J SWT 4 Objekte auf einem Composite anordnen AWT, Swing, JavaFX & SWT 5
L SWT Objekte in GC? AWT, Swing, JavaFX & SWT 8
M grafische objekte erstellen und bewegen AWT, Swing, JavaFX & SWT 4
E Swing Objekte werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
J Ansprechen untergeordneter Objekte AWT, Swing, JavaFX & SWT 6
C JTree Einzelne Objekte färben AWT, Swing, JavaFX & SWT 4
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
M Objekte weitergeben AWT, Swing, JavaFX & SWT 3
1 Bubble Breaker - Objekte fallen nicht runter AWT, Swing, JavaFX & SWT 3
W Objekte auf JPanel bewegen??? AWT, Swing, JavaFX & SWT 2
F "Objekte" mit "Verbindungen" grafisch darstellen AWT, Swing, JavaFX & SWT 4
G Objekte in JComboBox? AWT, Swing, JavaFX & SWT 7
P Speichern und Auswahl gezeichneter Objekte AWT, Swing, JavaFX & SWT 7
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2
W 2 Objekte in eine Tabellenzelle? AWT, Swing, JavaFX & SWT 3
L Objekte in Liste oder ähnliches anzeigen AWT, Swing, JavaFX & SWT 3
S JFrame-Klasse soll ein/mehrere Objekte einer JPanel-Klasse-& AWT, Swing, JavaFX & SWT 3
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
O Eigenschaften größerer GUI-Objekte verwalten AWT, Swing, JavaFX & SWT 3
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
G Objekte in SWT List AWT, Swing, JavaFX & SWT 3
D Schriftgrößen aller Objekte ändern AWT, Swing, JavaFX & SWT 19
N [und täglich grüsst das.] Zeichnen -> Objekte verschwinde AWT, Swing, JavaFX & SWT 2
S JList mit DefaultListModel befüllt, wie Objekte selektieren? AWT, Swing, JavaFX & SWT 3
M grafische Objekte mit Listener versehen AWT, Swing, JavaFX & SWT 3
G JTextArea Objekte in einem Array speichern? AWT, Swing, JavaFX & SWT 3
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
M Keine Buttons oder sonstige Objekte in JFrame unter Linux AWT, Swing, JavaFX & SWT 4
L Mehrere Scrollbar objekte miteinander verbinden AWT, Swing, JavaFX & SWT 3
E Swing-Fenster als Objekte im Sinne des OO-Prgrammparadigmas AWT, Swing, JavaFX & SWT 2
B Objekte auf Fenster verschieben. Bewegliche jPanels. AWT, Swing, JavaFX & SWT 5
T Frage zu JTree: Leaf Objekte vergleichen AWT, Swing, JavaFX & SWT 3
G Einzelne Objekte neu zeichnen AWT, Swing, JavaFX & SWT 8
T Objekte in JList AWT, Swing, JavaFX & SWT 4
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
M Image-Objekte in JEditorPane anzeigen? AWT, Swing, JavaFX & SWT 3
F bewegte objekte mit awt AWT, Swing, JavaFX & SWT 2
B Zwei "gleiche" Objekte auf einem Frame platzieren AWT, Swing, JavaFX & SWT 2
F Objekte beliebigen Typs zu JComboBox hinzufügen AWT, Swing, JavaFX & SWT 7
J Anordung der Objekte in der Oberfläche? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben