Domanda

Sto tentando di creare un'applet Java che mi consentirà di disegnare una struttura di dati del grafico in un'area di disegno. Lo farò facendo clic sul punto in cui voglio creare i nodi e facendo clic sui nodi per collegarli. Il problema è che non riesco a far funzionare correttamente il metodo paint () . Aggiungo nuovi nodi al grafico (e ai quadrati nell'area di disegno) all'interno del metodo mousePressed (MouseEvent e) utilizzando,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Tutto funziona bene, fino a quando non ridimensiono la finestra, e poi tutti i rettangoli riempiti scompaiono. Ho ignorato il metodo di pittura solo con un metodo vuoto, ma succede sempre la stessa cosa. Non riesco ad aggiungere i comandi fillRect all'interno di paint () perché non so quali rettangoli esistono finché l'utente non interagisce con esso usando il mouse.

Come posso usare g.fillRect () all'interno dei metodi di ascolto del mouse e farli rimanere attaccati?

È stato utile?

Soluzione

Il problema è che il punto in cui stai disegnando non è persistente. In qualsiasi momento, puoi perdere tutto ciò a cui sei attratto. Il metodo paint (Grafica) viene chiamato quando ciò accade. O dovrai riverniciare l'intera immagine ogni volta che ciò accade, oppure dovrai mettere da parte una tela per disegnare e copiare i contenuti nella Grafica dell'applet secondo necessità.

Ecco come creare e disegnare su un'immagine:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Quindi, nel tuo metodo di disegno, usa il metodo DrawImage (...) di Grafica per visualizzare l'immagine che hai creato.

Altri suggerimenti

Non so se lo sto leggendo correttamente, ma perché non memorizzare la posizione dell'ultimo clic in una variabile da dipingere in seguito, quando viene chiamato il metodo paint ()?

Devi ignorare il listener di azioni di ridimensionamento della finestra e chiamare ridipingere al suo interno.

La grafica è temporanea. Quando una regione si sporca, verrà ridipinta.

Il modo migliore è creare un'immagine bufferizzata, disegnarla con il mouse premuto e chiamare riverniciare.
Quando viene chiamato paint, disegna l'immagine sull'oggetto grafico passato. In questo modo non è necessario memorizzare i rettangoli e si ottiene un buffer che migliorerà le prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top