2016-08-14 62 views
1

我已經創建了一個使用JFreeChart和SQL的方法,它基本上根據數據庫中存在的數據創建一個圖。我有3種方法,一個例子,用戶體重與時間。我希望在JTabbedPane中顯示這些圖形,但我不確定如何。當我在一個選項卡上調用方法時,它告訴我不允許使用static/void方法。我的方法沒有參數。這是我最初的嘗試:在JTabbedPane上調用方法

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

編輯: 我回到繪圖板,發現了一個之後)我不能把一個空的方法對元件和B)空佈局不結垢。這是我重寫的方法,我希望調用JTabbedPane,使該方法無效。

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框架和下面的代碼添加到該選項卡窗格的面板,通過點擊收聽激活。 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

另請參閱這些[示例](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方法是不相關的。這裏的關鍵是該方法不能是無效的。它必須返回一個** Component **。 –