Witam, mam pewien problem z aplikacją okienkową. Chciałbym użyć metody do przesuwania obiektów, lecz jeśli w JFrame mam zadeklarowany JLabel z ikoną która służy mi za zdjęcie tła, to albo program nie widzi mojego JPanela lub jest schowany za obrazkiem tła (w zależności od miejsca implementacji).
public class MyFrame extends JFrame{
DragPanel dragPanel = new DragPanel();
private JLabel background;
MyFrame(){
this.add(dragPanel);
this.setTitle("Drag");
this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon image = new ImageIcon("C:\\Users\\Ja\\Documents\\creditcarddrag.png");
background = new JLabel();
background.setIcon(image);
background.setBounds(0,0,1000,880);
add(background);
this.setVisible(true);
}
}
public class DragPanel extends JPanel{
ImageIcon image = new ImageIcon("C:\\Users\\Ja\\Documents\\creditcarddrag.png");
ImageIcon img = new ImageIcon("C:\\Users\\Ja\\Documents\\creditcard.png");
final int WIDTH = image.getIconWidth();
final int HEIGHT = image.getIconHeight();
Point imageCorner;
Point prevPt;
JLabel cos;
DragPanel(){
imageCorner = new Point(0,0);
ClickListener clickListener = new ClickListener();
DragListener dragListener = new DragListener();
this.addMouseListener(clickListener);
this.addMouseMotionListener(dragListener);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
image.paintIcon(this, g, (int)imageCorner.getX(), (int)imageCorner.getY());
}
private class ClickListener extends MouseAdapter{
public void mousePressed(MouseEvent e) {
prevPt = e.getPoint();
}
}
private class DragListener extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
Point currentpt = e.getPoint();
if (
(e.getPoint().getX() < ((int) imageCorner.getX() + WIDTH) &&
e.getPoint().getY() < (int) (imageCorner.getY() + HEIGHT))&&
(e.getPoint().getX() > (int) imageCorner.getX() &&
e.getPoint().getY() > (int) imageCorner.getY())) {
imageCorner.translate(
(int) (currentpt.getX() - prevPt.getX()),
(int) (currentpt.getY() - prevPt.getY())
);
prevPt = currentpt;
}
repaint();
}
}
}