es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar valores de visualización para el eje de JavaFX.

NumberAxis y CategoryAxis se utilizan para trazar mi AreaChart.

Me gustaría saber cómo puedo cambiar los valores de visualización para ambos ejes ya que necesito:
– mostrar humanReadableByteCount (KB, MB, GB) en lugar de la representación de bytes para el eje Y
– mostrar solo la hora: minuto: segundo para el eje X

No pude encontrar información sobre cómo modificar los valores de visualización en la doc: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/NumberAxis.html

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para modificar los valores de visualización de NumberAxis y CategoryAxis en un JavaFX AreaChart:

    Para NumberAxis:

    1. Cree un formateador de etiquetas personalizado que convierta bytes a humanReadableByteCount (KB, MB, GB). Puede usar la clase FileSizeUtils de la biblioteca org.apache.commons.io para realizar esto.
    import org.apache.commons.io.FileUtils;
    import javafx.scene.chart.Axis;
    import javafx.scene.chart.NumberAxis;
    import javafx.util.StringConverter;
    
    public class ByteAxisLabelFormatter extends StringConverter<number> {
        private final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
        private final int base = 1024;
    
        @Override
        public String toString(Number bytes) {
            return FileUtils.byteCountToDisplaySize(bytes.longValue());
        }
    
        @Override
        public Number fromString(String string) {
            throw new UnsupportedOperationException("Not supported.");
        }
    }
    
    
    1. Establezca el formateador de etiquetas en el objeto NumberAxis:
    NumberAxis yAxis = new NumberAxis();
    yAxis.setTickLabelFormatter(new ByteAxisLabelFormatter());
    

    Para CategoryAxis:

    1. Si desea mostrar solo la hora:minuto: segundo en el eje X, puede crear un formateador de etiquetas personalizado que convierta el valor de fecha/hora a una cadena en el formato deseado:
    import java.time.LocalTime; 
    import javafx.scene.chart.Axis;
    import javafx.scene.chart.CategoryAxis;
    import javafx.util.StringConverter;
    
    public class TimeAxisLabelFormatter extends StringConverter<string> {
    
        @Override
        public String toString(String dateTime) {
            // Suponiendo que la cadena fecha/hora 'dateTime' está en formato ISO como "2011-12-03T10:15:30"
            return LocalTime.parse(dateTime).toString(); // devuelve la cadena en formato "hh:mm:ss"
        }
    
        @Override
        public String fromString(String string) {
            throw new UnsupportedOperationException("Not supported.");
        }
    }
    
    
    1. Establezca el formateador de etiquetas en el objeto CategoryAxis:

    CategoryAxis xAxis = new CategoryAxis();
    xAxis.setTickLabelFormatter(new TimeAxisLabelFormatter());

Comments are closed.