Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Swing,我想画几个点_Java_Swing_Drawing_2d - Fatal编程技术网

Java 使用Swing,我想画几个点

Java 使用Swing,我想画几个点,java,swing,drawing,2d,Java,Swing,Drawing,2d,。。。并对其[x y]坐标进行一些计算 我的第一个想法是使用图像作为JPanel的背景,然后注册点,但我不确定是否有办法在JPanel上标记这些点。还有我不熟悉的绘图库,但我不确定是否可以将它们与Swing结合起来 你能说出我可以用来完成任务的包/类吗?也欢迎引用已经执行此操作的代码 谢谢大家! 这里的问题有三个方面: 需要有一种方法来显示背景图像 必须能够找到鼠标被点击的点 一定有办法在面板上画出点 实现上述几点的一种方法是子类a并提供这些功能 1。在面板中显示背景图像。 首先,由于默认情况下

。。。并对其[x y]坐标进行一些计算

我的第一个想法是使用图像作为JPanel的背景,然后注册点,但我不确定是否有办法在JPanel上标记这些点。还有我不熟悉的绘图库,但我不确定是否可以将它们与Swing结合起来

你能说出我可以用来完成任务的包/类吗?也欢迎引用已经执行此操作的代码


谢谢大家!

这里的问题有三个方面:

  • 需要有一种方法来显示背景图像
  • 必须能够找到鼠标被点击的点
  • 一定有办法在面板上画出点
  • 实现上述几点的一种方法是子类a并提供这些功能

    1。在面板中显示背景图像。

    首先,由于默认情况下,
    JPanel
    没有显示背景图像的方法,因此必须有一种方法在
    JPanel
    中保存图像,然后在面板上绘制图像,这可以通过该方法执行

    实现这一点的一种方法是在类中有一个字段,该字段保存一个
    图像
    以绘制:

    class MyPanel extends JPanel {
        // Background image. Initialize appropriately.
        Image backgroundImage;
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            // Draw background image each time the panel is repainted.
            g.drawImage(backgroundImage, 0, 0, null);
        }
    }
    
    paintComponent
    中的对象与
    MyPanel
    关联,可用于执行图形操作

    2。查找单击鼠标的点。

    其次,为了检索单击鼠标的点,可以为
    MyPanel
    指定一个。在以下示例中,使用扩展的匿名内部类来最小化额外代码的编写:

    class MyPanel extends JPanel {
        // Background image. Initialize appropriately.
        Image backgroundImage;
    
        public MyPanel() {
             // Add a MouseListener which processes mouse clicks.
             this.addMouseListener(new MouseAdapter() {
                 public void mouseClicked(MouseEvent e) {
                     // Process mouse-click.
                 }
             })
        }
    
        // paintComponents method here.
    }
    
    单击鼠标时需要执行的处理可以包括在
    mouseClicked
    方法中

    3。如何在面板上绘制点。

    第三,为了找到单击鼠标的一个点,可以从方法传入的对象中获取该点:

    虽然上面的代码没有经过测试,但它应该是一个起点

    例如,如果需要绘制多个点,可能需要使用
    列表
    来保存这些点,并且可以使用
    paintComponents
    方法绘制每个点

    如果单击鼠标时需要执行其他处理,则可以向
    mouseClicked
    方法添加其他代码

    额外资源:


    感谢zedoo在评论中指出,在重写
    paintComponent
    方法时,应调用
    super.paintComponent

    子类化JPanel并重写方法paintComponent:

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
    
    }
    

    在方法中,可以使用传递给它的图形对象的方法。每次需要重新绘制面板时,都会调用此方法,因此您需要将点存储在数组中,然后在paintComponent中读取并绘制每个点。

    如果您需要重量级组件(AWT),您可能会发现此方法很有用,本教程介绍了如何扩展Canvas类来绘制内容。

    根据您的要求,提供了一些关于如何显示背景图像的建议


    然后给出了一些在需要向图像添加自定义点时如何进行自定义绘制的想法。

    在覆盖paintComponent时,应确保绘制孔组件,方法是调用super.paintComponent()或用其大小的矩形填充孔组件(我想这两个选项对于JPanels来说相当相等)
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
    
    }