JFreeChart 使 JFrame 无响应?
JFreeChart making JFrame unresponsive?
当我创建 JFrame 时,无法与其交互。我无法调整它的大小或单击标题按钮,尽管我可以移动 window。甚至像这样简单的东西:
JFrame win = new JFrame();
win.setVisible(true);
会出现问题。应用程序启动时在控制台中显示:
2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Enabled
2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
显然,当混合 Swing 和 SWT 组件时会发生这种情况。我不使用 SWT 库,尽管我的项目确实使用了包含 swtgraphics2d.jar
的 JFreeChart。有什么方法可以在仍然使用 JFreeChart 的情况下解决这个问题吗?
一定要用你的 JFreeChart
和 add()
创建一个 ChartPanel
到 JFrame
。默认位置是 BorderLayout.CENTER
,这应该让您的图表随框架调整大小。
private void display() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
YourDataset data = createYourDataset(…);
JFreeChart chart = createYourChart(…);
f.add(new ChartPanel(chart);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
此外,请务必从 event dispatch thread 开始。
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new YourClass().display();
}
});
}
当我删除(现在已知的)不必要的罐子时,问题就消失了,包括 swtgraphics2d.jar
。
当我创建 JFrame 时,无法与其交互。我无法调整它的大小或单击标题按钮,尽管我可以移动 window。甚至像这样简单的东西:
JFrame win = new JFrame();
win.setVisible(true);
会出现问题。应用程序启动时在控制台中显示:
2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Enabled
2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
显然,当混合 Swing 和 SWT 组件时会发生这种情况。我不使用 SWT 库,尽管我的项目确实使用了包含 swtgraphics2d.jar
的 JFreeChart。有什么方法可以在仍然使用 JFreeChart 的情况下解决这个问题吗?
一定要用你的 JFreeChart
和 add()
创建一个 ChartPanel
到 JFrame
。默认位置是 BorderLayout.CENTER
,这应该让您的图表随框架调整大小。
private void display() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
YourDataset data = createYourDataset(…);
JFreeChart chart = createYourChart(…);
f.add(new ChartPanel(chart);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
此外,请务必从 event dispatch thread 开始。
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new YourClass().display();
}
});
}
当我删除(现在已知的)不必要的罐子时,问题就消失了,包括 swtgraphics2d.jar
。