Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

JavaFX Update Line Chart on Tab pane

d2b747ae-7b5b-4e5c-8be7-f5dfd418c6b9Apr 23 2015 — edited Apr 23 2015

Hi all,

I am wondering can anybody help with this problem.

I have an application that can create a new tab when the LineChart FXML view is called by way of onMouseClicked event from a bar graph (using scenebuilder). However, I need this Line chart to update when the user clicks a new bar on the bar graph page to show this new data.

Initially the Line chart tab will open and display data from the first bar graph click and when I click another bar in Tab A (bar chart) if it has the same number of rows it will refresh the LineChart tab otherwise I get an error. Then if I try to load another line graph tab using a different bar graph as the source I get a child duplication error

(So tab A has a bar graph that calls tab B to represent data as a line graph, however it wont do it more then once when there is a different number of points to show)

(Also tab C, another Bar chart will not load a new tab) Exceptions below & Class detail below.

I am using clear() to empty the observable list I have which is used to populate the graph and table before it reads in the new data values

What is the proper way/ best way to dynamically add another tab and update the chart in the tab with new values? Any help would be appreciated.

I am getting the following exceptions:

Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 11, Size: 7

  at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:661)

  at java.util.ArrayList.add(ArrayList.java:473)

  at com.sun.javafx.collections.ObservableListWrapper.doAdd(ObservableListWrapper.java:101)

  at javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:151)

  at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:320)

  at com.sun.javafx.scene.control.skin.TabPaneSkin$TabHeaderArea.addTab(TabPaneSkin.java:854)

  at com.sun.javafx.scene.control.skin.TabPaneSkin$TabHeaderArea.access$500(TabPaneSkin.java:659)

  at com.sun.javafx.scene.control.skin.TabPaneSkin.addTabs(TabPaneSkin.java:276)

  at com.sun.javafx.scene.control.skin.TabPaneSkin.lambda$initializeTabListener$463(TabPaneSkin.java:357)

  at com.sun.javafx.scene.control.skin.TabPaneSkin$$Lambda$108/885312968.onChanged(Unknown Source)

  at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:329)

  at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)

  at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)

  at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)

  at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)

  at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)

  at javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:155)

  at java.util.AbstractList.add(AbstractList.java:108)

  at javafxapplication2.FXMLExecutionChartController$3.handle(FXMLExecutionChartController.java:262)

  at javafxapplication2.FXMLExecutionChartController$3.handle(FXMLExecutionChartController.java:241)

  at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)

  at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

  at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

  at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

  at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)

  at javafx.event.Event.fireEvent(Event.java:198)

  at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3437)

  at javafx.scene.Scene$ClickGenerator.access$7900(Scene.java:3365)

  at javafx.scene.Scene$MouseHandler.process(Scene.java:3733)

  at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)

  at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)

  at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)

  at java.security.AccessController.doPrivileged(Native Method)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)

  at com.sun.glass.ui.View.handleMouseEvent(View.java:553)

  at com.sun.glass.ui.View.notifyMouse(View.java:925)

  at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)

  at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)

  at com.sun.glass.ui.win.WinApplication$$Lambda$37/1146743572.run(Unknown Source)

  at java.lang.Thread.run(Thread.java:745)

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException

  at javafxapplication2.FXMLExecutionChartController$3.handle(FXMLExecutionChartController.java:263)

  at javafxapplication2.FXMLExecutionChartController$3.handle(FXMLExecutionChartController.java:241)

  at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)

  at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

  at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

  at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

  at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

  at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

  at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)

  at javafx.event.Event.fireEvent(Event.java:198)

  at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3437)

  at javafx.scene.Scene$ClickGenerator.access$7900(Scene.java:3365)

  at javafx.scene.Scene$MouseHandler.process(Scene.java:3733)

  at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)

  at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)

  at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)

  at java.security.AccessController.doPrivileged(Native Method)

  at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)

  at com.sun.glass.ui.View.handleMouseEvent(View.java:553)

  at com.sun.glass.ui.View.notifyMouse(View.java:925)

  at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)

  at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)

  at com.sun.glass.ui.win.WinApplication$$Lambda$37/1146743572.run(Unknown Source)

  at java.lang.Thread.run(Thread.java:745)

Class Information:

//Call to the Line chart graph

n.setOnMouseClicked(new EventHandler<MouseEvent>()

              {

                @Override

                public void handle ( MouseEvent e )

                  {

                    String s1 = dt.getXValue();

                    String s = s1.trim();

                    if ( baseHash.containsKey(s) )

                      {

                        String value = (String) baseHash.get(s);

                        String hashValue = value.substring(6, 38);

                        System.out.println(hashValue);

                        FXMLLineChartController.setHash(hashValue);

                         try

                            {

                              lineTab .setText("Line Graph (Rows Read)");

                              lineTab.setContent(FXMLLoader.load(getClass().getResource("/javafxapplication2/FXMLLineChart.fxml")));

                              Node aNode = (Node) e.getSource();

                              Scene scene = aNode.getScene();

                              thisTabPane = (TabPane) scene.lookup("#tabPane");

                              thisTabPane.getTabs().add(lineTab);

                              selectionModel.selectLast();

                              //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

                            }

                          catch ( IOException ex )

                            {

                              Logger.getLogger(FXMLWrittenChartController.class.getName()).log(Level.SEVERE, null, ex);

                            }

//Line Chart controller

//Create the Graph

    @FXML

    private LineChart barChart;

public void populateGraph ()

      {

        System.out.println("Populate graph Line Chart");

        final CategoryAxis xAxis = new CategoryAxis();

        final NumberAxis yAxis = new NumberAxis();

        ObservableList<XYChart.Series<String, Number>> barChartData = FXCollections.observableArrayList();

        barChartData.clear();

        baseHash.clear();

        xAxis.setLabel("Query");

        yAxis.setLabel("Number of Executions");     

        series1.setName("Data from User DB2 for Query " +getHash() );

        for ( int i = 0; i < userLine.size(); i++ )

          {        

                System.out.println(getHash() + " Usersize = " + userLine.size() + " base size " +baseLine.size());

                series1.getData().add(new XYChart.Data<String, Number>(userLine.get(i).getBuildNumber(), (userLine.get(i).getDYN_Num_Executions())));

            

                           

          }

       

        barChartData.add(series1);

        barChart.setData(barChartData);

      }

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 21 2015
Added on Apr 23 2015
0 comments
1,451 views