Witam, napisałem program na przesunięcie kwadratu za pomocą myszy. Chciałbym zrobić tak, że za pomocą tablicy tworze kilka kwadratów zdeklarowanych tą samą nazwą i jeśli najadę na jeden z nich to będę w stanie przesunąć i zmienić jego współrzędne.
Oto kod, który napisałem:
public class Component
{
int kurX, kurY, kurWidth=3, kurHeight=3;
int kwadrX=100, kwadrY=100;
int rectangles[][] = {{0, 20, 50, 50},
{100, 50, 50, 50}};
Rectangle kwadr;
boolean kolizja;
public static void main(String[] args)
{
Component gui = new Component();
gui.start();
}
public void start()
{
JFrame okno = new JFrame();
Rysowanie panel = new Rysowanie();
okno.setLayout(null);
panel.setLayout(null);
panel.setBackground(Color.WHITE);
panel.setBounds(0, 0, 400, 400);
okno.getContentPane().add(panel);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okno.setResizable(false);
okno.setSize(400, 400);
okno.setVisible(true);
panel.addMouseMotionListener(new Mysz());
panel.addMouseWheelListener(new Mysz());
}
public class Rysowanie extends JPanel
{
public void paintComponent(Graphics g)
{
Rectangle kursor = new Rectangle(kurX, kurY, kurWidth, kurHeight);
g.setColor(Color.WHITE);
g.fillRect(0, 0, 400, 400);
for(int i = 0; i<rectangles.length; i++){
kwadr = new Rectangle(rectangles[i][0], rectangles[i][1], 50, 50);
g.setColor(Color.BLUE);
g.fillRect(kwadr.x, kwadr.y, kwadr.width, kwadr.height);
}
g.setColor(Color.RED);
g.fillRect(kursor.x, kursor.y, kursor.width, kursor.height);
if(kursor.intersects(kwadr))
{
kolizja = true;
g.setColor(Color.GREEN);
g.fillRect(kursor.x, kursor.y, kursor.width, kursor.height);
}
else
kolizja = false;
repaint();
}
}
public class Mysz extends MouseAdapter
{
public void mouseMoved(MouseEvent kurEv)
{
kurX = kurEv.getX()-kurWidth/2;
kurY = kurEv.getY()-kurHeight/2;
}
public void mouseDragged(MouseEvent ev)
{
kurX = ev.getX()-kurWidth/2;
kurY = ev.getY()-kurHeight/2;
if(kolizja)
{
if(rectangles[0][0] < ev.getX() && rectangles[0][0] + 50 > ev.getX() && rectangles[0][1] < ev.getY() && rectangles[0][1] + 50 > ev.getY()){
rectangles[0][0] = ev.getX()-25;
rectangles[0][1] = ev.getY()-25;
}
else if(rectangles[1][0] < ev.getX() && rectangles[1][0] + 50 > ev.getX() && rectangles[1][1] < ev.getY() && rectangles[1][1] + 50 > ev.getY()){
rectangles[1][0] = ev.getX()-25;
rectangles[1][1] = ev.getY()-25;
}
}
}
}
}
Dodatkowo problemem jest również to, że program jako
kwadr
widzi tylko ostatni narysowany kwadrat.
Czyli
kwadr = new Rectangle(rectangles[0][0], rectangles[0][1], 50, 50);
nie jest przedstawiany jako kwadr tylko jako "nic".