[API Review]: RT-28148 - Add createSymbols Property to AreaChart / StackedAreaChart

John Smith John_Smith at symantec.com
Wed Mar 13 17:55:16 PDT 2013


There are symbols in legends, which don't have data items and sometimes users want these symbols styled differently from symbols marking data points in charts.

Mark, in your proposal, would you invoke something like the code below to get the legend symbol for a series?
  ISymbol legendSymbolForSeries1 = factory.getSymbol(series1, null);

Also, on style, is there a precedence for prefixing interface names with I in the JavaFX code?

---------

I do like the idea of some kind of factory mechanism to customize chart symbols.

There have been numerous questions on forums related to chart symbol (and legend and line) customization.

https://forums.oracle.com/forums/thread.jspa?threadID=2411524 "How to remove symbols from an AreaChart in JavaFX"
https://forums.oracle.com/forums/thread.jspa?messageID=9697930 "Create onMouseClickEvent on Symbol of the chart"
https://forums.oracle.com/forums/thread.jspa?messageID=10145108 "How to customize line chart series and symbols?"
https://forums.oracle.com/forums/thread.jspa?messageID=10013764 "Pie Chart and legend symbols"
https://forums.oracle.com/forums/thread.jspa?messageID=1063034 "Toggle the visibility of a single series with symbols"
https://forums.oracle.com/forums/thread.jspa?messageID=10286441 "Coloring the legend"
https://forums.oracle.com/forums/thread.jspa?messageID=10598795 "Display Tooltips on charts values?"
https://forums.oracle.com/forums/thread.jspa?messageID=10680210 "Creating a table within the actual Chart"
http://stackoverflow.com/questions/11949891/javafx2-linechart-symbols-and-css "LineChart symbols and CSS"
http://stackoverflow.com/questions/12287484/controlling-symbols-etc-in-linecharts-inline-programmatically "Controlling symbols, etc. in lineCharts inline programmatically"
http://stackoverflow.com/questions/12622709/javafx-2-0-how-to-change-legend-color-of-a-linechart-dynamically "How to change legend color of a LineChart dynamically?"
http://stackoverflow.com/questions/9757848/how-to-dynamically-change-line-style-in-javafx-2-0-line-chart "How to dynamically change line style in JavaFX 2.0 line chart?"
http://stackoverflow.com/questions/15237192/how-to-display-bar-value-on-top-of-bar-javafx "how to display bar value on top of bar javafx"

People do have difficulties trying to get charts to look and work the way they want.
It's somewhat understandable because there are a million different ways you can imagine charts to look and data to be represented, so they tend to be pretty heavily customized.

All of the above questions were answerable using the current public API (mostly before the code was open sourced).  JavaFX is flexible enough that you can get it to do pretty much anything with a fairly minimal API, but knowing a few tricks such as lookup by css selector, helps in customizing complex hierarchical nodes like charts (in the absence of easily discoverable public api).

I guess, the good news from this is that JavaFX charts is a feature that gets some usage.
It's also a nice library and one of the reason people use it is that the default charts look nice - fresh and clean.

In terms of stuff that people struggle with, it would probably be (in decreasing order of precedence):
  Concurrency,
  Tables,
  Custom charts,
  Working out why javafx is not on the classpath,
  Deployment,
  Dialogs,
  Layout,
  Reusing nodes in the scene graph

-----Original Message-----
From: openjfx-dev-bounces at openjdk.java.net [mailto:openjfx-dev-bounces at openjdk.java.net] On Behalf Of Mark Fortner
Sent: Wednesday, March 13, 2013 11:32 AM
To: Sven Reimers
Cc: openjfx-dev at openjdk.java.net
Subject: Re: [API Review]: RT-28148 - Add createSymbols Property to AreaChart / StackedAreaChart

The SymbolFactory idea should probably be discussed a little further.

It would be useful if there was a simple Symbol interface that you could use.  This would let you turn any Node subclass into a Symbol.

public interface ISymbol{

   Node getNode();
   void setStyle(.....)
   void addEventHandler(....)
   void removeEventHandler(....)

}

The event handler methods would insure that the symbol can always respond to mouseover and click events (or any other events the user wants to support).  The style method makes it easy to make the symbol pretty.

The factory would then do something simple like:

public interface ISymbolFactory {

   /** Get's a series specific symbol. */
   ISymbol getSymbol(Series<X,Y> series, Data<X, Y> dataItem);

}


Inside the chart, the default implementation of the SymbolFactory could be an anonymous inner class or create an external implementation if you wanted it to serve as a template for users to extend and customize.  You could pass new implementations of the SymbolFactory into the class in the constructor if you wanted to change the look.  You'd want to do this before you actually started passing data to the chart, hence the idea of putting the factory in a constructor.

Does that sound reasonable?


Mark



On Tue, Mar 12, 2013 at 3:01 AM, Sven Reimers <sven.reimers at gmail.com>wrote:

