Hallo Leute,
beschäftige mich noch nicht so lange mit gui's und wollte ein Beispiel aus dem Internet nachbilden. Eigentlich soll nur ein Rechteck via Mouse Drag über den Bildschirm gezogen werden können, auf rotem JPanel. Leider wird der Panel gar nicht erst angezeigt nur der Frame dadrunter ist sichtbar. Das Rechteck lässt sich zwar ziehen, aber dabei bleiben Kopien des Rechtecks auf der Zeichenfläche übrig ...
Ich blick da nicht durch ... :bahnhof:
Anfänger dankt Helfenden
Hier der Code :
beschäftige mich noch nicht so lange mit gui's und wollte ein Beispiel aus dem Internet nachbilden. Eigentlich soll nur ein Rechteck via Mouse Drag über den Bildschirm gezogen werden können, auf rotem JPanel. Leider wird der Panel gar nicht erst angezeigt nur der Frame dadrunter ist sichtbar. Das Rechteck lässt sich zwar ziehen, aber dabei bleiben Kopien des Rechtecks auf der Zeichenfläche übrig ...
Ich blick da nicht durch ... :bahnhof:
Anfänger dankt Helfenden
Hier der Code :
Java:
package draganddrop;
public class Main {
public static void main(String[] args) {
new Frame();
}
}
package draganddrop;
import javax.swing.*;
import java.awt.*;
public class Frame extends JFrame {
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
public Frame() {
setSize(size);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBackground(Color.green);
DropPanel panel = new DropPanel();
this.getContentPane().add(panel);
setVisible(true);
}
}
package draganddrop;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.MouseInputAdapter;
public class DropPanel extends JPanel {
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle quadrat = new Rectangle(100, 100, 150, 75);
public DropPanel(){
setBackground(Color.red);
setSize(size);
this.setVisible(true);
new DragController(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
g.setColor(Color.yellow);
g.fillRect(quadrat.x, quadrat.y, quadrat.width, quadrat.height);
}
public void setQuadrat(Point p) {
quadrat.setLocation(p);
repaint();
}
class DragController extends MouseInputAdapter {
DropPanel panel;
Point move = new Point();
boolean dragging = false;
public DragController(DropPanel panel){
this.panel = panel;
panel.addMouseListener(this);
panel.addMouseMotionListener(this);
}
@Override
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
if(quadrat.contains(p)) {
move.x = p.x - quadrat.x;
move.y = p.y - quadrat.y;
dragging = true;
}
}
@Override
public void mouseReleased(MouseEvent e) {
dragging = false;
}
@Override
public void mouseDragged(MouseEvent e) {
if(dragging) {
move.x = e.getX() - move.x;
move.y = e.getY() - move.y;
panel.setQuadrat(move);
}
}
}
}
Zuletzt bearbeitet von einem Moderator: