私は経験の浅い (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);
}
}
この Panel を別の Frame に作成し、アプリ本体から DpPlotEcho() メソッドを呼び出します。
マップと画面中央の小さな赤い点は正しく表示されますが、DpPlotEcho() メソッドを使用して再描画を試みても更新は行われません。
2つの質問:
- 再描画を機能させるにはどうすればよいですか (主な問題) と
- すべてのドットが画面上にとどまるようにするにはどうすればよいですか?