首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >绘制以显示参数对象的位置

绘制以显示参数对象的位置
EN

Stack Overflow用户
提问于 2010-12-07 13:13:21
回答 2查看 247关注 0票数 0

我们试图在世界地图的背景图像上绘制不同x-y坐标位置上的圆形对象。我们有一个名为integers的类,它接受x和y坐标的两个整数。

代码语言:javascript
代码运行次数:0
运行
复制
Territory(String name, int x , int y)...

我们还有一个面板类(扩展JPanel),它使用被覆盖的paintComponent方法将背景图像绘制到JPanel上。然而,我们不能想出一种方法来传递来自另一个类的坐标值和其他属性,而不破坏覆盖,或者是否有其他方法在与背景图像相同的面板上绘制。

这是我们在面板类中调用的paintComponent方法的代码。

代码语言:javascript
代码运行次数:0
运行
复制
 protected void paintComponent(Graphics g){
  super.paintComponent(g);
         if (image != null)
 g.drawImage(image, 0,0,this.getWidth(),this.getHeight(),this);
EN

回答 2

Stack Overflow用户

发布于 2010-12-07 13:42:26

自定义绘制都应该在相同的paintComponent()方法中完成。所以基本上绘制背景的面板也应该有一个像addCircleToPaint()这样的方法。圆信息应该存储在一个ArrayList (或类似的东西)中。然后在paintComponent方法中绘制图像,然后循环遍历ArrayList并绘制圆。

或者,您可以使用一种完全不同的方法并使用Layered Panes。使用一个图层作为背景,一个图层作为圆圈。

票数 2
EN

Stack Overflow用户

发布于 2010-12-07 16:59:08

下面的代码将生成此图像:

请注意,如果您想绘制真实的区域,我将使用Polygon类。

代码语言:javascript
代码运行次数:0
运行
复制
public class Test {

    static class Territory {
        String name;
        int x, y;

        public Territory(String name, int x, int y) {
            this.name = name;
            this.x = x;
            this.y = y;
        }

        public void paint(Graphics g) {
            g.drawString(name, x, y);
            g.drawOval(x - 50, y - 50, 101, 101);
        }
    }

    static class Map extends JComponent {

     Image bgImage;
        List<Territory> territories;

        public Map(List<Territory> territories) throws Exception {
            this.bgImage = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Winkel-tripel-projection.jpg/800px-Winkel-tripel-projection.jpg"));
            this.territories = territories;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            g.drawImage(bgImage, 0, 0, null);

            g.setColor(Color.RED);
            for (Territory territory : territories)
                territory.paint(g);
        }
    }

    public static void main(String... args) throws Exception {

        JFrame frame = new JFrame("Test");

        final int w = 800;
        final int h = 400;

        Random r = new Random(8208);
        List<Territory> territories = new LinkedList<Territory>();
        for (int i = 0; i < 10; i++)
            territories.add(new Territory("" + i, r.nextInt(w), r.nextInt(h)));

        frame.add(new Map(territories));

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(w, h);
        frame.setVisible(true);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4373613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档