如何在Java中的JPanel中添加图形

时间:2015-04-20 18:57:01

标签: java swing dynamic graphics jpanel

我有JPanel GuiMap,现在我想在这个Panel中绘制一些不同的Graphics(最初是几行)。 首先,我有一个起点currentX=0currentY=0。然后我在方法updatePos中添加了新的Points。这种方法改变了点。方法paintComponent绘制新点和旧点之间的线。

我的问题是只有最后一行可见。

如何重新绘制或重绘或更新Panel?

我想看看旧的和新的图形!

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;

public class GuiMap extends JPanel{
    private int currentX = 0, currentY = 0;
    private int prevX, prevY;

    GuiMap(int xpos, int ypos){
        this.currentX = xpos;
        this.currentY = ypos;
    }   
    public void updatePoint(int xpos, int ypos) {
        prevX = currentX;
        prevY = currentY;
        currentX = xpos;
        currentY = ypos;
    }   
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                RenderingHints.VALUE_ANTIALIAS_ON); 
        g.drawLine(prevX, prevY, currentX, currentY);
    }
}
public class GuiMapFrame extends JFrame {   
    static GuiMap guiPanel;
    static JFrame frame;

    public static void main(String[] args) throws InterruptedException{
        frame = new JFrame("SuperGui"); 
        guiPanel = new GuiMap();            
        frame.setContentPane(guiPanel); 
        frame.setSize(600, 480);
        frame.setLocation(100,100);
        frame.setVisible(true);     
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiPanel.updatePoint(20, 80);
        guiPanel.updatePoint(130, 50);
        guiPanel.updatePoint(60, 175);
        guiPanel.repaint();     
    }
}

2 个答案:

答案 0 :(得分:0)

实际上你的问题是camickr所说的。每次重新粉刷它都会清除以前绘制的内容。因此,您需要创建多个对象并在paint组件中呈现每个对象

答案 1 :(得分:0)

  

我的问题是最后一行是可见的。 ...

您需要做以下两件事之一:

  1. 将每一行绘制到BufferedImage并绘制BufferedImage
  2. 保留您要绘制的所有行的列表,然后遍历此列表
  3. 有关这两种方法的实例,请参阅Custom Painting Approaches