2012-02-18 2 views
2

基本的には、複数のフレームを持つJava GUIが必要なので、私はJInternalFrameを使用していますが、私のグラフ(JFreeChartから作成)をフレームに追加すると例外が出ました。JFreechartのJInternalFrameでの例外

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、最新バージョンを使用しています)。

+0

あなたはJInternalFrameのにはJFreeChartを追加し、コードを投稿してくださいことはできますか?また、これを実行しているJavaのバージョンは何ですか? – ahawtho

+2

あなたのコードにはおそらくバグがあります。私は、ESPのない私たちは、問題のコードを見ずにバグが何であるかを推測することが難しいと思っています。 –

答えて

4

ここでは、をJInternalFrameと一緒に使用する方法を示すsscceを簡略化して示します。内部フレームが表示される前に、pack()(必要に応じてサイズ変更する必要があります)に注意してください。関連する例はhereです。

enter image description 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(); 
      } 
     }); 
    } 
} 
+0

私はあなたのアイデアに従っていましたが、同じエラーが発生しました。キーワードは次のとおりです。スレッド「AWT-EventQueue-0」の例外java.lang.ClassCastException:javax.swing.plaf.ColorUIResourceをjava.util.Listにキャストできません。 –

+0

このエラーを再現できません。あなたが説明している問題を示す[sscce](http://sscce.org/)を含むように質問を編集してください。私の_complete_の例から始めたいかもしれません。 – trashgod

+0

最後にそれは働いて、ありがとう! –