gpt4 book ai didi

java - JPanel 中的重绘查询

转载 作者:行者123 更新时间:2023-12-01 14:44:12 24 4
gpt4 key购买 nike

我是一个缺乏经验的程序员(除非你算上 70 年代初的 PDP-8)程序员,正在努力解决封闭类中的重绘方法。

该类旨在显示本地的航空 map ,然后在 map 上绘制小圆圈以绘制飞机的航线。随着时间的推移, map 将显示飞机在本地机场降落时最常用的路径。

问题是,经过一天的努力,我仍然无法使重绘工作。

与图形相关的类是:

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() 方法。

map 和屏幕中央的小红点显示正确,但尝试通过 DpPlotEcho() 方法重新绘制时不会发生更新。

有两个问题:

  1. 如何说服重绘工作(主要问题)以及
  2. 如何确保所有点都保留在屏幕上。

最佳答案

How do I persuade the repaint to work (The main issue)

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

How do I make sure that all the dots stay on the screen.

每次调用paintComponent()方法时,您都需要重新绘制所有圆圈。

这通常由以下人员完成:

  1. 保留要绘制的所有圆圈的 ArrayList,然后迭代该列表
  2. 将每个圆圈绘制到 BufferedImage 上,然后绘制图像。

参见Custom Painting Approaches了解每种方法的示例。

关于java - JPanel 中的重绘查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15619796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com