|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2009
Messaggi: 95
|
[java] problemino
ciao ragazzi, devo svolgere un programma che comprende la gestione del mouse.
Praticamente al mio click deve apparire un cerchio con il centro nelle coordinate dove ho cliccato. Però non riesco a capire cosa sbaglio nel metodo paint visto che non mi stampa niente! Questo è il codice che ho scritto: Codice:
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class cerchiomouse extends JFrame implements MouseListener { int coox,cooy,cont=0; int r=10; Area cerchio = new Area(); public void finestra() { setSize(400,400); cerchio.addMouseListener(this); this.addMouseListener(this); setVisible(true); add(cerchio); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseClicked(MouseEvent e) { cont = cont+1; coox=e.getX(); cooy=e.getY(); repaint(); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} class Area extends Canvas { public void paint(Graphics g) { if (cont>0) { g.setColor(Color.black); g.fillOval(coox+r,cooy+r,r*2,r*2); } } } } praticamente io clicco dentro la finestra e grazie a bluej vedo i valori delle variabili, queste effettivamente cambiano quindi non avrei un problema di coordinate però non mi mostra niente, da cosa può dipendere? Ultima modifica di DimeCfh91 : 26-02-2010 alle 15:49. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Dipende dal fatto che la tua classe Area estende Canvas e Canvas fa parte di AWT, mentre quando invochi il metodo repaint() nel tuo mouse listener, stai chiamando il metodo repaint di JFrame, che fa parte di Swing.
Il "Painting Framework" di AWT è diverso da quello di Swing; i meccanismi per disegnare sono diversi fra loro. Se vuoi approfondire puoi cominciare leggendo questo: http://java.sun.com/products/jfc/tsc...ing/index.html Per quanto riguarda il tuo codice, io vedo due opzioni: 1 - nel mouse listener invece del repaint() di JFrame [che, per quanto detto sopra, non provoca l'update() del Canvas, perchè AWT] chiami il repaint() del tuo Canvas: Codice:
... public void mouseClicked(MouseEvent e) { cont = cont+1; coox=e.getX(); cooy=e.getY(); cerchio.repaint(); } ... 2 - Fai estendere alla tua classe Area la classe JPanel [JPanel è Swing] e ridefinisci il metodo paintComponent(Graphics g). Nel tuo metodo, come prima cosa richiami il paintComponent della classe padre [i dettagli li trovi nell'articolo che ti ho linkato], quindi esegui il tuo rendering: Codice:
class Area extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); if (cont>0) { g.setColor(Color.black); g.fillOval(coox+r,cooy+r,r*2,r*2); } } }
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2009
Messaggi: 95
|
grazie mille! mi è bastata la prima opzione! Mi è stata molto importante questa esperienza
![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:34.