Я пытаюсь нарисовать несколько кругов, которые представляют страны, и когда я нажимаю на любой из этих кругов, цвет этой страны должен измениться с синего на красный, теперь, когда я запускаю программу, она не показывает ошибку, но слушатели делаютне работа.Я думаю, место, где я их прикрепил, неправильное, может кто-нибудь направить меня!
public class Algo extends JPanel
{
public String[] Names = {"Egypt", "London", "Korea", "Egypt", "London", "Egypt", "London", "Korea", "Egypt", "London"};
public int[] X = {105, 324, 190, 346, 162, 270, 196, 277, 57, 225};
public int[] Y = {110, 477, 212, 444, 207, 331, 230, 497, 470, 297};
public List<Country> Countries = new ArrayList<>();
private Color color = Color.blue;
public static void main(String[] args)
{
new Algo();
}
public Algo()
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex)
{
ex.printStackTrace();
}
JFrame frame = new JFrame("Airport");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new CountriesPane());
frame.pack();
frame.setSize(700, 700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class CountriesPane extends JPanel implements MouseListener
{
public CountriesPane()
{
for (int i = 0; i < Names.length; i++)
{
Country C = new Country(X[i], Y[i]);
C.Name = Names[i];
Countries.add(C);
}
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseReleased(MouseEvent me) {
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
@Override
public void mouseClicked(MouseEvent me)
{
Point lol = me.getPoint();
for (int i = 0; i < Countries.size(); i++)
{
if (Countries.get(i).contian(lol))
Countries.get(i).changeColor();
}
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
for (int i = 0; i < Names.length; i++)
{
Countries.get(i).paint(g2d);
g2d.drawString(" " +Names[i],Countries.get(i).x, Countries.get(i).y);
}
}
}
public class Country
{
private int height = 20;
private int width = 20;
private int x;
private int y;
private Ellipse2D shape;
private String Name;
public Country( int w, int z)
{
x = w;
y = z;
shape = new Ellipse2D.Double(w, z, width, height);
}
public boolean contian(Point x)
{
return shape.contains(x);
}
public void paint(Graphics2D g2d)
{
g2d.setColor(color);
g2d.fill(shape);
}
public void changeColor()
{
if (color == Color.BLUE)
{
color = Color.RED;
}
else
{
color = color.BLUE;
}
repaint();
}
}
}