Я использую JChart2d (http://jchart2d.sourceforge.net/index.shtml) для динамического отслеживания значений двойного массива. Когда я кодирую конфигурацию в основном методе и запускаю ее, она отлично работает.
Вот код.
public class WaveTracer {
ITrace2D trace ;
Chart2D chart ;
double dataArray [];
JFrame frame;
public WaveTracer(int limit , double [] data){
trace = new Trace2DLtd(limit);
dataArray = data;
}
public void configure(String framename, int fwidth , int fheight, int xpos , int ypos ){
try{
chart = new Chart2D();
trace.setColor(Color.RED);
frame = new JFrame(framename);
frame.addWindowListener(new WindowAdapter() {
/**
* @see java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent)
*/
@Override
public void windowClosing(final WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(chart);
frame.setSize(fwidth, fheight);
frame.setLocation(xpos, ypos);
}catch (Throwable f) {
System.exit(0);
}
}
public void trace(int speed) throws InterruptedException{
frame.setVisible(true);
chart.addTrace(trace);
for (int j = 0; j < dataArray.length; j++) {
trace.addPoint(j,dataArray[j]);
Thread.sleep(speed);
}
System.exit(0);
}
public static void main(String args []){
Random random = new Random();
double d[] = new double[2000];
int count=1;
for(int i=200;i>=0;i--){
d[200-i] = random.nextDouble()*10.0;
}
WaveTracer wavetracer = new WaveTracer(5000, d);
wavetracer.configure("plying wave form with time", 1000, 500, 200, 200);
try {
wavetracer.trace(150);
} catch (InterruptedException ex) {
Logger.getLogger(FrequencyDitectorForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Но мне нужно нарисовать график, когда я нажимаю на кнопку «Рисовать», которая находится в другой форме. Я создал форму, которая содержит кнопку «Рисовать» и добавил следующий код к действию клика.
JFrame dialog = new JFrame();
Random random = new Random();
double d[] = new double[2000];
int count=1;
for(int i=200;i>=0;i--){
d[200-i] = random.nextDouble()*10.0;
}
WaveTracer wavetracer = new WaveTracer(5000, d);
wavetracer.configure("plying wave form with time", 1000, 500, 200, 200);
try {
wavetracer.trace(150);
} catch (InterruptedException ex) {
Logger.getLogger(FrequencyDitectorForm.class.getName()).log(Level.SEVERE, null, ex);
}
Но когда я нажимаю на эту кнопку, только новый кадр загружается и ничего не показывает в кадре. Затем я проверил цикл, добавив в него окно сообщений. В этом случае он показывает график для каждой итерации цикла.
Может кто-нибудь, пожалуйста, помогите мне в этом вопросе. Как я могу получить нарисовать этот график из отдельной формы, не вызывая окно сообщения в каждом цикле цикла.