当前位置: 首页 > 知识库问答 >
问题:

在图像中放置标记

苏鹏鹍
2023-03-14

我写了一个代码,在选项卡式窗格中显示图像。我的代码如下所示

  class tracker extends JPanel 
  {
       String imageFile = "areal view.JPG";
       public tracker()
       {
          super();
       }

       public tracker(String image)
        {
             super();
              this.imageFile = image;
        }
       public tracker(LayoutManager layout)
           {
              super(layout);
            }
       public void paintComponent(Graphics g)
            {
                             /*create image icon to get image*/
               ImageIcon imageicon = new ImageIcon(getClass().getResource(imageFile));
               Image image = imageicon.getImage();

                             /*Draw image on the panel*/
                super.paintComponent(g);

                 if (image != null)
                     g.drawImage(image, 100, 50, 700, 600, this);
                   //g.drawImage(image, 100, 50, getWidth(), getHeight(), this);
            }
  }

好吧,然后我需要在图像的特定位置放置一个标记…如何在上面放置标记…?

任何关于在图像中放置标记的帮助都是受欢迎的....

共有1个答案

谭献
2023-03-14

您可以尝试在图形上绘制一些东西

您不应该在paint方法中加载图像,这只会减慢重新绘制的速度,并可能消耗更多资源。加载图像一次并维护对它的引用。

class Tracker extends JPanel 
{
   String imageFile = "areal view.JPG";
   private Image image;

   public Tracker()
   {
      super();
      init();
   }

   public Tracker(String image)
   {
       super();
       this.imageFile = image;
       init();
   }

   public Tracker(LayoutManager layout)
   {
       super(layout);
       init();
   }

   protected void init() {
       ImageIcon imageicon = new ImageIcon(getClass().getResource(imageFile));
       image = imageicon.getImage();
   }

   public void paintComponent(Graphics g)
   {
       super.paintComponent(g);
       if (image != null) {
           g.drawImage(image, 100, 50, 700, 600, this);
           g.setColor(Color.RED);
           g.fillOval(290, 215, 20, 20);
       }                  
    }
}

我建议您看看执行自定义绘画和2D图形

从您的注释来看,我建议使用JLayeredPane。它将允许您在图像上的任意位置放置自定义组件。

public class Tracker {

    public static void main(String[] args) {
        new Tracker();
    }

    public Tracker() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                // 247x178

                MapPane mapPane = new MapPane();
                Marker marker = new Marker();
                marker.setToolTipText(
                                "<html><table><tr><td valign=top><img src='" + getClass().getResource("/Earth.png") + "'>" +
                                "</td><td valign=top><b>Earth</b><br>Mostly Harmless</td></tr></table></html>"
                                );

                marker.setSize(marker.getPreferredSize());
                marker.setLocation(237, 188 - marker.getHeight());
                mapPane.add(marker);

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(mapPane);
                frame.setResizable(false);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class Marker extends JLabel {

        public Marker() {
            try {
                setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Marker.png"))));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }

    public class MapPane extends JLayeredPane {

        private BufferedImage map;

        public MapPane() {
            try {
                map = ImageIO.read(getClass().getResource("/SolarSystem.jpg"));
            } catch (Exception e) {
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return map == null ? super.getPreferredSize() : new Dimension(map.getWidth(), map.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (map != null) {
                g.drawImage(map, 0, 0, this);
            }
        }

    }

}
 类似资料:
  • 问题内容: 我已经将图像内的边框设置为none。我现在想将该图像放在其包含div的中心。我曾尝试使用,但没有用。 我敢肯定,我忽略了一些愚蠢的事情,但是我想得到stackoverflow社区的帮助,所以这并不需要我花一个小时盯着屏幕来弄清楚。非常感谢。 这是CSS … 问题答案: 尝试将图片的属性设置为:

  • 所以我正在准备一个页面,其中有一个谷歌地图,有两个形式,即纬度和经度,和一个提交按钮。

  • 我正在做解析。com Android应用程序中,我将预定义/默认图像放入ParseFile并发送到服务器。现在我想把一张图片放在图库中的用户选择上。 我的代码如下:

  • 问题内容: 在NetBeans上运行时,以下代码可以正常工作。 但是,一旦将其内置到Jar文件中,该图标就消失了。 任何人都知道出什么问题了吗?我意识到我必须将图标图像放在根目录中,但是,在编译为JAR之后,图标消失了。 谢谢你的帮助 … 大家好,以下代码解决了这个问题, 一旦编译成jar文件,它就可以工作。 问题答案: 用 代替。 注意: 仅当图像位于jar文件的根目录中时,此行才有效。如果不是

  • 问题内容: 这是我用于在Excel中将图像作为图标插入的方法: 这是我使用此方法创建图标的方法: 是否可以在此图标中放置一个超链接以转到同一电子表格中的另一个工作表或网站? 我读到的内容显然没有POI支持,但是可以使用底层的低级API来实现。但是我还不能真正成功地使用它。 有什么建议? 问题答案: 如果只支持可以,那么实际上可以使用底层的低级对象来完成。 如何开始?使用其中包含超链接的图片来创建工

  • 问题内容: 改变的大小的图像在GWT部件改变所述图像元素的大小,但不重新调整屏幕上的图像。因此,以下操作将无效: 这是因为GWT 通过使用CSS 将HTML 元素的设置为图像来实现其Image小部件。 如何获得要调整尺寸的实际图像? 问题答案: 我看到了此博客条目,该条目通过使用GWT DataResource而不是ImageResource解决了问题。事实证明,如果您按以下方式使用它,则Imag