Avatar billede usse Nybegynder
27. oktober 2008 - 21:36 Der er 5 kommentarer og
1 løsning

Jfreechart - Applet og JSP

Jeg står i en situation hvor jeg gerne vil have lavet noget statistik med JFreechart som jeg har tænkt mig skal køre over en jsp webside i en applet, men jeg har lidt problemer med at tilgå selve appletens metoder, dvs. at jeg gerne vil have hentet noget data fra model/domain-laget til jsp-siden som skal videresendes fødes til en metode i appleten eks. loadData( Dataset d ) som derefter skal opdateres..

Mit problem er at jeg ikke ved hvordan man skal kunne få appleten til at loade de dataer, da man jo ikke kan kalde metoderne som sådan, kun med javascript og derved ikke kunne angive et dataset som parameter.
    <%  -- Kunne være smart hvis man kunne gøre sådan og at appleten kunne bruge det initierede objekt ;)
        StatBarchart sbc = new StatBarchart(); // Appleten
        sbc.loadData( et eller andet data );
    %>
    <applet code="StatBarchart.class" width="800" height="600"></applet>

---------
      public void loadData( DefaultCategoryDataset data )
      {

          JFreeChart chart = ChartFactory.createStackedBarChart3D( null, "", "Cost", data, PlotOrientation.VERTICAL, false, true, false );
          CategoryPlot plot = (CategoryPlot) chart.getPlot();
         
          GroupedStackedBarRenderer renderer = new GroupedStackedBarRenderer();
          KeyToGroupMap map = new KeyToGroupMap( "G1" );
          map.mapKeyToGroup( data.getRowKey( 0 ), "G1" ); // 2006 (Int)
          map.mapKeyToGroup( data.getRowKey( 1 ), "G1" ); // 2006 (Ext)
          map.mapKeyToGroup( data.getRowKey( 2 ), "G2" ); // 2007 (Int)
          map.mapKeyToGroup( data.getRowKey( 3 ), "G2" ); // 2007 (Ext)
           
          renderer.setSeriesToGroupMap( map );
          renderer.setItemMargin( 0 );
     
          SubCategoryAxis domainAxis = new SubCategoryAxis( null );
          domainAxis.setCategoryMargin( 0.05 );
          domainAxis.addSubCategory( "h" ); // 2006
          domainAxis.addSubCategory( "c" ); // 2007

          domainAxis.setLowerMargin( 0 );
          domainAxis.setUpperMargin( 0 );
     
          plot.setDomainAxis( domainAxis );
          plot.setRenderer( renderer );
     
          ChartPanel chartPanel = new ChartPanel( chart );
          chartPanel.setPreferredSize( new java.awt.Dimension( 400, 300 ) );
          setContentPane( chartPanel );   
      }
------
Det virker udmærket hvis jeg loader dataen i init metoden for appleten, men det kan da ikke passe at man skal til kringe sig ud i noget andet, det burde være lige til..
Håber i forstår mig..
Avatar billede arne_v Ekspert
27. oktober 2008 - 21:42 #1
To oplagte muligheder:

A) applet laver web service kald til servlet og henter data

B) applet er embedded i JSP side og JSP siden genererer parametre som
  applet bruger
Avatar billede arne_v Ekspert
27. oktober 2008 - 21:46 #2
For #B check http://www.vajhoej.dk/arne/eksperten/jfreechart/ hvor der er nogle eksempler
med parametre.
Avatar billede usse Nybegynder
27. oktober 2008 - 22:56 #3
Jamen det kan jo ikke lade sig gøre eller hvad, jeg kan kun overføre Strings, og derved ikke bare smide et eller andet objekt med over i en metode..? Altså sådan at jeg måske kan DefaultCategoryDataset dataset = (DefaultCategoryDataset) getParameter("test");
Avatar billede arne_v Ekspert
28. oktober 2008 - 00:39 #4
Med applet parameters ville du være være nødt til at give appletten nogle strenge
som den så kan parse.

Med web service kunne du sende simple strukturer med over.

Hvis du brugte sockets kunne du sende ethvert serialiserbart objekt over. Men sockets
og web app matcher ikke særligt godt.
Avatar billede usse Nybegynder
28. oktober 2008 - 10:53 #5
Hmm ok... Jamen så har jeg tænkt på at bruge en xml fil som string, hvis det ikke er helt umuligt :) Men næste problem er at jeg ikke kan få Jfreechart til at opdatere med jfreechart, det virker kun med almindelige komponenter hmm?

Eks.

<input type="button" class="button_3" value="Generate" onclick="alert( document.stat_applet.doIt( 'bah bah' ) )" />

--- Applet
public String doIt( String txt )
{
  //removeAll();
  //add( txtField );
  txtField.setText( txt );
  //setContentPane( new JPanel() );   
  //panel.removeAll();
  txtField.setText( generateData() );
  panel.repaint();
  //txtField.setText( ""+ panel.getComponents().length );
  return "ok";
}
public String generateData()
{
  DefaultCategoryDataset result = new DefaultCategoryDataset();
  result.addValue( 33, "2006 (Int)", "Tot" ); ....
}
--------
Metode kaldet sker, men der sker intet med Jfreechart, kun hvis jeg smider generateData ind i init metoden hmm..?
Avatar billede usse Nybegynder
31. oktober 2008 - 16:35 #6
Nå men jeg fandt selv en løsning på problemet, har brugt en xml string og en dom parser og derved indlæst dataerne... hephey
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester