java – JInternalFrame中JFreechart的异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JInternalFrame中JFreechart的异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4646字,纯文字阅读大概需要7分钟。
内容图文
![java – JInternalFrame中JFreechart的异常](/upload/InfoBanner/zyjiaocheng/709/5679d262b7ed464c925f98f9fd778230.jpg)
基本上,我想要一个具有多个框架的Java GUI,所以我使用JInternalFrame,但是当我将我的图表(从JFreeChart创建)添加到其中一个框架时,它给了我一个例外.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.plaf.ColorUIResource cannot be cast to java.util.List
at javax.swing.plaf.metal.MetalUtils.drawGradient(Unknown Source)
at javax.swing.plaf.metal.MetalInternalFrameTitlePane.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source) ....
这是代码:
public class immobile extends JFrame {
JDesktopPane desktop;
public immobile() {
desktop = new JDesktopPane();
desktop.setDesktopManager(new No1DragDesktopManager());
getContentPane().add(desktop);
desktop.add(createInternalFrame(30, 50, Color.WHITE));
desktop.add(createInternalFrame(30, 360, Color.WHITE));
desktop.add(createInternalFrame(630, 50, Color.WHITE));
desktop.add(createInternalFrame(630, 360, Color.WHITE));
}
private JInternalFrame createInternalFrame(
int location1, int location2, Color background) {
JInternalFrame internal =
new JInternalFrame("Frame" + location1, true, true, true, true);
internal.setBackground(background);
internal.setVisible(true);
internal.setResizable(false);
internal.setBounds(location1, location2, 600, 310);
internal.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
return internal;
}
public static void main(String args[]) {
immobile frame = new immobile();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(1280, 720);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setResizable(false);
try {
JInternalFrame[] frames = frame.desktop.getAllFrames();
JInternalFrame f = frames[0];
String url = "http://www.cophieu68.com/export/excel.php?id=ABT";
//create the chart from JFreechart//
JFreeChart chart = garch_project.garch_chart(url);
JPanel chartPanel = new ChartPanel(chart);
f.add(chartPanel);
f.putClientProperty("dragMode", "fixed");
JInternalFrame f3 = frames[2];
f3.putClientProperty("dragMode", "fixed");
JInternalFrame f4 = frames[1];
f4.putClientProperty("dragMode", "fixed");
JInternalFrame f2 = frames[3];
f2.putClientProperty("dragMode", "fixed");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class No1DragDesktopManager extends DefaultDesktopManager {
public void beginDraggingFrame(JComponent f) {
if (!"fixed".equals(f.getClientProperty("dragMode"))) {
super.beginDraggingFrame(f);
}
}
public void dragFrame(JComponent f, int newX, int newY) {
if (!"fixed".equals(f.getClientProperty("dragMode"))) {
super.dragFrame(f, newX, newY);
}
}
public void endDraggingFrame(JComponent f) {
if (!"fixed".equals(f.getClientProperty("dragMode"))) {
super.endDraggingFrame(f);
}
}
}
}
我怎么能处理它们?谢谢. (我正在使用Eclipse,最新版本).
解决方法:
这是一个简化的sscce,显示了JFreeChart如何与JInternalFrame一起使用.请注意,在使内部框架可见之前,应该对其进行打包()(并可选择调整大小).可以在here找到相关示例.
/** @see https://stackoverflow.com/questions/9338466 */
public class InternalFreeChart {
private static final Random rnd = new Random();
public InternalFreeChart() {
JFrame frame = new JFrame();
JDesktopPane desktop = new JDesktopPane();
frame.add(desktop);
for (int i = 1; i < 9; i++) {
desktop.add(createInternalFrame(i));
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JInternalFrame createInternalFrame(int n) {
JInternalFrame jif = new JInternalFrame(
"Frame" + n, true, true, true, true);
jif.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Test", "Time", "Value", createDataset(), true, true, false);
JPanel chartPanel = new ChartPanel(chart);
jif.add(chartPanel);
jif.pack();
jif.setBounds(n * 25, n * 20, 400, 300);
jif.setVisible(true);
return jif;
}
private static XYDataset createDataset() {
TimeSeries series1 = new TimeSeries("Series 1");
TimeSeries series2 = new TimeSeries("Series 2");
SerialDate sd = SerialDate.createInstance(new Date());
for (int i = 1; i < 16; i++) {
Day d = new Day(SerialDate.addDays(i, sd));
series1.add(d, 100 + rnd.nextGaussian() / 2);
series2.add(d, 101 + rnd.nextGaussian() / 2);
}
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
return dataset;
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
InternalFreeChart ifc = new InternalFreeChart();
}
});
}
}
内容总结
以上是互联网集市为您收集整理的java – JInternalFrame中JFreechart的异常全部内容,希望文章能够帮你解决java – JInternalFrame中JFreechart的异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。