我是一个缺乏经验的(除非你算上 70 年代初的 PDP-8)程序员,在封闭类中使用重绘方法苦苦挣扎。
该类旨在显示当地的航空地图,然后在地图上绘制小圆圈以绘制飞机的通道。随着时间的推移,地图将显示飞机降落在当地机场的最常用路径。
问题是,经过一天的努力,我仍然无法进行重绘。
与图形有关的类是:
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() 方法重新绘制时不会发生更新。
所以两个问题:
- 我如何说服重绘工作(主要问题)和
- 如何确保所有点都留在屏幕上。