2015-04-20 14 views
0

У меня есть JPanel GuiMap, и теперь я хочу нарисовать несколько разных графиков (сначала некоторые строки) в этой панели. Сначала у меня есть стартовая точка currentX=0 и currentY=0. Затем я помещаю новые точки в метод updatePos. Этот метод изменяет точки. И метод paintComponent рисует линию между новым и старыми точками.Как добавить графику в JPanel в Java

У меня проблема только в последней строке.

Как перерисовать или перерисовать или обновить панель правильно?

Я хочу видеть старую и новую графику!

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();  
    } 
} 

ответ

0

Моя проблема только в последней строке. ...

Вам нужно сделать одну из двух вещей:

  1. Draw каждую строку в BufferedImage и краску на BufferedImage
  2. Держите список всех линии, которую вы хотите сделать, а затем итерацию через этот список

См. Custom Painting Approaches для рабочего примера обоих этих подходов.

+0

спасибо! я попробовал, и теперь это работает! –

0

На самом деле ваша проблема в том, что сказал камикр. Каждый раз, когда вы перерисовываете его, он очищает то, что он нарисовал раньше. Таким образом, вам необходимо создать несколько объектов и визуализировать их в компоненте краски

+0

позади guiPanel.repaint(); ? –

+0

В конце 'paintComponent' – TameHog

Смежные вопросы