2012-06-22 33 views
7

Estoy tratando de dar estilo a mi diagrama de líneas de JavaFX, pero no puedo encontrar ninguna forma de establecer el color para series específicas. Sé que puedo crear estilo mediante CSS, pero no puedo encontrar cómo configurar ID o CLASS para mi serie.Cómo establecer un color específico para JavaFX XYChart.Series?

¿Puede alguien darme una pista sobre: ​​

  1. Cómo establecer un color de linecharts?
  2. ¿Cómo establecer una clase css en series?

Respuesta

12

En general, la forma preferida de estilo de gráficos es sin código, utilizando solo hojas de estilo css como recomienda jschoen. Además, si se requiere una mayor personalización, puede usar las búsquedas css desde el código para profundizar en los nodos generados a partir de los datos de la serie y aplicar varios estilos CSS adicionales.

Aquí hay información sobre cómo cambiar dinámicamente un JavaFX line chart style y un sample program para ir con la respuesta. En la aplicación de muestra, todo el estilo CSS adicional se realiza mediante una llamada setStyle desde el código. Utilizando una técnica de búsqueda similar, podría obtener acceso a los nodos de la serie para aplicar un estilo de estilo de hoja de estilo apropiado en lugar de una llamada de estilo de estilo.

+0

Solo quería decir que tiene algunos programas de ejemplo bastante buenos en su cuenta de git. Los encontré hoy y perdí un par de horas solo mirando a través de ellos. Un recurso muy útil. Gracias. –

+1

Puedo creer que el estilo de gráfico basado en CSS funciona bien para el software 'dashboard', pero es una abominación para cualquiera que intente trabajar con los datos de forma interactiva. Incluso las librerías de gráficos de javascript normalmente no lo obligan a actualizar una hoja de estilos para cambiar el tamaño del punto en un solo diagrama de dispersión. –

4

He encontrado un documento de Oracle en este Styling charts with CSS y en esa página de desplazamiento hacia abajo para Setting Chart Colors para lo que está buscando específicamente.

¿Cómo establecer un color para los diagramas de línea?

La manera más simple de esto es el siguiente fragmento de CSS:

.default-color0.chart-series-line { -fx-stroke: #e9967a; } 
.default-color1.chart-series-line { -fx-stroke: #f0e68c; } 
.default-color2.chart-series-line { -fx-stroke: #dda0dd; } 

Esto, desafortunadamente, no funcionará por id o qué serie, sino más bien el fin de la serie se colocan en el gráfico. También puede establecer los estilos de línea, aunque al hacerlo:

.chart-series-line {  
    -fx-stroke-width: 2px; 
    -fx-effect: null; 
} 

Cómo establecer una clase CSS a la serie?

Desafortunadamente no veo la manera de hacerlo. Sería bueno poder crear reglas CSS basadas en la propiedad del nombre XYChart.Series, pero no creo que eso sea posible.

+0

Gracias, pensé en cambiar los colores por defecto, pero necesitaré para activar/desactivar la serie (usuario tendrá funcionalidad para mostrar/ocultar serie). Y de esta manera no es la mejor manera de hacerlo. – Yurish

2

La respuesta de jewelsea parece indicar que debe colocar una clase de estilo en cada nodo de la serie. Estoy usando el siguiente código para aplicar un estilo a la serie de un gráfico de área y solo asignar una clase al nodo asociado con la serie. El código de ejemplo está en Scala, pero debería ser fácil de traducir.

Al crear la serie, añado una clase de estilo de la serie específica:

 val s = new XYChart.Series[Number, Number]() //create a new series 
     s.setName(seriesName)       //set its name (display in legend) 
     s.getNode.getStyleClass.add("series-" + seriesName) //add specific style class 

A continuación, dentro de la css -file Yo lo siguiente para cambiar el color de relleno de la serie '' butterwings:

.series-butterwings *.chart-series-area-fill{ 
    -fx-fill: #aab597; 
} 

Esto funciona, porque el nodo para el área de la serie está debajo del nodo de la serie (que es un grupo en el caso del gráfico de área).

+0

He intentado hacer esto pero descubrí que mi programa se cuelga en la llamada 'add'. ¿Alguien tuvo una experiencia similar? Estoy haciendo esto desde ScalaFx; no sé si eso hace la diferencia (aunque estoy llamando a los métodos nativos de javafx en lugar de los envoltorios). – Luciano

5

¿Cómo establecer un color para los diagramas de líneas?

Aquí está una manera simple de AreaChart o LineChart

XYChart chart = new AreaChart(); 
Series series = new Series(); 
chart.getData().add(series); 

Node fill = series.getNode().lookup(".chart-series-area-fill"); // only for AreaChart 
Node line = series.getNode().lookup(".chart-series-area-line"); 

Color color = Color.RED; // or any other color 

String rgb = String.format("%d, %d, %d", 
     (int) (color.getRed() * 255), 
     (int) (color.getGreen() * 255), 
     (int) (color.getBlue() * 255)); 

fill.setStyle("-fx-fill: rgba(" + rgb + ", 0.15);"); 
line.setStyle("-fx-stroke: rgba(" + rgb + ", 1.0);"); 
+1

Obtengo un nulo en estas líneas: series.getNode(). Lookup (". Chart-series-area-fill"); series.getNode(). Lookup (". Chart-series-area-line"); Estoy usando la tabla de áreas. – LordScone

+1

Para un LineChart pruebe 'series.getNode(). Lookup (". Chart-series-line ");'. – Pygmalion

+1

Me gustaría enfatizar que 'series.getNode(). Lookup()' debe llamarse ** después de ** agregar la serie al gráfico; de lo contrario, devuelve null. –

Cuestiones relacionadas