ciao, ho dei problemi con un esercizio che riguarda gli eventi del mouse e spero in un vostro aiuto ^^ allora prima di tutto guardate queste due classi.
la classe che estende una JComponent:
codice:
package grafica;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;
public class CerchioMouseComponent extends JComponent {
public CerchioMouseComponent()
{
circle = new Ellipse2D.Double(0, 0, 100, 100);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.draw(circle);
}
public void moveTo(double x, double y, double raggio)
{
circle.setFrame(x, y, raggio, raggio);
repaint();
}
private Ellipse2D.Double circle;
}
e questa invece è la classe con il main (dove è implementato anche il listener):
codice:
package grafica;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CerchioMouseViewer {
public static void main(String[] args) {
JFrame frame = new JFrame();
JLabel label = new JLabel("Raggio");
final JTextField field = new JTextField(5);
field.setText("" + 200);
JPanel panel = new JPanel();
panel.add(label);
panel.add(field);
frame.add(panel);
JFrame frame1 = new JFrame();
final CerchioMouseComponent component = new CerchioMouseComponent();
class MousePressListener implements MouseListener
{
public void mousePressed(MouseEvent event)
{
double raggio = Double.parseDouble(field.getText()) / 2;
double x = event.getX() - raggio / 2;
double y = event.getY() - raggio / 2;
component.moveTo(x, y, raggio);
}
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}
MouseListener listener = new MousePressListener();
component.addMouseListener(listener);
frame1.add(component);
frame.setSize(150, 68);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(300, 400);
frame1.setLocation(200, 0);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame1.setVisible(true);
}
}
in pratica ci sono due frame, un un piccolo frame dove viene settata la dimensione del raggio e in un secondo frame più grande c'è disegnato un cerchio iniziale, appena si clicca con il mouse su un punto di questo secondo frame, il cerchio viene spostato (con il centro nel punto cliccato) e viene anche ridimensionato il raggio (nel caso si cambia il valore).
ora vorrei apportare delle modifiche che però non riesco a fare:
1) vorrei che il cerchio iniziale non fosse visibile e appena si clicca la prima volta con il mouse sul frame compare (naturalmente con il centro nel punto cliccato).
2) nel mio caso ogni volta il cerchio viene spostato, ma vorrei fare in modo che ad ogni click sul frame il cerchio precedente rimane nella sua posizione e ne compare uno nuovo nel punto cliccato, come posso fare?
spero possiate darmi una mano, grazie ^^