Ola pessoal,
tenho um codigo q me permite fazer algumas ações com um retangulo, q mais pra frente vou usar suas medidas pra recortar uma imagem.
com o seguinte codigo consigo faze-lo movimentar dentro de um jFrame:
package mousetracker;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class MouseTracker extends JFrame implements MouseListener{
private int xValue = 0, yValue = 0;
private int iniciox = 0, inicioy = 0;
private int fimx = 0, fimy = 0;
public int condicao = 0;
public int inicio = 0;
Rectangle rectAtual = new Rectangle();
/** Creates a new instance of MouseTracker */
public MouseTracker()
{
super("Demonstrating Mouse Events");
addMouseListener(this);
setSize( 400, 300);
show();
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
jPanel3MouseMoved(evt);
}
public void mouseDragged(java.awt.event.MouseEvent evt) {
jPanel3MouseDragged(evt);
}
});
}
//Tratadores de evento de MouseListener
public void mouseClicked(MouseEvent e)
{
xValue = e.getX();
yValue = e.getY();
System.out.println("xValue: "+xValue);
System.out.println("yValue: "+yValue);
condicao = 2;
inicio = 1;
repaint();
// mark();
}
public void mousePressed(MouseEvent e)
{
iniciox = e.getX();
inicioy = e.getY();
System.out.println("Inicio x: "+iniciox);
System.out.println("Inicio y: "+inicioy);
repaint();
}
public void mouseReleased(MouseEvent e)
{
fimx = e.getX();
fimy = e.getY();
System.out.println("Inicio do retangulo: ["+(fimx - 60)+","+(fimy - 70)+"]");
//System.out.println("Fim y: "+(fimy - 70));
}
public void mouseEntered(MouseEvent e)
{
if (inicio == 0)
condicao = 1;
/* else
condicao = 0;*/
}
public void mouseExited(MouseEvent e)
{
// statusBar.setText("Mouse outside the window");
}
public void paint (Graphics g)
{
g.setColor(Color.blue);
g.clearRect(0, 0, this.getWidth(),this.getHeight());
if(condicao > 0){
Rectangle box = cortarRect(rectAtual);
box.x = rectAtual.x;
box.y = rectAtual.y;
g.drawRect(box.x - 60, box.y - 70, box.width - 1, box.height - 1);
}
}
Rectangle cortarRect(Rectangle miRect){
int x = miRect.x;
int y = miRect.y;
return new Rectangle(x, y, 120, 140);
}
private void jPanel3MouseMoved(MouseEvent evt) {
rectAtual.x = evt.getX();
rectAtual.y = evt.getY();
if (condicao == 1)
repaint();
}
private void jPanel3MouseDragged(MouseEvent evt) {
rectAtual.x = evt.getX();
rectAtual.y = evt.getY();
if (condicao == 2)
repaint();
}
public void mark()
{
/* java.awt.Image image = ((javax.swing.ImageIcon) icon).getImage();
java.awt.image.FilteredImageSource fis = new java.awt.image.FilteredImageSource(
image.getSource(), new java.awt.image.CropImageFilter((int)(xValue), (int)(yValue), 150, 200)
);
image = null;
image = java.awt.Toolkit.getDefaultToolkit().createImage(fis);
*/
}
public static void main(String[] args)
{
MouseTracker app = new MouseTracker();
app.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
}
A minha dificuldade é fazer essas açoes acontecerem apenas dentro de um jpanel.
Parece q o metodo repaint esta fazendo sumir todos os componentes do frame.
Alguem sabe como posso fazer pra funcionar normalmente dentro do jpanel sem eu perder os outros componentes do frame?