AWT bestimmte Objekte zeichnen und löschen

4nubis

Mitglied
Hi,

ich möchte ein Programm schreiben, mit dem es möglich ist Objekte zu zeichnen und bestimmte Objekte zu löschen. Also wenn durch den klick auf der Zeichenfläche der Umfang des Objektes berührt wurde und man dann auf den Button Löschen One klickt auch nur dieser oder auch alle anderen dadurch berührt werden gelöscht werden. Alles kann man ja mit repaint löschen, jedoch bekomme ich das mit einzelnen Objekten nicht hin. Ich habe bereits sehr lange im Web gesucht, jedoch habe ich nix gefunden. Kann natürlich auch sein, dass ich nach dem falschen gesucht habe -.-.

Vielen Dank

Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;


public class draw extends Applet implements ItemListener,ActionListener {

	
	int breite;
	
	public TextField Breite;
	public Button Löschen_All, Löschen_one;
	public Choice Objekt;
	public Label label_breite;
	
	
	public void actionPerformed(ActionEvent e) {
	    if (e.getActionCommand().equals("Löschen All")){
	    	repaint();}
	}
	
public void init  () {
		
		breite= 200;
	
		Breite = new TextField ("200");
		label_breite = new Label ("Breite");
	
		Löschen_All = new Button ("Löschen All");
		Löschen_All.addActionListener(this);
		Löschen_one = new Button ("Löschen One");
		Löschen_one.addActionListener(this);
		
		Objekt = new Choice();
		Objekt.add("Kreis");
		Objekt.addItemListener(this);

		
        Panel steuerung  =new Panel(); 
        steuerung.add(label_breite);
        steuerung.add(Breite);
        steuerung.add (Objekt);
        steuerung.add (new Label());
        steuerung.add (Löschen_All);
        steuerung.add (Löschen_one);
    	
        
    	setLayout(null );
    	setSize(900,700);
    	
        add(steuerung);
        steuerung.setLayout(new GridLayout(20,20));
        steuerung.setSize(200,700);
    	setBackground(Color.BLUE);
    	

        addMouseListener(new MouseAdapter()
        {
            public void mousePressed(MouseEvent e)
            {
            	Graphics g = ((draw) e.getSource()).getGraphics();
              
                 int x = e.getX();
                 int y = e.getY();
               
                 breite = Integer.parseInt(Breite.getText());
                         
                 switch (Objekt.getSelectedIndex())
                 {
                      case 0:
              	
          				g.drawOval (x, y, breite, breite);
                    	; 
                    	break;
            }
     } 

});
}
       	      public void mouseReleased(MouseEvent e) {}
    	      public void windowActivated(WindowEvent e) {}
    	      public void windowClosed(WindowEvent e) {
    	        
    	      }
    	      public void windowClosing(WindowEvent e) {
    	        System.exit(0);
    	      }
    	      public void windowDeactivated(WindowEvent e) {}
    	      public void windowDeiconified(WindowEvent e) {}
    	      public void windowIconified(WindowEvent e) {}
    	      public void windowOpened(WindowEvent e) {}
    	      public void itemStateChanged(ItemEvent e) {
				
			}

}
 
Zuletzt bearbeitet:

c_sidi90

Top Contributor
Wie speicherst du die einzelnen Objekte denn? In einer Arraylist? Du solltest den einzelnen Objekten X und Y Koordinaten mitgeben. Eine Möglichkeit die Collision abzufragen wäre, die Objekte von einem Rectangle einschliessen zu lassen, welche du aus den Attributen x,y, Höhe und Breite des Zeichenobjektes erstellst. Wenn das Mouseevent aufgerufen wird, erstellst du mit den event.getX und Y Koordinaten ein Curserrectangle und prüfst ob dieses mit einem Objektrectangle aus der Arraylist in berührung kommt.

Im Anschluss nurnoch abfragen an welcher Position dieses Zeichenobjekt in der Liste steht und diesen Eintrag entfernen.

Lg
 

bERt0r

Top Contributor
Du hast da den falschen Ansatz. Gezeichnet werden sollte nur in der paint/paintComponent Funktion. Ich nehme mal an, sobald du die größe deines Fensters veränderst verschwindet auch alles.
Ein besserer Ansatz wäre, du machst dir Klassen für deine Formen, speicherst die in einer Collection und in der paintComponent Methode arbeitest du die Collection durch und zeichnest jedes Objekt.
Deine Formen können glaube ich von JComponent erben, mit setOpaque kannst du sie durchsichtig machen. Dadurch solltest du über contains(x,y) herausfinden können, ob ein bestimmter Punkt innerhalb einer Form liegt.
Sobald du eine Form löschen willst, entfernst du sie einfach aus deiner Collection und machst repaint()
 

