绘制方法不绘制Java

绘制方法不绘制Java,java,Java,我的绘制方法似乎无法绘制20x20单元格。我有一个布尔数组,用于控制单元格的状态,如果为true,则调用cells paint方法,绘制单元格,但我有两个问题 一次只画一个,这很奇怪,因为我应该有一个40x40的布尔数组,这意味着我有40x40个单元格 他们实际上并没有在我点击的地方作画。我不知道这是怎么回事,因为当我得到单击的坐标时,我会立即将这些坐标作为我的x和y值放置在我的绘制方法中 Main 单元类 你做了很多错事。我的第一个建议是忘记屏幕外的图形,确保你做你想做的事情。您始终可以在后面

我的绘制方法似乎无法绘制20x20单元格。我有一个布尔数组,用于控制单元格的状态,如果为true,则调用cells paint方法,绘制单元格,但我有两个问题

  • 一次只画一个,这很奇怪,因为我应该有一个40x40的布尔数组,这意味着我有40x40个单元格

  • 他们实际上并没有在我点击的地方作画。我不知道这是怎么回事,因为当我得到单击的坐标时,我会立即将这些坐标作为我的x和y值放置在我的绘制方法中

  • Main

    单元类


    你做了很多错事。我的第一个建议是忘记屏幕外的图形,确保你做你想做的事情。您始终可以在后面创建图像。以下是一些基本准则:

    • 不要扩展
      JFrame
      。使用一个实例
    • 扩展
      JPanel
      或创建一个扩展
      JPanel
      并添加到框架实例的类
    • 然后重写
      paintComponent(g)
      ,并使用该图形上下文进行绘制
    这里有一个更早的答案可能会有所帮助

    更多信息可在关于绘画的章节中找到

    已更新。我花了几分钟才找到这个

     public void setPosition(int xi, int xj){
            x = xi;
            y = xi; // <--- should be xj
     }
    

    您可以创建自己的
    mouseListener
    类并扩展
    MouseAdapter
    。这些适配器类的目的是减少混乱,这样就不必使用空方法来满足接口需求。将类放入主类中,以便它能够访问适当的数据结构。然后只需将它的一个实例添加到目标组件的鼠标侦听器中

    你做了很多错事。我的第一个建议是忘记屏幕外的图形,确保你做你想做的事情。您始终可以在后面创建图像。以下是一些基本准则:

    • 不要扩展
      JFrame
      。使用一个实例
    • 扩展
      JPanel
      或创建一个扩展
      JPanel
      并添加到框架实例的类
    • 然后重写
      paintComponent(g)
      ,并使用该图形上下文进行绘制
    这里有一个更早的答案可能会有所帮助

    更多信息可在关于绘画的章节中找到

    已更新。我花了几分钟才找到这个

     public void setPosition(int xi, int xj){
            x = xi;
            y = xi; // <--- should be xj
     }
    

    您可以创建自己的
    mouseListener
    类并扩展
    MouseAdapter
    。这些适配器类的目的是减少混乱,这样就不必使用空方法来满足接口需求。将类放入主类中,以便它能够访问适当的数据结构。然后只需将它的一个实例添加到目标组件的鼠标侦听器中

    旁注:您的
    catch
    块应该包含一个
    break语句。中断不是偶然发生的。如果有人打断了你的线程,那是因为他们希望你停止你正在做的事情,然后干净地退出。忽略InterruptedException会使您的线程成为无法停止的流氓线程。请参阅我更新的回答:您的
    catch
    块应包含
    中断语句。中断不是偶然发生的。如果有人打断了你的线程,那是因为他们希望你停止你正在做的事情,然后干净地退出。忽略InterruptedException会使您的线程成为无法停止的流氓线程。请参阅我的更新答案哇,这是非常深入的,我已经找到了其中一些东西。我想我会完全移除集合位置,但我不需要它,因为我的数组正在处理这个问题。只需要绘制多个,而不是只存在一个,但正如您所指出的,迭代器将非常适合这样做。非常感谢您一直抽出时间如此彻底地回答!哦,抱歉,我对堆栈溢出还比较陌生,从来没有注意到它的能力,所以我很糟糕。这是你应得的。哇,这是非常深入的,其中一些东西我已经找到了。我想我会完全移除集合位置,但我不需要它,因为我的数组正在处理这个问题。只需要绘制多个,而不是只存在一个,但正如您所指出的,迭代器将非常适合这样做。非常感谢您一直抽出时间如此彻底地回答!哦,抱歉,我对堆栈溢出还比较陌生,从来没有注意到它的能力,所以我很糟糕。这至少是你应得的。
    
     public void setPosition(int xi, int xj){
            x = xi;
            y = xi; // <--- should be xj
     }
    
    Timer timer  = new Timer(0, (ev)-> frame.repaint());
    timer.setDelay(20);
    timer.start();