Rechtecke usw mit Paint auf Panel zeichnen

Status
Nicht offen für weitere Antworten.

thomas.g

Bekanntes Mitglied
Hallo, Leute

Ich bräuchte ganz dringend einen Tipp,

Ich habe auf ein Panel ein event gelegt, dass wenn der User irgendwo klickt, dort ein Rechteck zeichnet, das geht auch, doch bisher habe ich das so gemacht:

Das Image zeichnen und an der gewünschten stelle ein Rechteck dazu (mit paintComponent) danach habe ich das neue Bild über das alte gespeichert (nicht in einer Datei sondern Image alt = neu)
Bei jedem Click wird also zuerst das alte gezeichnet und dann das Rechteck dazu.

Bei größeren Bilder dauert das aber und somit verzögert sich da alles und genau das möchte ich vermeiden!
Zeichnet man allerdings nur das Rechteck, so verschwindet dann das Bild und nur das Rechteck ist da.

Meine Frage also,

Wie kann man sachen auf ein Panel dazuzeichnen, ohne dass das vorherige dabei verloren geht?

Danke, Tholmas G
 
B

Beni

Gast
Da du mit einem Image arbeitest, kannst du eine Graphics herstellen lassen, welche direkt auf diesem Bild zeichnet:
Code:
Image image = ...
Graphics g = image.createGraphics();
g.drawIrgendwas(...);
g.dispose();
So kannst du jederzeit neue Elemente auf das Bild zeichnen.
 

thomas.g

Bekanntes Mitglied
Was muss ich jetzt also bei diesem Code ändern, damit ich das Bild nicht immer neu zeichnen muss


Code:
public class ImagePaneView extends JPanel
{
    
    /** Creates a new instance of ImagePanel */
    public Image image;
    public int drawSome = 0;
    public int x =0;
    public int y =0;
    public ImagePaneView(Image img)
    {
        this.image=img;
        
      addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
               
               drawSome = 1;
               x=evt.getX();
               y=evt.getY();
               repaint();
            }
            
            
        });
        
        
        
        
        
        
    }
    public void draw(int x, int y)
    {
        Graphics fg = null;
        super.paintComponent(fg);
        fg.drawOval(x, y, 10, 10);
    }
    public void paint(Graphics g)
    {
        // super.paint(g);
        
      Graphics2D g2d=(Graphics2D)g;
        super.paintComponent(g2d);
        if(drawSome==0)
        {
            g2d.drawImage(image,0,0,image.getWidth(this),image.getHeight(this),this);
              
        }
        
        if(drawSome==1)
        {
         
            g2d.drawOval(x,y, 20,20);
        }
       
        
        
    }
    
    
}
 

Sky

Top Contributor
Du könntest die Objekte, die gezeichnet werden müssen in einer Collection speichern. Das Zeichen würde dann innerhalb der paintComponent-Methode mittels iteration über die Collection geschehen.

Ein Beispiel:
Gegeben sei die Klasse 'Rechteck':
Code:
class Rechteck {
  private Point startPoint;
  private int heigth;
  private int weight;

  public Rechteck( Point p, int h, int w ) {
    // Vars füllen
  }

  // Getter und setter dazu
}

Diese werden nun in eine Collection (z.B. ArrayList) gehangen:
Code:
//...
Collection c = new ArrayList();
//...
c.add( new Rechteck( ... ) );
//...

und innerhalb von Paint gezeichnet:
Code:
protected void paintComponent(Graphics g) {
  Iterator it = c.iterator();
  while (it.hasNext()) {
    Rechteck r = (Rechteck)it.next();
    g.drawRect( ... );
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Überlappende gebogene Rechtecke Allgemeine Java-Themen 1
T 2D-Grafik Java Applet Rechtecke und Kreise Allgemeine Java-Themen 1
S Outline um Rechtecke finden..? Allgemeine Java-Themen 4
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
S Paint Component Problem Allgemeine Java-Themen 4
S Array Fehler in Paint-Methode Allgemeine Java-Themen 2
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
Developer_X Paint Editor Programm Allgemeine Java-Themen 3
MQue update/paint Allgemeine Java-Themen 7
J Java und Paint? Allgemeine Java-Themen 2
H Sinusähnliche Kurve mit Paint zeichnen! Allgemeine Java-Themen 3
M Frage zur Paint()-Methode Allgemeine Java-Themen 3
conan2 Performance von paint() Allgemeine Java-Themen 2
R Übergabe und Autostart von Paint Allgemeine Java-Themen 4
B Java "paint"? Allgemeine Java-Themen 3
J Array an paint übergeben Allgemeine Java-Themen 6
J Fenster mit paint Methode selbst zeichnen Allgemeine Java-Themen 3
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
Thallius Swing Merkwürdiges Verhalten beim Panel Tausch Allgemeine Java-Themen 3
S Panel zur Dateiendarstellung wie in einem Explorer Allgemeine Java-Themen 12
P Font aus PDF extrahieren -> im Panel anzeigen Allgemeine Java-Themen 3
R Panel mit 8 gleich großen "fenstern" Allgemeine Java-Themen 11
S TextDatei in Panel anzeigen Allgemeine Java-Themen 10
M RSS Feeder Panel Probleme mit Tabs Allgemeine Java-Themen 3
G AWT Panel wird nicht dargestellt Allgemeine Java-Themen 3
A gezeichnetes Objekt auf Panel identifizieren Allgemeine Java-Themen 5
F Panel wird nicht angezeigt Allgemeine Java-Themen 2
G von großem Panel auf ein kleines Panel mappen Allgemeine Java-Themen 6
MQue Popup- Menue- trennen von Panel und Aktion Allgemeine Java-Themen 6
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
H Problem beim Malen auf ein Panel Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
G Panel einer Klasse in einer anderen anzeigen Allgemeine Java-Themen 4
C Hilfe! Java Control Panel & Limewire Problem! Allgemeine Java-Themen 3
J Panel-Hintergrundbild Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben