2013-11-16 4 views
0

Я не очень хорошо знаком с графикой на Java, извините. Тем не менее, это то, что я пытаюсь сделать. Я хочу, чтобы нарисовать пару точек на холсте (JPanel здесь), и иметь возможность перерисовывать точки каждый раз, когда метод (drawPoints) вызывается с помощью нового набора параметров: double [] xs, double [] ys. Любой шанс я мог бы сделать это без «перерисовки» холста? Я даже не могу получить точки для построения графика в текущем состоянии кода.произвести участок с несколькими точками в JPanel

import java.awt.Graphics; 
import java.awt.Color; 
import java.awt.Graphics2D; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 


public class PlotPoints extends JPanel {  
double[] x; 
double[] y; 

public void paintComponent (Graphics g)  
{ 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(Color.black); 
    for (int i=0; i<x.length; i++){ 
     g2d.fillOval((int)this.x[i],(int)this.y[i], 10, 10);    
    } 
} 

public void drawPoints(double[]xs, double[]ys){ 
    JFrame frame = new JFrame("Points"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.x=xs.clone(); 
     this.y=ys.clone(); 
     frame.add(new PlotPoints()); 
     frame.setSize(100, 100);//laptop display size 
     frame.setVisible(true); 
} 
} 

Вот еще один класс, который вызывает метод drawPoints из класса PlotPoints. Я получил этот фрагмент кода из некоторого StackOverflow Q & As, и попытался импровизировать на нем в соответствии с моими потребностями. Если другая структура больше подходит, я буду благодарна за ваш обмен.

import java.lang.*; 
public class MainClass { 
double[] xcoords; 
double[] ycoords; 
public static void main(String[] args){ 
    //create instances of classes 
    PlotPoints myPlots=new PlotPoints(); 
    MainClass myMain=new MainClass(); 

    //initialize coordinates 
    myMain.xcoords=new double[5]; 
    myMain.ycoords=new double[5]; 

    //put values into coordinates 
    for (int i=0; i<5; i++){ 
     myMain.xcoords[i]=Math.random()*1000; //Random number 
     myMain.ycoords[i]=Math.random()*1000; 
    } 

    //Create a plotter. Plot 
    //to draw points defined by: (xcoords[i],ycoords[i]) 
    myPlots.drawPoints(myMain.xcoords, myMain.ycoords); 

    //Please do this!  
} 

}

+0

'' Любой шанс, что я мог бы сделать это без «перерисовки» холста? »' - почему бы не повторно рисовать компонент, или здесь вы просто будете называть 'repaint()'? –

ответ

3

Любой шанс, что я мог бы сделать это без 'перекройки' холст?

Несомненно. Нарисуйте их на BufferedImage, который сам отображается в JLabel. НАПРИМЕР. как видно из this answer.

Но не слишком быстро, чтобы идти по этому пути. Java-2D может анимировать тысячи графических элементов в методе paint().

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