我一直试图制作这个应用程序,在我点击"添加新数据项"按钮。现在,在我点击按钮后,没有任何反应(gui冻结),在我最大化框架后,图形出现在框架内部,这说明我的程序工作,但我不知道为什么我的gui会冻结。 我已经看到了类似的问题,人们回答说必须引入一个新的线程来处理不同的设备,我也尝试过,但它仍然没有工作,只是让它变得更糟。有谁知道我是什么样的错误在这里制作?这是我的代码:
import java.awt.BorderLayout;
import java.util.HashSet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RefineryUtilities;
public class ChartApp implements ActionListener {
static final JFrame frame = new JFrame("Chart");
public ChartApp(){
final JButton button = new JButton("Add New Data Item");
button.addActionListener(this);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(button,BorderLayout.NORTH);
frame.setVisible(true);
}
public static void main(String[] args){
ChartApp app=new ChartApp();
}
public void actionPerformed(final ActionEvent e)
{
DefaultXYDataset dataSet = new DefaultXYDataset();
double[][] data = { {1,5,9}, {1, 5, 4} };
dataSet= createDataset(dataSet,data);
final JFreeChart chart = ChartFactory.createXYLineChart("Test Chart",
"x", "y", dataSet, PlotOrientation.VERTICAL, true, true,
false);
ChartPanel cp = new ChartPanel(chart);
frame.getContentPane().add(cp);
}
private static DefaultXYDataset createDataset( DefaultXYDataset dataSet,double[][]data) {
dataSet.addSeries("series1", data);
return dataSet;
}
}
谢谢!
答案 0 :(得分:3)
我不认为你的GUI是冻结的,它只是没有被告知改变。在添加repaint()
后,您是否尝试在相框上调用ChartPanel
?
关于线程,如果actionPerformed
内的代码小于即时代码,你应该在一个单独的线程中进行。
答案 1 :(得分:3)