> I like the idea of a symbol factory as well, but it will need to be in 
> some way configured per series, since a data item (XYChart.Data) does 
> not know about its series.
>
> Seems this may be a bigger API change though - Should we track this 
> separately?
>
> Any further comments?
>
> -Sven
>
>
>
> On Tue, Mar 12, 2013 at 12:33 AM, Jasper Potts <jasper.potts at oracle.com>wrote:
>
>> A symbol factory would also be a good idea, take in data item and 
>> return Node.
>>
>> Jasper
>>
>> On Mar 11, 2013, at 4:20 PM, Mark Fortner <phidias51 at gmail.com> wrote:
>>
>> > I recently came across the "createSymbols" property code in the
>> LineChart
>> > and was wondering if there was some reason to write it this way 
>> > rather
>> than
>> > simply having a default implementation of some Symbol interface 
>> > which
>> the
>> > user can replace by simply setting the value.
>> >
>> > For my application, I ended up writing some conditional decorators 
>> > for
>> the
>> > symbol, but as I was doing this I thought how much easier it would 
>> > be if the symbols had a factory where one could register new 
>> > implementations,
>> or
>> > replace the factory itself to provide some conditional switching 
>> > logic,
>> etc.
>> >
>> > Any thoughts on improving the flexibility of the charts?
>> >
>> > Cheers,
>> >
>> > Mark
>> >
>> >
>> >
>> > On Mon, Mar 11, 2013 at 3:53 PM, Paru Somashekar < 
>> > parvathi.somashekar at oracle.com> wrote:
>> >
>> >> Ok thanks Jasper. That makes sense. I updated RT-21539 with the 
>> >> our
>> plan
>> >> of not adding the API at the Series level.
>> >>
>> >> thanks,
>> >> Paru.
>> >>
>> >> On 3/11/13 3:25 PM, Jasper Potts wrote:
>> >>
>> >>> I feel like adding "createSymbols" boolean property to Area,& 
>> >>> StackedArea charts makes sense to match LineChart.
>> >>>
>> >>>
>> >>> I don't like the idea of adding API to the series object on 
>> >>> XYChart as that is more generic and used by many chart types. If 
>> >>> the user needs
>> fine
>> >>> grain control of symbols like in RT-21539 they can turn auto 
>> >>> symbol generation off with "createSymbols = false" then create 
>> >>> their own
>> symbol
>> >>> nodes for the cases when they do want them.
>> >>>
>> >>> Thanks
>> >>>
>> >>> Jasper
>> >>>
>> >>> On Mar 8, 2013, at 10:08 AM, Paru Somashekar<parvathi.** 
>> >>> somashekar at oracle.com <parvathi.somashekar at oracle.com>>  wrote:
>> >>>
>> >>> There is a request for adding the createSymbols flag at the 
>> >>> XYChart's
>> >>>> Series level instead of on Chart.
>> >>>> JIRA : http://javafx-jira.kenai.com/**browse/RT-21539<
>> http://javafx-jira.kenai.com/browse/RT-21539>
>> >>>>
>> >>>> I think it might be a good idea to add it at the Series level so 
>> >>>> that one can turn ON / OFF symbols per Series rather than for 
>> >>>> all the
>> series of
>> >>>> a chart.
>> >>>> The API could continue to be the same - except live at the 
>> >>>> Series
>> level.
>> >>>> Each chart can then create symbols for each of its Series only 
>> >>>> if
>> this flag
>> >>>> is turned on.
>> >>>> This might however not make much sense for Scatter, Bubble and
>> BarCharts.
>> >>>> What do you think Jasper?
>> >>>>
>> >>>> -Paru.
>> >>>>
>> >>>> On 3/8/13 4:12 AM, Sven Reimers wrote:
>> >>>>
>> >>>>> Hi all
>> >>>>>
>> >>>>> AreaChart and StackedAreaChart are missing an API to simply 
>> >>>>> disable
>> the
>> >>>>> creation of symbols. At the moment this is only possible by 
>> >>>>> complex
>> css
>> >>>>> style acrobatics. LineChart on the other hand already provides 
>> >>>>> a
>> simple
>> >>>>> way
>> >>>>> to do this. The proposed tweak takes the existing API from
>> LineChart and
>> >>>>> adds this to AreaChart and StackedAreaChart.
>> >>>>>
>> >>>>> Desired API change:
>> >>>>>
>> >>>>>  /**
>> >>>>>      * Indicates whether symbols for data points will be 
>> >>>>> created or not.
>> >>>>>      *
>> >>>>>      * @return true if symbols for data points will be created 
>> >>>>> and false otherwise.
>> >>>>>      */
>> >>>>>     public final boolean getCreateSymbols() { return 
>> >>>>> createSymbols.getValue(); }
>> >>>>>     public final void setCreateSymbols(boolean value) { 
>> >>>>> createSymbols.setValue(value); }
>> >>>>>     public final BooleanProperty createSymbolsProperty() { 
>> >>>>> return createSymbols; }
>> >>>>>
>> >>>>> Desired additional CSS property (incldues additional
>> StyleableProperty):
>> >>>>>
>> >>>>> -fx-create-symbols
>> >>>>>
>> >>>>>
>> >>>>> JIRA:
>> >>>>> http://javafx-jira.kenai.com/**browse/RT-28148<
>> http://javafx-jira.kenai.com/browse/RT-28148>
>> >>>>>
>> >>>>> Thank
>> >>>>>
>> >>>>> -Sven
>> >>>>>
>> >>>>> P.S. An updated patch will hopefully be available there too.
>> >>>>>
>> >>>>>
>> >>
>>
>>
>
>
> --
> Sven Reimers
>
> * Senior Expert Software Architect
> * NetBeans Dream Team Member: http://dreamteam.netbeans.org
> * Community Leader  NetBeans: http://community.java.net/netbeans
>                               Desktop Java:
> http://community.java.net/javadesktop
> * Duke's Choice Award Winner 2009
> * Blog: http://nbguru.blogspot.com
>
> * XING: https://www.xing.com/profile/Sven_Reimers8
> * LinkedIn: http://www.linkedin.com/in/svenreimers
>
> Join the NetBeans Groups:
> * XING: http://www.xing.com/group-20148.82db20
> * NUGM: http://haug-server.dyndns.org/display/NUGM/Home
> * LinkedIn: http://www.linkedin.com/groups?gid=1860468
>                    http://www.linkedin.com/groups?gid=107402
>                    http://www.linkedin.com/groups?gid=1684717
> * Oracle: https://mix.oracle.com/groups/18497
>


More information about the openjfx-dev mailing list