Hi,
ich habe ein kleines Problem und hoffe jemand hier hat eine Lösung für mich.
Ich will ein Rechteck Zeichnen wenn mit gedrückter Maustaste über ein Panel zieht.
(drag)
Dies funktioniert auch wenn ich die Paint Methode überschreibe
Beispiel:
Ich will genau dieses Verhalten haben aber ohne das ich die "Paint Methode" überschreiben muss.
Beispiel das flackert:
weiß jemand woran das liegt und wie ich das verhindern kann?
Danke schonmal
ich habe ein kleines Problem und hoffe jemand hier hat eine Lösung für mich.
Ich will ein Rechteck Zeichnen wenn mit gedrückter Maustaste über ein Panel zieht.
(drag)
Dies funktioniert auch wenn ich die Paint Methode überschreibe
Beispiel:
Code:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JPanSelectionTest extends JPanel implements MouseListener, MouseMotionListener{
JButton bt = new JButton();
int x = 0;
int y = 0;
boolean moving = false;
public JPanSelectionTest(){
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
if(moving){
Graphics2D g2D = (Graphics2D)g;
g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f));
g2D.setColor(Color.RED);
g2D.fillRect(20, 20, x-20, y-20);
System.out.println("kk");
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
this.moving = false;
this.repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
this.moving = true;
this.x = e.getX();
this.y = e.getY();
this.repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
JFrame fr = new JFrame();
fr.setSize(800,600);
fr.add(new JPanSelectionTest());
fr.setVisible(true);
}
}
Beispiel das flackert:
Code:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JPanSelectionLagTest extends JPanel implements MouseListener, MouseMotionListener{
public JPanSelectionLagTest(){
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
this.repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
this.repaint();
Graphics2D g2D = (Graphics2D)this.getGraphics();
g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f));
g2D.setColor(Color.RED);
g2D.fillRect(20, 20, e.getX()-20, e.getY()-20);
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
JFrame fr = new JFrame();
fr.setSize(800,600);
fr.add(new JPanSelectionLagTest());
fr.setVisible(true);
}
}
Danke schonmal