java - 我将如何检查用户是否单击了 fillRect 生成的正方形并在单击时执行操作?

标签 java swing jframe graphics2d mouselistener

我正在用 Java 编写一个关于躲避橙色红色方 block 并单击它们将其删除的游戏。但是,我需要弄清楚如何编写代码来在首先单击 fillRect 时执行操作,如果这是不可能的,那么至少有一种方法可以确定使用的位置单击或检查他们是否总体上单击了某个区域?

public void mouseClicked(MouseEvent e) { System.out.println(e.getXOnScreen()); }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { } 
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { } 

最佳答案

ClickCanvas.java

public final class ClickCanvas extends Canvas
{
 private final List<Rectangle> squares=new ArrayList();

 ClickCanvas()
 {
  addMouseListener(new OnClick());

  for(int x=5;x<=305;x+=150)//3 by 3 grid of squares to click
  {
   squares.add(new Rectangle(x,5,50,50));
   squares.add(new Rectangle(x,155,50,50));
   squares.add(new Rectangle(x,305,50,50));
  }
 }

 @Override
 public void paint(Graphics g) //Painting Your Squares Here Called By Swing
 {
  super.paint(g);

  Dimension size=getSize();

  g.setColor(Color.WHITE);

  g.fillRect(0,0,size.width,size.height);

  g.setColor(Color.ORANGE);

  squares.forEach(square->g.fillRect(square.x,square.y,square.width,square.height));
 }

 private class OnClick extends MouseAdapter
 {
  @Override
  public void mousePressed(MouseEvent m)
  {
   squares.removeIf(square->square.contains(m.getPoint()));//You do Your Action Here in this case i remove the square if it contains the mouse point

   repaint(); //Repaint The Canvas To Now Redraw Remaining Squares

   if(squares.isEmpty())
   {
    JOptionPane.showMessageDialog(null,"Congrats You Win");

    System.exit(0);
   }
  }
 }
}

主类

public class ClickTest 
{
 public static void main(String args[])
 {
  JFrame frame=new JFrame("Click Test");

  frame.add(new ClickCanvas());

  frame.setSize(400,450);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.setVisible(true);
 }
}

我希望它能让您了解自己想在游戏中做什么

关于java - 我将如何检查用户是否单击了 fillRect 生成的正方形并在单击时执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61279920/

相关文章:

javax.swing.tree.TreePath 选择 XPath 查询字符串

java - 多个自定义 JComponents,只显示一个

java - 单击鼠标关闭 JFrame

java - ProgressDialog 仅显示一次,然后不再起作用

java - 多线程更新表面 View Canvas

java - 在 eclipse RCP 中发布选择

java - 添加java 2d组件后如何刷新JFrame

java - 有没有一种方便的方法将逗号分隔的字符串转换为 hashmap

java - JFrame、删除和创建 JPanel

java - 如何在不关闭主程序的情况下关闭jframe?