Monday, July 20, 2015

JavaFX BarChart example: plot data population in histogram

Example to plot data population in histogram using JavaFX BarChart.


package javafx_histogram;

import java.util.Random;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * @web http://java-buddy.blogspot.com
 */
public class JavaFX_Histogram extends Application {
    
    int DATA_SIZE = 1000;
    int data[] = new int[DATA_SIZE];
    int group[] = new int[10];
    
    @Override
    public void start(Stage primaryStage) {
        
        prepareData();
        groupData();
        
        Label labelInfo = new Label();
        labelInfo.setText(
            "java.version: " + System.getProperty("java.version") + "\n" +
            "javafx.runtime.version: " + System.getProperty("javafx.runtime.version")
        );
        
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String,Number> barChart = 
            new BarChart<>(xAxis,yAxis);
        barChart.setCategoryGap(0);
        barChart.setBarGap(0);
        
        xAxis.setLabel("Range");       
        yAxis.setLabel("Population");
        
        XYChart.Series series1 = new XYChart.Series();
        series1.setName("Histogram");       
        series1.getData().add(new XYChart.Data("0-10", group[0]));
        series1.getData().add(new XYChart.Data("10-20", group[1]));
        series1.getData().add(new XYChart.Data("20-30", group[2]));
        series1.getData().add(new XYChart.Data("30-40", group[3]));
        series1.getData().add(new XYChart.Data("40-50", group[4])); 
        
        series1.getData().add(new XYChart.Data("50-60", group[5]));
        series1.getData().add(new XYChart.Data("60-70", group[6]));
        series1.getData().add(new XYChart.Data("70-80", group[7]));
        series1.getData().add(new XYChart.Data("80-90", group[8]));
        series1.getData().add(new XYChart.Data("90-100", group[9]));
        
        barChart.getData().addAll(series1);
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(labelInfo, barChart);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 800, 450);
        
        primaryStage.setTitle("java-buddy.blogspot.com");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
    //generate dummy random data
    private void prepareData(){

        Random random = new Random();
        for(int i=0; i<DATA_SIZE; i++){
            data[i] = random.nextInt(100);
        }
    }
    
    //count data population in groups
    private void groupData(){
        for(int i=0; i<10; i++){
            group[i]=0;
        }
        for(int i=0; i<DATA_SIZE; i++){
            if(data[i]<=10){
                group[0]++;
            }else if(data[i]<=20){
                group[1]++;
            }else if(data[i]<=30){
                group[2]++;
            }else if(data[i]<=40){
                group[3]++;
            }else if(data[i]<=50){
                group[4]++;
            }else if(data[i]<=60){
                group[5]++;
            }else if(data[i]<=70){
                group[6]++;
            }else if(data[i]<=80){
                group[7]++;
            }else if(data[i]<=90){
                group[8]++;
            }else if(data[i]<=100){
                group[9]++;
            }
        }
    }
    
}

Saturday, July 18, 2015

Validate and parse JavaFX TextField to various number

Example to Validate and parse JavaFX TextField to various number: Integer, Short, Long, Byte, Float, Double.


package javafx_validatenumber;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * @web http://java-buddy.blogspot.com
 * 
 * Validate and parse JavaFX TextField to various number,
 * Integer, Short, Long, Byte, Float, Double
 */
public class JavaFX_ValidateNumber extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        
        Label labelInfo = new Label();
        labelInfo.setText(
            "java.version: " + System.getProperty("java.version") + "\n" +
            "javafx.runtime.version: " + System.getProperty("javafx.runtime.version")
        );
        
        TextField textIn = new TextField();
        
        Label labelAnswer = new Label();
        
        Button btnIsInteger = new Button("is Integer?");
        btnIsInteger.setOnAction((ActionEvent event) -> {
            try{
                Integer i = Integer.parseInt(textIn.getText());
                labelAnswer.setText("Is Integer: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Integer!");
            }
        });
        
        Button btnIsShort = new Button("is Short?");
        btnIsShort.setOnAction((ActionEvent event) -> {
            try{
                Short i = Short.parseShort(textIn.getText());
                labelAnswer.setText("Is Short: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Short!");
            }
        });
        
        Button btnIsLong = new Button("is Long?");
        btnIsLong.setOnAction((ActionEvent event) -> {
            try{
                Long i = Long.parseLong(textIn.getText());
                labelAnswer.setText("Is Long: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Long!");
            }
        });
        
        Button btnIsByte = new Button("is Byte?");
        btnIsByte.setOnAction((ActionEvent event) -> {
            try{
                Byte i = Byte.parseByte(textIn.getText());
                labelAnswer.setText("Is Byte: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Byte!");
            }
        });
        
        Button btnIsFloat = new Button("is Float?");
        btnIsFloat.setOnAction((ActionEvent event) -> {
            try{
                Float i = Float.parseFloat(textIn.getText());
                labelAnswer.setText("Is Float: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Float!");
            }
        });
        
        Button btnIsDouble = new Button("is Double?");
        btnIsDouble.setOnAction((ActionEvent event) -> {
            try{
                Double i = Double.parseDouble(textIn.getText());
                labelAnswer.setText("Is Double: " + i);
            }catch (NumberFormatException e){
                labelAnswer.setText("Not Double!");
            }
        });
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(labelInfo, textIn, btnIsInteger, 
            btnIsShort, btnIsLong, btnIsByte, btnIsFloat, btnIsDouble, 
            labelAnswer);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}


Saturday, July 4, 2015

javap - Java Class Disassembler

javap is a command line Java Class Disassembler. It disassembles one or more class files. Its output depends on the options used. If no options are used, javap prints out the package, protected, and public fields and methods of the classes passed to it. javap prints its output to stdout.