4nubis

Mitglied
Hi,

ich brauche wieder eure Hilfe :(. Es geht darum, dass ein Feld sich pro Mausklick selbst aufzählt. Ich möchte somit erreichen, dass das vorher gezeichnete Objekt stehen bleibt und man dann ein Neues Objekt mit einem anderen Namen erzeugt. Habe es schon versucht, jedoch gibt er den X und Y Wert steht an allen.

Vielen Dank

Java:
package MyApplet;

import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;

public class MyApplet extends Applet implements MouseListener {
	int x,y,b,h;

	Kreis k1, k2, k3,k4,k5;
	
        public void init() {
	    addMouseListener(this);
        }
     
        public void mousePressed(MouseEvent event){
    		
        	b=100;
    		h=100;
    		
    		Kreis[] kreise = new Kreis[4];
    		int i=0;
    		
    		while( i==0){
    			
    			x = event.getX();
        		y = event.getY();
        		kreise[i]= new Kreis(x,y,30,30,Color.RED); 
        		k1 = kreise[i];
        		if(x!=0){
    				i++;	
 
    			}  		

    		}
    		x=19;
    		y=4;
            while( i==1){
    			
    			x = event.getX();
        		y = event.getY();
        		kreise[i]= new Kreis(x,y,30,30,Color.RED); 
        		k2 = kreise[i];
        		if(x!=0){
    				i++;	
    	
    			}  		

    		}
            while( i==2){
    			
    			x = event.getX();
        		y = event.getY();
        		kreise[i]= new Kreis(x,y,30,30,Color.RED); 
        		k3 = kreise[i];
        		if(x!=0){
    				i++;	
    	
    			}  		

    		}

    		repaint();
    		System.out.println("eins  " + k1+" "+x);
    		System.out.println("drei   " + k3+" "+x);
    	}
	

	public void mouseEntered(MouseEvent event){ }
	public void mouseExited(MouseEvent event){ } 
	public void mouseReleased(MouseEvent event){}
	public void mouseClicked(MouseEvent e) {}

	
	public void paint(Graphics g) {
		k1.paint(g);
		k2.paint(g);
		k3.paint(g);

	}
	
}
 

Michael...

Top Contributor
Es geht darum, dass ein Feld sich pro Mausklick selbst aufzählt. ...jedoch gibt er den X und Y Wert steht an allen.
Ich hab eine Vermutung was damit gemeint ist, bin mir aber nicht ganz sicher. Daher erkläre ich erst einmal was Dein Code macht:
Bei jeden Mausklick auf das Applet wird ein Array für vier Kreise erstellt. Drei "Plätze" davon, werden mit Kreisen der selben Postion und Größe belegt und den Varialben k1, k2, k3 zu gewiesen. Beim anschließenden Neuzeichnen werden diese drei Kreis - Objekte gezeichnet. Wobei man nur den letzten sieht, da er die zuvor gezeichneten Objekt übermalt.
Du willst aber vermutlich bei jedem Mausklick ein neues Kreis Objekt erzeugen und dieses an ein Array oder eine Liste (wäre besser) übergeben, um beim anschließenden Neuzeichnen alle Objekte zu zeichnen!?

Dazu benötigt Dein Applet ein Array/Liste als Instanzvariable (deren Geltungsbereich in der gesammten Klasse liegt) und in der mousePressed(...) wird einfach nur ein neues Kreis Objekt erzeugt und in diese Liste gesteckt.
 

4nubis

Mitglied
Du willst aber vermutlich bei jedem Mausklick ein neues Kreis Objekt erzeugen und dieses an ein Array oder eine Liste (wäre besser) übergeben, um beim anschließenden Neuzeichnen alle Objekte zu zeichnen!?

Dazu benötigt Dein Applet ein Array/Liste als Instanzvariable (deren Geltungsbereich in der gesammten Klasse liegt) und in der mousePressed(...) wird einfach nur ein neues Kreis Objekt erzeugt und in diese Liste gesteckt.

Genau das habe ich vor :). Aber ich bekomme es einfach nicht hin. Konntest du es mir evtl. an einem Beispielcode erklären?


