Napisałem program, który wyświetla wykres w oknie. Używam pakietu JFreeChart. Problem mam taki, że po kliknięciu na krzyżyk okno znika ale program nadal jest uruchomiony. Musze kliknąć Terminate w Eclipsie i wtedy dopiero program okńczy działanie.
Tutaj kod wykresu i okna:
package pic.img;
import java.awt.Color;
import java.util.Random;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.statistics.HistogramDataset;
import org.jfree.data.xy.IntervalXYDataset;
public class HistogramChart extends JPanel {
public HistogramChart(double[] values) {
super();
JFreeChart chart = createChart(createDataset(values));
add(new ChartPanel(chart));
}
private JFreeChart createChart(IntervalXYDataset dataset) {
// TODO Auto-generated method stub
JFreeChart chart = ChartFactory.createHistogram("Histogram Demo 1",
null, null, dataset, PlotOrientation.VERTICAL, true, true,
false);
XYPlot plot = (XYPlot) chart.getPlot();
XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
renderer.setSeriesPaint(0, Color.BLUE);
renderer.setDrawBarOutline(true);
return chart;
}
private IntervalXYDataset createDataset(double[] values) {
// TODO Auto-generated method stub
HistogramDataset dataset = new HistogramDataset();
Random generator = new Random();
for (int i = 0; i < 1000; i++) {
values[i] = generator.nextInt(256);
}
dataset.addSeries("H1", values, 32, 0, 255);
for (int i = 0; i < 32; i++) {
System.out.println(dataset.getYValue(0, i));
}
return dataset;
}
}
package pic.frame;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import pic.img.HistogramChart;
public class Ramka extends javax.swing.JDialog {
private JPanel testPanel;
HistogramChart h;
/**
* Auto-generated main method to display this JDialog
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
Ramka inst = new Ramka(frame);
inst.setVisible(true);
}
});
}
public Ramka(JFrame frame) {
super(frame);
initGUI();
}
private void initGUI() {
try {
double[] tablicaKolorow = new double[1000];
h = new HistogramChart(tablicaKolorow);
testPanel = new JPanel();
getContentPane().add(testPanel, BorderLayout.CENTER);
testPanel.setPreferredSize(new java.awt.Dimension(392, 272));
testPanel.add(h);
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Wie ktos jak sobie z tym poradzić? Żeby program kończył działanie normalnie po kliknięciu na krzyżyk?