首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JPanel中重新绘制查询

在JPanel中重新绘制查询
EN

Stack Overflow用户
提问于 2013-03-25 16:23:22
回答 3查看 90关注 0票数 0

我是一个经验不足的程序员(除非你算上了70年代初的PDP-8)程序员在与封闭类中的重绘方法做斗争。

该类的目的是显示局部地区的航空地图,然后在地图上画小圆圈,绘制飞机的飞行路线。随着时间的推移,地图将显示最常用的路径,其次是在当地机场降落的飞机。

问题是,经过一天的努力,我仍然不能使重新油漆工作。

与图形有关的类是:

代码语言:javascript
复制
package com.slatter.radarboxconnect;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

/**
* A RADAR Plotting Frame 
*/
public class DrawPanel extends JPanel {

    public static BufferedImage img = null; // Create a BufferedImage object
    public int cx = 700,cy = 500,cdia = 70; // Aircraft Echo parameters

    public DrawPanel() {

        // Create Graphic of map
        try {
            img = ImageIO.read(new File("full.jpeg"));  //Get the map
        } catch (IOException e){
        }
    }

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

        //Draw the Map and a sample red dot
        g.drawImage(img, 0, 0, 1400, 1000, 0, 0, 1400, 1000, null);
        g.setColor(Color.red);
        g.drawOval(cx,cy, cdia, cdia);
        g.fillOval(cx,cy, cdia, cdia);
    }

    public void DpPlotEcho(int x, int y, int pdia) {

         cx=x;
         cy=y;
         cdia=pdia;
         repaint(cx,cy,cdia,cdia);
    }

}

我在一个单独的框架中创建这个面板,并从应用程序的主体调用DpPlotEcho()方法。

该映射和屏幕中心的一个小红点显示正确,但在试图通过DpPlotEcho()方法重新绘制时没有发生任何更新。

所以有两个问题:

  1. 我如何说服重新油漆工作(主要问题)和
  2. 我如何确保所有的点都留在屏幕上。
EN

回答 3

Stack Overflow用户

发布于 2013-03-25 16:33:42

我如何说服重新油漆工作(主要问题)

每次更改要为组件绘制的数据时,只需在组件上调用repaint()即可。然后paintComponent()方法将重新绘制整个组件。

我如何确保所有的点都留在屏幕上。

每次调用paintComponent()方法时,都需要重新绘制所有的循环。

这通常是由以下人员完成的:

  1. 保持要绘制的所有圆圈的ArrayList,然后遍历列表
  2. 将每个圆圈绘制到一个BufferedImage上,然后只绘制图像。

有关每种方法的示例,请参见定制绘画方法

票数 1
EN

Stack Overflow用户

发布于 2013-03-25 16:27:11

尝试不带参数的重油漆()repaint(int x, int y, int width, int height)只重新绘制组件的指定矩形。

票数 0
EN

Stack Overflow用户

发布于 2014-01-19 06:21:20

我认为您应该尝试添加一个新函数:

代码语言:javascript
复制
public void paint(Graphics g){
    super.paint(g);
    g.drawImage(img, 0, 0, 1400, 1000, 0, 0, 1400, 1000, null);
    g.setColor(Color.red);
    g.drawOval(cx,cy, cdia, cdia);
    g.fillOval(cx,cy, cdia, cdia);
}

这是我一直在做的事,而且对我来说很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15619796

复制
相关文章

相似问题

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