@bERt0r

Danke für den Link gucke es mir gerade an
 

bERt0r

Top Contributor
Ich hab dir ein Beispiel gemacht:
Du brauchst einen Behälter, um deine Formen zu speichern
Java:
class ColoredShape		//Mein Form-Objekt
	{
		Shape shape;
		Color color;
		boolean filled;
		int clickCount=0;
	}
Und dann noch eine Collection, wo du die verschiedenen Behälter aufbewahrst.
Java:
Vector<ColoredShape> shapes=new Vector<ColoredShape>();
Und dann noch einen Component, der das ganze zeichnet - du überschreibst die paintComponent Funktion:
Java:
public void paintComponent(Graphics graph)
			{
				Graphics2D g=(Graphics2D)graph;
				for(ColoredShape cs:shapes)			//Das hier das wesentliche, die Formen in der Collection werden gezeichnet
				{
					g.setColor(cs.getColor());
					if(cs.isFilled())
					{
						g.fill(cs.getShape());
					}
					else
					{
						g.draw(cs.getShape());
					}
					Rectangle2D bounds=cs.getShape().getBounds2D();
					float x=(float) (bounds.getX()+(bounds.getWidth()/2));
					float y=(float) (bounds.getY()+(bounds.getHeight()/2));
					g.setColor(Color.BLACK);
					g.drawString(String.valueOf(cs.getClicks()), x, y);
				}
}
Wenn sich irgendwas ändert, rufst du paintPane.repaint() auf NICHT paint oder paintComponent direkt.
Und hier das ganze noch als ausführbares Beispiel:
 

Anhänge

  • PaintGui.java
    12,1 KB · Aufrufe: 28
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
S JavaFX WebView zeigt bestimmte Websites nicht an AWT, Swing, JavaFX & SWT 2
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
K LayoutManager Buttons auf bestimmte x und y Koordinaten AWT, Swing, JavaFX & SWT 2
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
S JTable: Eingabe nur für bestimmte Var.Typen zulassen AWT, Swing, JavaFX & SWT 13
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
E Komponenten die wie bestimmte Symbole aussehen AWT, Swing, JavaFX & SWT 6
M Swing JList --> Selektion für bestimmte Indexe verbieten? AWT, Swing, JavaFX & SWT 8
T JComboBox: ActionListener/ItemListener wie nur auf bestimmte Events reagieren? AWT, Swing, JavaFX & SWT 7
borobudur Bestimmte Zone auf einem Bild definieren AWT, Swing, JavaFX & SWT 7
dl85hej bestimmte Zeile anspringen AWT, Swing, JavaFX & SWT 3
R Bestimmte Komponenten vom Neuzeichnen abhalten AWT, Swing, JavaFX & SWT 2
G Bild a auf Bild b, bestimmte Farbe (zb Weiß) durchsichtig AWT, Swing, JavaFX & SWT 7
F Wie bestimmte Obj. einer ContentPane abfragen und vergl? AWT, Swing, JavaFX & SWT 11
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
R nur bestimmte Daten in JTable anzeigen lassen? AWT, Swing, JavaFX & SWT 3
A Bestimmte Spalten nicht editierbar machen AWT, Swing, JavaFX & SWT 6
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
A JTable, bestimmte Zeilen blau hinterlegen AWT, Swing, JavaFX & SWT 3
K Punkte in eine bestimmte Richtung bewegen AWT, Swing, JavaFX & SWT 5
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
S JCellRenderer läuft nur einmal in bestimmte Bedingung AWT, Swing, JavaFX & SWT 5
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
V Bestimmte Spalten im JTable nicht anzeigen AWT, Swing, JavaFX & SWT 2
S Bestimmte Zellenselektion in einer JTable AWT, Swing, JavaFX & SWT 12
C Wie skaliere ich ein Image in eine bestimmte größe? AWT, Swing, JavaFX & SWT 2
M Bestimmte GUI erstellen: Layoutproblem AWT, Swing, JavaFX & SWT 17
K Objekt in eine bestimmte Zelle eines JTables legen AWT, Swing, JavaFX & SWT 3
B ComboBox: nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 5
B Eingabefelder nur für bestimmte Werte AWT, Swing, JavaFX & SWT 8
W JFileChooser; nur bestimmte Datein AWT, Swing, JavaFX & SWT 5
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
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
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

Ähnliche Java Themen

Neue Themen


Oben