2016-08-14 1 views
1

JFreeChartとSQLを使用して、データベースに存在するデータに基づいてグラフを作成するメソッドを作成しました。私は3つの方法、1つの特定の例、ユーザーの重量対時間があります。私はこれらのグラフをJTabbedPaneに表示したいと思います。 1つのタブでメソッドを呼び出すと、static/voidメソッドが許可されていないことがわかります。私の方法にはパラメターはありません。JTabbedPaneでメソッドを呼び出す

panelWeight = new JPanel(); 
    panelWeight.setLayout(null); 
    panelWeight.add(StatGraph.WeightGraph()); 

EDIT:ここに私の最初の試みである 私はコンポーネントへのvoidメソッドを呼び出すことはできませんし、B)はnullレイアウトはスケールしない)を発見した後、描画ボードに戻りました。ここではJTabbedPaneを呼び出してメソッドを非voidにする、書き直したメソッドを示します。

public static ChartFrame WeightGraph(){ 

    ChartFrame returnFrame = null; 

    try{ 
     ConnectionManager connectionManager = ConnectionManager.getInstance(); 
     Connection connection = connectionManager.getConnection(); 
     UserInfoManager user = new UserInfoManager(); 
     int username = user.getId(); 

     String query = "SELECT DATE, WEIGHT FROM STATS WHERE ID=" + username;   JDBCCategoryDataset dataset = new JDBCCategoryDataset(connection, query); 
     JFreeChart chart = ChartFactory.createLineChart("WEIGHTvsDATE Chart", "Date", "Weight", dataset, PlotOrientation.VERTICAL, false, true, true); 
     BarRenderer renderer = null; 
     CategoryPlot plot = null; 
     renderer = new BarRenderer(); 
     ChartFrame frame = new ChartFrame("Progress Log", chart); 
     returnFrame = frame; 
     //frame.setVisible(true); 
     //frame.setSize(750,400); 
    } 
    catch(Exception e){ 
     JOptionPane.showMessageDialog(null,e); 

    } 

    return returnFrame; 
} 

次に、GUIフレームに戻り、クリックリスナーを使用してアクティブ化されたTabbedPaneのPanelに次のコードを追加します。 panelWeight.add(StatGraph.WeightGraph()); はしかし、私は次のエラーを取得する:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container 
at java.awt.Container.checkNotAWindow(Container.java:488) 
at java.awt.Container.addImpl(Container.java:1089) 
at java.awt.Container.add(Container.java:415) 
at GUI.PT.ProgressStatsPT.panelWeightMouseClicked(ProgressStatsPT.java:392) 
at GUI.PT.ProgressStatsPT.access$600(ProgressStatsPT.java:26) 
at GUI.PT.ProgressStatsPT$7.mouseClicked(ProgressStatsPT.java:138) 
at java.awt.Component.processMouseEvent(Component.java:6528) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6290) 
at java.awt.Container.processEvent(Container.java:2234) 
at java.awt.Component.dispatchEventImpl(Component.java:4881) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
at java.awt.Container.dispatchEventImpl(Container.java:2278) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+0

これらの[examples](http://stackoverflow.com/search?tab=votes&q=user%3a230513%20%5bjfreechart%5d%20jdbcXYdataset)も参照してください。これは時系列に適したJDBCXYDatasetです。これが重複ではない場合は、例を引用したものではなく、修正されたアプローチを示す[mcve]を含めるように質問を編集してください。 – trashgod

+0

@trashgod JFreeChart、SQL、およびJTabbedPaneに関連するリソースが見つかりません。使用できるリソースは、SQLクエリを実行するときに問題を返します。 –

+0

'ヌル(null) 'レイアウトは縮尺が変わりません。私はあなたがこれを見落としてしまったと感じています[例](http://stackoverflow.com/a/24762078/230513)。 – trashgod

答えて

0

正確Graph.weightLg()リターンは何? JPanelからのadd()メソッドは、のインスタンスまたはサブクラスのインスタンスをとります。 Graph.weightLg()メソッドで何も返されない場合(あなたのケースだと思います)、コンパイルは失敗します。

+0

.add()がメソッド –

+0

をサポートしていない場合、パネルに静的voidメソッドを呼び出すことをどのように解決できますか?静的であるメソッドの事実は無関係です。ここでの重要な点は、メソッドを無効にすることはできないということです。 **コンポーネント**を返す必要があります。 –