Showing posts with label JavaFX. Show all posts
Showing posts with label JavaFX. Show all posts
Thursday, June 16, 2016
Read csv, run in background thread and update JavaFX TableView dynamically
[フレーム]
It's modified version of last example "Read csv file, display in JavaFX TableView", with the job run in background thread. I also add dummy delay to simulate long time operation in background thread.
JavaFXCSVTableView.java
package javafxcsvtableview;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFXCSVTableView extends Application {
public class Record {
//Assume each record have 6 elements, all String
private SimpleStringProperty f1, f2, f3, f4, f5, f6;
public String getF1() {
return f1.get();
}
public String getF2() {
return f2.get();
}
public String getF3() {
return f3.get();
}
public String getF4() {
return f4.get();
}
public String getF5() {
return f5.get();
}
public String getF6() {
return f6.get();
}
Record(String f1, String f2, String f3, String f4,
String f5, String f6) {
this.f1 = new SimpleStringProperty(f1);
this.f2 = new SimpleStringProperty(f2);
this.f3 = new SimpleStringProperty(f3);
this.f4 = new SimpleStringProperty(f4);
this.f5 = new SimpleStringProperty(f5);
this.f6 = new SimpleStringProperty(f6);
}
}
private final TableView<Record> tableView = new TableView<>();
private final ObservableList<Record> dataList
= FXCollections.observableArrayList();
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("java-buddy.blogspot.com");
Group root = new Group();
TableColumn columnF1 = new TableColumn("f1");
columnF1.setCellValueFactory(
new PropertyValueFactory<>("f1"));
TableColumn columnF2 = new TableColumn("f2");
columnF2.setCellValueFactory(
new PropertyValueFactory<>("f2"));
TableColumn columnF3 = new TableColumn("f3");
columnF3.setCellValueFactory(
new PropertyValueFactory<>("f3"));
TableColumn columnF4 = new TableColumn("f4");
columnF4.setCellValueFactory(
new PropertyValueFactory<>("f4"));
TableColumn columnF5 = new TableColumn("f5");
columnF5.setCellValueFactory(
new PropertyValueFactory<>("f5"));
TableColumn columnF6 = new TableColumn("f6");
columnF6.setCellValueFactory(
new PropertyValueFactory<>("f6"));
tableView.setItems(dataList);
tableView.getColumns().addAll(
columnF1, columnF2, columnF3, columnF4, columnF5, columnF6);
VBox vBox = new VBox();
vBox.setSpacing(10);
vBox.getChildren().add(tableView);
root.getChildren().add(vBox);
primaryStage.setScene(new Scene(root, 700, 250));
primaryStage.show();
//readCSV();
//run in background thread
new Thread() {
@Override
public void run() {
readCSV();
};
}.start();
}
private void readCSV() {
System.out.println("Platform.isFxApplicationThread(): "
+ Platform.isFxApplicationThread());
String CsvFile = "/home/buddy/test/test.csv";
String FieldDelimiter = ",";
BufferedReader br;
try {
br = new BufferedReader(new FileReader(CsvFile));
String line;
while ((line = br.readLine()) != null) {
String[] fields = line.split(FieldDelimiter, -1);
Record record = new Record(fields[0], fields[1], fields[2],
fields[3], fields[4], fields[5]);
dataList.add(record);
//Add delay to simulate long time operation
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(JavaFXCSVTableView.class.getName())
.log(Level.SEVERE, null, ex);
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(JavaFXCSVTableView.class.getName())
.log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(JavaFXCSVTableView.class.getName())
.log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
launch(args);
}
}
Saturday, January 9, 2016
JavaFX example to capture screen/GUI nodes
JavaFX example to capture screen/GUI nodes:
package javafxcapturescreen;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.SnapshotParameters;
import javafx.scene.control.Button;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
/**
*
* @web http://java-buddy.blogspot.com/
*/
public class JavaFXCaptureScreen extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Scene scene = new Scene(root, 300, 250);
Button btnCaptureScene = new Button();
btnCaptureScene.setText("Capture scene");
btnCaptureScene.setOnAction((ActionEvent event) -> {
WritableImage writableImage = scene.snapshot(null);
File file = new File("capturedScene.png");
try {
ImageIO.write(SwingFXUtils.fromFXImage(writableImage, null), "png", file);
System.out.println("Captured: " + file.getAbsolutePath());
} catch (IOException ex) {
Logger.getLogger(JavaFXCaptureScreen.class.getName()).log(Level.SEVERE, null, ex);
}
});
Button btnCaptureRoot = new Button();
btnCaptureRoot.setText("Capture root");
btnCaptureRoot.setOnAction((ActionEvent event) -> {
WritableImage writableImage = root.snapshot(new SnapshotParameters(), null);
File file = new File("capturedRoot.png");
try {
ImageIO.write(SwingFXUtils.fromFXImage(writableImage, null), "png", file);
System.out.println("Captured: " + file.getAbsolutePath());
} catch (IOException ex) {
Logger.getLogger(JavaFXCaptureScreen.class.getName()).log(Level.SEVERE, null, ex);
}
});
VBox vBox = new VBox();
vBox.getChildren().addAll(btnCaptureScene, btnCaptureRoot);
root.getChildren().add(vBox);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
capturedScene.png
capturedRoot.png
標籤:
JavaFX,
JavaFX 8 example
Monday, October 5, 2015
Remote run JavaFX on Raspbian Jessie, from Netbeans/Windows 10
Raspbian Jessie is a new major upgrade of official Raspberry Pi OS. This video show how to create Remote Java SE Platform on Netbeans IDE running under Windows 10, deploy JavaFX application remotely to Raspberry Pi running Raspbian Jessie.
Source: Remote run JavaFX on Raspbian Jessie, from Netbeans/Windows 10
[フレーム]
Source: Remote run JavaFX on Raspbian Jessie, from Netbeans/Windows 10
標籤:
JavaFX,
NetBeans,
Raspberry Pi
Friday, September 25, 2015
JavaFX Lighting effect of Light.Spot
[フレーム]
javafx.scene.effect.Light.Spot represents a spot light source at a given position in 3D space, with configurable direction and focus.
package javafx_lighting;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Lighting extends Application {
@Override
public void start(Stage primaryStage) {
//Light.Spot: Represents a spot light source at a given position in
//3D space, with configurable direction and focus.
Light.Spot lightSpot = new Light.Spot();
lightSpot.setX(0);
lightSpot.setY(0);
lightSpot.setZ(0);
lightSpot.setColor(Color.ANTIQUEWHITE);
Lighting lighting = new Lighting();
lighting.setLight(lightSpot);
lighting.setSurfaceScale(5.0);
lighting.setDiffuseConstant(1.0);
ColorPicker colorPicker = new ColorPicker(Color.ANTIQUEWHITE);
colorPicker.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
lightSpot.setColor(colorPicker.getValue());
}
});
Button btn = new Button("Button with Lighting");
btn.setEffect(lighting);
TextField textField = new TextField("TextField with Lighting");
textField.setEffect(lighting);
Text text = new Text("Text with lighting");
text.setFont(Font.font ("Verdana", FontWeight.BOLD, 40));
text.setFill(Color.WHITE);
text.setEffect(lighting);
Circle circle = new Circle(20,Color.WHITE);
circle.setEffect(lighting);
Rectangle rectangle = new Rectangle(50, 50, Color.WHITE);
rectangle.setEffect(lighting);
ImageView imageView = new ImageView(new Image("http://goo.gl/kYEQl"));
imageView.setEffect(lighting);
HBox hBoxShape = new HBox();
hBoxShape.getChildren().addAll(rectangle, circle, imageView);
Label labelXYZ = new Label("X, Y, Z");
Slider sliderX = new Slider();
sliderX.setMin(0);
sliderX.setMax(900.0);
sliderX.setValue(0);
sliderX.setMajorTickUnit(100);
sliderX.setMinorTickCount(2);
sliderX.setShowTickLabels(true);
sliderX.setShowTickMarks(true);
sliderX.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setX((Double)new_val);
});
Slider sliderY = new Slider();
sliderY.setMin(0);
sliderY.setMax(500.0);
sliderY.setValue(0);
sliderY.setMajorTickUnit(100);
sliderY.setMinorTickCount(2);
sliderY.setShowTickLabels(true);
sliderY.setShowTickMarks(true);
sliderY.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setY((Double)new_val);
});
Slider sliderZ = new Slider();
sliderZ.setMin(0);
sliderZ.setMax(500.0);
sliderZ.setValue(0);
sliderZ.setMajorTickUnit(100);
sliderZ.setMinorTickCount(2);
sliderZ.setShowTickLabels(true);
sliderZ.setShowTickMarks(true);
sliderZ.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setZ((Double)new_val);
});
//
Label labelPointsAtX = new Label("PointsAtX, PointsAtY, PointsAtZ");
Slider sliderPointsAtX = new Slider();
sliderPointsAtX.setMin(0);
sliderPointsAtX.setMax(900.0);
sliderPointsAtX.setValue(0);
sliderPointsAtX.setMajorTickUnit(300);
sliderPointsAtX.setMinorTickCount(3);
sliderPointsAtX.setShowTickLabels(true);
sliderPointsAtX.setShowTickMarks(true);
sliderPointsAtX.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setPointsAtX((Double)new_val);
});
Slider sliderPointsAtY = new Slider();
sliderPointsAtY.setMin(0);
sliderPointsAtY.setMax(500.0);
sliderPointsAtY.setValue(0);
sliderPointsAtY.setMajorTickUnit(100);
sliderPointsAtY.setMinorTickCount(2);
sliderPointsAtY.setShowTickLabels(true);
sliderPointsAtY.setShowTickMarks(true);
sliderPointsAtY.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setPointsAtY((Double)new_val);
});
Slider sliderPointsAtZ = new Slider();
sliderPointsAtZ.setMin(0);
sliderPointsAtZ.setMax(500.0);
sliderPointsAtZ.setValue(0);
sliderPointsAtZ.setMajorTickUnit(100);
sliderPointsAtZ.setMinorTickCount(2);
sliderPointsAtZ.setShowTickLabels(true);
sliderPointsAtZ.setShowTickMarks(true);
sliderPointsAtZ.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightSpot.setPointsAtZ((Double)new_val);
});
//
Label labelSurfaceScale = new Label("SurfaceScale");
Slider sliderSurfaceScale = new Slider();
sliderSurfaceScale.setMin(0);
sliderSurfaceScale.setMax(10);
sliderSurfaceScale.setValue(5.0);
sliderSurfaceScale.setMajorTickUnit(1);
sliderSurfaceScale.setMinorTickCount(2);
sliderSurfaceScale.setShowTickLabels(true);
sliderSurfaceScale.setShowTickMarks(true);
sliderSurfaceScale.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setSurfaceScale((Double)new_val);
});
Label labelDiffuse = new Label("DiffuseConstant");
Slider sliderDiffuse = new Slider();
sliderDiffuse.setMin(0);
sliderDiffuse.setMax(2);
sliderDiffuse.setValue(1);
sliderDiffuse.setMajorTickUnit(1);
sliderDiffuse.setMinorTickCount(4);
sliderDiffuse.setShowTickLabels(true);
sliderDiffuse.setShowTickMarks(true);
sliderDiffuse.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setDiffuseConstant((Double)new_val);
});
VBox vBox = new VBox();
vBox.setPadding(new Insets(10, 10, 10, 10));
vBox.getChildren().addAll(colorPicker, btn, text, textField, hBoxShape,
labelXYZ, sliderX, sliderY, sliderZ,
labelPointsAtX, sliderPointsAtX, sliderPointsAtY, sliderPointsAtZ,
labelSurfaceScale, sliderSurfaceScale, labelDiffuse, sliderDiffuse);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 600);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
標籤:
JavaFX,
JavaFX 8 example
JavaFX Lighting effect of Light.Point
[フレーム]
javafx.scene.effect.Light.Point represents a light source at a given position in 3D space.
package javafx_lighting;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Lighting extends Application {
@Override
public void start(Stage primaryStage) {
//Light.Point: Represents a light source at a given position in 3D space.
Light.Point lightPoint = new Light.Point();
lightPoint.setX(0);
lightPoint.setY(0);
lightPoint.setZ(0);
lightPoint.setColor(Color.GOLD);
Lighting lighting = new Lighting();
lighting.setLight(lightPoint);
lighting.setSurfaceScale(5.0);
lighting.setDiffuseConstant(1.0);
ColorPicker colorPicker = new ColorPicker(Color.GOLD);
colorPicker.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
lightPoint.setColor(colorPicker.getValue());
}
});
Button btn = new Button("Button with Lighting");
btn.setEffect(lighting);
TextField textField = new TextField("TextField with Lighting");
textField.setEffect(lighting);
Text text = new Text("Text with lighting");
text.setFont(Font.font ("Verdana", FontWeight.BOLD, 40));
text.setFill(Color.WHITE);
text.setEffect(lighting);
Circle circle = new Circle(20,Color.WHITE);
circle.setEffect(lighting);
Rectangle rectangle = new Rectangle(50, 50, Color.WHITE);
rectangle.setEffect(lighting);
ImageView imageView = new ImageView(new Image("http://goo.gl/kYEQl"));
imageView.setEffect(lighting);
HBox hBoxShape = new HBox();
hBoxShape.getChildren().addAll(rectangle, circle, imageView);
Label labelX = new Label("X: "
+ "The x coordinate of the light position.");
Slider sliderX = new Slider();
sliderX.setMin(0);
sliderX.setMax(900.0);
sliderX.setValue(0);
sliderX.setMajorTickUnit(100);
sliderX.setMinorTickCount(2);
sliderX.setShowTickLabels(true);
sliderX.setShowTickMarks(true);
sliderX.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightPoint.setX((Double)new_val);
});
Label labelY = new Label("Y: "
+ "The y coordinate of the light position.");
Slider sliderY = new Slider();
sliderY.setMin(0);
sliderY.setMax(500.0);
sliderY.setValue(0);
sliderY.setMajorTickUnit(100);
sliderY.setMinorTickCount(2);
sliderY.setShowTickLabels(true);
sliderY.setShowTickMarks(true);
sliderY.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightPoint.setY((Double)new_val);
});
Label labelZ = new Label("Z: "
+ "The z coordinate of the light position.");
Slider sliderZ = new Slider();
sliderZ.setMin(0);
sliderZ.setMax(500.0);
sliderZ.setValue(0);
sliderZ.setMajorTickUnit(100);
sliderZ.setMinorTickCount(2);
sliderZ.setShowTickLabels(true);
sliderZ.setShowTickMarks(true);
sliderZ.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lightPoint.setZ((Double)new_val);
});
Label labelSurfaceScale = new Label("SurfaceScale");
Slider sliderSurfaceScale = new Slider();
sliderSurfaceScale.setMin(0);
sliderSurfaceScale.setMax(10);
sliderSurfaceScale.setValue(1.5);
sliderSurfaceScale.setMajorTickUnit(1);
sliderSurfaceScale.setMinorTickCount(2);
sliderSurfaceScale.setShowTickLabels(true);
sliderSurfaceScale.setShowTickMarks(true);
sliderSurfaceScale.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setSurfaceScale((Double)new_val);
});
Label labelDiffuse = new Label("DiffuseConstant");
Slider sliderDiffuse = new Slider();
sliderDiffuse.setMin(0);
sliderDiffuse.setMax(2);
sliderDiffuse.setValue(1);
sliderDiffuse.setMajorTickUnit(1);
sliderDiffuse.setMinorTickCount(4);
sliderDiffuse.setShowTickLabels(true);
sliderDiffuse.setShowTickMarks(true);
sliderDiffuse.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setDiffuseConstant((Double)new_val);
});
VBox vBox = new VBox();
vBox.setPadding(new Insets(10, 10, 10, 10));
vBox.getChildren().addAll(colorPicker, btn, text, textField, hBoxShape,
labelX, sliderX, labelY, sliderY, labelZ, sliderZ,
labelSurfaceScale, sliderSurfaceScale, labelDiffuse, sliderDiffuse);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 900, 500);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Related:
- JavaFX Lighting effect of Light.Distant
標籤:
JavaFX,
JavaFX 8 example
Tuesday, September 22, 2015
Interactive demo of JavaFX Lighting effect of Light.Distant
[フレーム]
- javafx.scene.effect.Lighting is an effect that simulates a light source shining on the given content, which can be used to give flat objects a more realistic, three-dimensional appearance.
- javafx.scene.effect.Light.Distant represents a distant light source
JavaFX_Lighting.java
package javafx_lighting;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Lighting extends Application {
@Override
public void start(Stage primaryStage) {
//Light.Distant: Represents a distant light source.
Light.Distant light = new Light.Distant();
light.setAzimuth(45);
light.setElevation(45);
light.setColor(Color.AZURE);
Lighting lighting = new Lighting();
lighting.setLight(light);
lighting.setSurfaceScale(5.0);
lighting.setDiffuseConstant(1.0);
ColorPicker colorPicker = new ColorPicker(Color.AZURE);
colorPicker.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
light.setColor(colorPicker.getValue());
}
});
Button btn = new Button("Button with Lighting");
btn.setEffect(lighting);
TextField textField = new TextField("TextField with Lighting");
textField.setEffect(lighting);
Text text = new Text("Text with lighting");
text.setFont(Font.font ("Verdana", FontWeight.BOLD, 40));
text.setFill(Color.WHITE);
text.setEffect(lighting);
Circle circle = new Circle(20, Color.rgb(255,255,255));
circle.setEffect(lighting);
Rectangle rectangle = new Rectangle(50, 50, Color.rgb(255,255,255));
rectangle.setEffect(lighting);
ImageView imageView = new ImageView(new Image("http://goo.gl/kYEQl"));
imageView.setEffect(lighting);
HBox hBoxShape = new HBox();
hBoxShape.getChildren().addAll(rectangle, circle, imageView);
Label labelAzimuth = new Label("Azimuth: "
+ "the direction angle for the light source on the XY plane.");
Slider sliderAzimuth = new Slider();
sliderAzimuth.setMin(0);
sliderAzimuth.setMax(360);
sliderAzimuth.setValue(45);
sliderAzimuth.setMajorTickUnit(90);
sliderAzimuth.setMinorTickCount(3);
sliderAzimuth.setShowTickLabels(true);
sliderAzimuth.setShowTickMarks(true);
sliderAzimuth.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
light.setAzimuth((Double)new_val);
});
Label labelElevation = new Label("Elevation: "
+ "the direction angle for the light source on the YZ plane.");
Slider sliderElevation = new Slider();
sliderElevation.setMin(0);
sliderElevation.setMax(360);
sliderElevation.setValue(45);
sliderElevation.setMajorTickUnit(90);
sliderElevation.setMinorTickCount(3);
sliderElevation.setShowTickLabels(true);
sliderElevation.setShowTickMarks(true);
sliderElevation.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
light.setElevation((Double)new_val);
});
Label labelSurfaceScale = new Label("SurfaceScale");
Slider sliderSurfaceScale = new Slider();
sliderSurfaceScale.setMin(0);
sliderSurfaceScale.setMax(10);
sliderSurfaceScale.setValue(1.5);
sliderSurfaceScale.setMajorTickUnit(1);
sliderSurfaceScale.setMinorTickCount(2);
sliderSurfaceScale.setShowTickLabels(true);
sliderSurfaceScale.setShowTickMarks(true);
sliderSurfaceScale.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setSurfaceScale((Double)new_val);
});
Label labelDiffuse = new Label("DiffuseConstant");
Slider sliderDiffuse = new Slider();
sliderDiffuse.setMin(0);
sliderDiffuse.setMax(2);
sliderDiffuse.setValue(1);
sliderDiffuse.setMajorTickUnit(1);
sliderDiffuse.setMinorTickCount(4);
sliderDiffuse.setShowTickLabels(true);
sliderDiffuse.setShowTickMarks(true);
sliderDiffuse.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
lighting.setDiffuseConstant((Double)new_val);
});
VBox vBox = new VBox();
vBox.setPadding(new Insets(10, 10, 10, 10));
vBox.getChildren().addAll(colorPicker, btn, text, textField, hBoxShape,
labelAzimuth, sliderAzimuth, labelElevation, sliderElevation,
labelSurfaceScale, sliderSurfaceScale, labelDiffuse, sliderDiffuse);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 853, 480);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Related:
- JavaFX Lighting effect of Light.Point
標籤:
JavaFX,
JavaFX 8 example
JavaFX Lighting effect
package javafx_lighting;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.effect.Lighting;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Lighting extends Application {
@Override
public void start(Stage primaryStage) {
Button btn1 = new Button();
btn1.setText("Normal Button");
Button btn2 = new Button();
btn2.setText("Button with Lighting");
btn2.setEffect(new Lighting());
TextField textField1 = new TextField("Normal TextField");
TextField textField2 = new TextField("TextField with Lighting");
textField2.setEffect(new Lighting());
Text text1 = new Text("Normal Text");
text1.setFont(Font.font ("Verdana", FontWeight.BOLD, 40));
text1.setFill(Color.RED);
Text text2 = new Text("Text with lighting");
text2.setFont(Font.font ("Verdana", FontWeight.BOLD, 40));
text2.setFill(Color.RED);
text2.setEffect(new Lighting());
Circle circle1 = new Circle(20, Color.rgb(156,216,255));
Circle circle2 = new Circle(20, Color.rgb(156,216,255));
circle2.setEffect(new Lighting());
Rectangle rectangle1 = new Rectangle(100, 100, Color.rgb(156,216,255));
Rectangle rectangle2 = new Rectangle(100, 100, Color.rgb(156,216,255));
rectangle2.setEffect(new Lighting());
HBox hBoxShape = new HBox();
hBoxShape.getChildren().addAll(rectangle1, rectangle2, circle1, circle2);
ImageView imageView1 = new ImageView(new Image("http://goo.gl/kYEQl"));
ImageView imageView2 = new ImageView(new Image("http://goo.gl/kYEQl"));
imageView2.setEffect(new Lighting());
HBox hBoxImageView = new HBox();
hBoxImageView.getChildren().addAll(imageView1, imageView2);
VBox vBox = new VBox();
vBox.setPadding(new Insets(10, 10, 10, 10));
vBox.getChildren().addAll(btn1, btn2, text1, text2,
textField1, textField2,
hBoxShape, hBoxImageView);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 450, 400);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
標籤:
JavaFX,
JavaFX 8 example
Thursday, September 17, 2015
JavaFX Reflection Effect
Example of using JavaFX Reflection Effect, javafx.scene.effect.Reflection .
Next: JavaFX Transition Animation with Reflection effect
[フレーム]
package javafx_reflection;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.effect.Reflection;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
/**
*
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Reflection extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("java-buddy.blogspot.com");
Group root = new Group();
Scene scene = new Scene(root, 700, 600, Color.WHITE);
Reflection reflection = new Reflection();
Button btn = new Button("Click Me");
btn.setOnAction((ActionEvent event) -> {
if(btn.getText().equals("Click Me")){
btn.setText("Hello! Thanks...");
reflection.setBottomOpacity(1.0);
}else{
btn.setText("Click Me");
reflection.setBottomOpacity(0.0);
}
});
btn.setEffect(reflection);
Text textView = new Text(50, 150, "java-buddy.blogspot.com");
textView.setFill(Color.BLUE);
textView.setFont(Font.font("Monospaced", 40));
textView.setEffect(reflection);
ImageView imageView = new ImageView(new Image("http://goo.gl/kYEQl"));
imageView.setEffect(reflection);
Slider slider = new Slider();
slider.setMin(-50);
slider.setMax(250);
slider.setValue(0);
slider.valueProperty().addListener(
(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) -> {
reflection.setTopOffset((double) new_val);
});
Label labelInfo = new Label();
labelInfo.setText(
"java.version: " + System.getProperty("java.version") + "\n"
+ "javafx.runtime.version: " + System.getProperty("javafx.runtime.version") + "\n"
+ "os.name: " + System.getProperty("os.name")
);
labelInfo.setEffect(reflection);
VBox vBox = new VBox();
vBox.setPadding(new Insets(20, 20, 20, 20));
vBox.getChildren().addAll(labelInfo, imageView, textView, btn, slider);
root.getChildren().add(vBox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Next: JavaFX Transition Animation with Reflection effect
標籤:
JavaFX,
JavaFX 8 example
Tuesday, September 15, 2015
JavaFX example of Transition Animation, ParallelTransition and SequentialTransition
JavaFX example of Transition Animation, ParallelTransition and SequentialTransition.
JavaFX_TransitionExample.java
Next: JavaFX Transition Animation with Reflection effect
[フレーム]
JavaFX_TransitionExample.java
package javafx_transitionexample;
import javafx.animation.FadeTransition;
import javafx.animation.ParallelTransition;
import javafx.animation.RotateTransition;
import javafx.animation.ScaleTransition;
import javafx.animation.SequentialTransition;
import javafx.animation.TranslateTransition;
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.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_TransitionExample extends Application {
@Override
public void start(Stage primaryStage) {
//Transition Example
//ref: http://docs.oracle.com/javafx/2/animations/basics.htm
ImageView imageView = new ImageView(new Image("http://goo.gl/kYEQl"));
FadeTransition fadeTransition
= new FadeTransition(Duration.millis(3000), imageView);
fadeTransition.setFromValue(1.0f);
fadeTransition.setToValue(0.3f);
fadeTransition.setCycleCount(2);
fadeTransition.setAutoReverse(true);
TranslateTransition translateTransition
= new TranslateTransition(Duration.millis(2000), imageView);
translateTransition.setFromX(0);
translateTransition.setToX(350);
translateTransition.setCycleCount(2);
translateTransition.setAutoReverse(true);
RotateTransition rotateTransition
= new RotateTransition(Duration.millis(3000), imageView);
rotateTransition.setByAngle(180f);
rotateTransition.setCycleCount(4);
rotateTransition.setAutoReverse(true);
ScaleTransition scaleTransition
= new ScaleTransition(Duration.millis(2000), imageView);
scaleTransition.setToX(2f);
scaleTransition.setToY(2f);
scaleTransition.setCycleCount(2);
scaleTransition.setAutoReverse(true);
ParallelTransition parallelTransition =
new ParallelTransition();
parallelTransition.getChildren().addAll(
fadeTransition,
translateTransition,
rotateTransition,
scaleTransition);
parallelTransition.setCycleCount(1);
//parallelTransition.play();
SequentialTransition sequentialTransition =
new SequentialTransition();
sequentialTransition.getChildren().addAll(
fadeTransition,
translateTransition,
rotateTransition,
scaleTransition);
sequentialTransition.setCycleCount(1);
//sequentialTransition.play();
//
Button btnParallelTransitionPlay =
new Button("parallelTransition.play");
btnParallelTransitionPlay.setOnAction((ActionEvent event) -> {
parallelTransition.play();
});
Button btnSequentialTransitionPlay =
new Button("sequentialTransition.play");
btnSequentialTransitionPlay.setOnAction((ActionEvent event) -> {
sequentialTransition.play();
});
HBox hbox = new HBox();
hbox.getChildren().addAll(
btnParallelTransitionPlay,
imageView,
btnSequentialTransitionPlay);
Label labelInfo = new Label();
labelInfo.setText(
"java.version: " + System.getProperty("java.version") + "\n"
+ "javafx.runtime.version: " + System.getProperty("javafx.runtime.version") + "\n"
+ "os.name: " + System.getProperty("os.name")
);
VBox vBox = new VBox();
vBox.getChildren().addAll(labelInfo, hbox);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 700, 250);
primaryStage.setTitle("java-buddy: Transition Example "
+ "- ParallelTransition/SequentialTransition");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Next: JavaFX Transition Animation with Reflection effect
標籤:
JavaFX,
JavaFX 8 example
Java + JavaFX + jSSC communicate with Arduino Board, run on Windows 10 and Raspberry Pi
It's a series of examples to program Java + JavaFX + jSSC(java-simple-serial-connector) on Windows 10 with NetBeans IDE. Run on Windows 10, to communicate with Arduino Board. And finally show how to remote deploy on Raspberry Pi using NetBeans IDE Remote Java SE Platform.
- Prepare jSSC - download and add library to NetBeans, and create project using it
- Example of using jSSC, communicate between JavaFX and Arduino Uno via USB Serial port
- JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input
- JavaFX + jSSC - read byte from Arduino Uno, display in LineChart
- Bi-direction communication between Arduino and PC using Java + jSSC
- Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno
(with setup Remote Java SE Platform on Netbeans/Windows 10, remote deploy to Raspberry Pi)
- Prepare jSSC - download and add library to NetBeans, and create project using it
- Example of using jSSC, communicate between JavaFX and Arduino Uno via USB Serial port
- JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input
- JavaFX + jSSC - read byte from Arduino Uno, display in LineChart
- Bi-direction communication between Arduino and PC using Java + jSSC
[フレーム]
- Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno
(with setup Remote Java SE Platform on Netbeans/Windows 10, remote deploy to Raspberry Pi)
[フレーム]
標籤:
Arduino,
JavaFX,
JavaFX 8,
NetBeans,
Raspberry Pi,
Windows 10
Thursday, September 10, 2015
Add data to JavaFX LineChart, and shift out the oldest data.
JavaFX example to update LineChart: user enter new data to the LineChart associated series, and remove the oldest item from the series. I tried three approachs to achieve the goal. The first one is obviously wrong. Check the code to know my implement.
[フレーム]
package javafx_linechart;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_LineChart extends Application {
Label label1, label2, label3;
XYChart.Series series1, series2, series3;
final int MAX_NUM = 10;
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
Button btn = new Button();
btn.setText("Add item");
btn.setOnAction((ActionEvent event) -> {
try{
int i = Integer.parseInt(textField.getText());
System.out.println(String.valueOf(i));
removeAndAdd(series1, i);
reduceSeriesXValue(series2, i);
shiftSeriesYValue(series3, i);
printSeries(series1, label1);
printSeries(series2, label2);
printSeries(series3, label3);
}catch (NumberFormatException ex){
System.out.println(ex.toString());
}
});
label1 = new Label();
label2 = new Label();
label3 = new Label();
//prepare LineChart 1
final NumberAxis xAxis1 = new NumberAxis();
final NumberAxis yAxis1 = new NumberAxis();
final LineChart<Number,Number> lineChart1 =
new LineChart<>(xAxis1,yAxis1);
series1 = new XYChart.Series();
series1.setName("series1");
lineChart1.getData().add(series1);
//prepare LineChart 2
final NumberAxis xAxis2 = new NumberAxis();
final NumberAxis yAxis2 = new NumberAxis();
final LineChart<Number,Number> lineChart2 =
new LineChart<>(xAxis2,yAxis2);
series2 = new XYChart.Series();
series2.setName("series2");
lineChart2.getData().add(series2);
//prepare LineChart 3
final NumberAxis xAxis3 = new NumberAxis();
final NumberAxis yAxis3 = new NumberAxis();
final LineChart<Number,Number> lineChart3 =
new LineChart<>(xAxis3,yAxis3);
series3 = new XYChart.Series();
series3.setName("series3");
lineChart3.getData().add(series3);
//init dummy data
for(int i=0; i<MAX_NUM; i++){
series1.getData().add(new XYChart.Data(i, i));
series2.getData().add(new XYChart.Data(i, i));
series3.getData().add(new XYChart.Data(i, i));
}
printSeries(series1, label1);
printSeries(series2, label2);
printSeries(series3, label3);
VBox vBox1 = new VBox();
vBox1.getChildren().addAll(lineChart1, label1);
VBox vBox2 = new VBox();
vBox2.getChildren().addAll(lineChart2, label2);
VBox vBox3 = new VBox();
vBox3.getChildren().addAll(lineChart3, label3);
HBox chartBox = new HBox();
chartBox.getChildren().addAll(vBox1, vBox2, vBox3);
CheckBox cbAnimated = new CheckBox("animated");
cbAnimated.setSelected(true);
cbAnimated.selectedProperty().addListener(
(ObservableValue<? extends Boolean> observable,
Boolean oldValue, Boolean newValue) -> {
lineChart1.setAnimated(newValue);
lineChart2.setAnimated(newValue);
lineChart3.setAnimated(newValue);
});
VBox vBox = new VBox();
vBox.getChildren().addAll(cbAnimated, textField, btn, chartBox);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 650);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
//Remove the first item, and add the new item - WRONG result!
private void removeAndAdd(XYChart.Series series, int newValue){
series.getData().remove(0);
XYChart.Data newData =
new XYChart.Data(series.getData().size(), newValue);
series.getData().add(newData);
}
//remove the first item
//reduce XValue of all items by 1
//add the new item
public void reduceSeriesXValue(XYChart.Series series, int newValue){
series.getData().remove(0);
int numOfPoint = series.getData().size();
for(int i=0; i<numOfPoint; i++){
//reduce XValue
XYChart.Data<Number, Number> data =
(XYChart.Data<Number, Number>)series.getData().get(i);
int x = (int)data.getXValue();
data.setXValue(x-1);
}
series.getData().add(new XYChart.Data(numOfPoint, newValue));
}
//Shift all YValue
//add the new item
public void shiftSeriesYValue(XYChart.Series series, int newValue){
int numOfPoint = series.getData().size();
for(int i=0; i<numOfPoint-1; i++){
XYChart.Data<Number, Number> ShiftDataUp =
(XYChart.Data<Number, Number>)series.getData().get(i+1);
Number shiftValue = ShiftDataUp.getYValue();
XYChart.Data<Number, Number> ShiftDataDn =
(XYChart.Data<Number, Number>)series.getData().get(i);
ShiftDataDn.setYValue(shiftValue);
}
XYChart.Data<Number, Number> lastData =
(XYChart.Data<Number, Number>)series.getData().get(numOfPoint-1);
lastData.setYValue(newValue);
}
//display the data of series
private void printSeries(XYChart.Series series, Label label){
String printOut = "";
int numOfPoint = series.getData().size();
for(int i=0; i<numOfPoint; i++){
XYChart.Data<Number, Number> data =
(XYChart.Data<Number, Number>)series.getData().get(i);
printOut += i + " - " + data.getXValue()
+ " : " + data.getYValue() + "\n";
}
label.setText(printOut);
}
public static void main(String[] args) {
launch(args);
}
}
標籤:
JavaFX,
JavaFX 8 example
Friday, September 4, 2015
JavaFX example - set ViewPort of ImageView
[フレーム]
Example to change ViewPort of ImageView, and rotate ImageView.
package javafx_imageview_viewport;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_ImageView_Viewport extends Application {
@Override
public void start(Stage primaryStage) {
ImageView imageView1 = new ImageView(new Image("http://goo.gl/kYEQl"));
//Example to rotate ImageView
Image image2 = new Image("http://goo.gl/kYEQl");
Rectangle2D viewportRect2 = new Rectangle2D(
image2.getWidth()/4,
image2.getHeight()/4,
image2.getWidth()*3/4,
image2.getHeight()*3/4);
ImageView imageView2 = new ImageView(image2);
imageView2.setViewport(viewportRect2);
Slider sliderRotate = new Slider();
sliderRotate.setMin(0);
sliderRotate.setMax(360);
sliderRotate.setValue(0);
sliderRotate.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
imageView2.setRotate((double)newValue);
});
//Example to change ViewPort
Image image3 = new Image("http://goo.gl/kYEQl");
Rectangle2D viewportRect3 = new Rectangle2D(
0,
0,
image3.getWidth(),
image3.getHeight());
ImageView imageView3 = new ImageView(image3);
imageView3.setViewport(viewportRect3);
Slider sliderViewPort = new Slider();
sliderViewPort.setMin(0);
sliderViewPort.setMax(1.0);
sliderViewPort.setValue(1.0);
sliderViewPort.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
Rectangle2D newViewportRect3 = new Rectangle2D(
0,
0,
(double)newValue*image3.getWidth(),
(double)newValue*image3.getHeight());
imageView3.setViewport(newViewportRect3);
});
VBox vBox = new VBox();
vBox.getChildren().addAll(imageView1,
imageView2, sliderRotate,
imageView3, sliderViewPort);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 350);
primaryStage.setTitle("java-buddy: ImageVIew ViewPort");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
標籤:
JavaFX,
JavaFX 8 example
Sunday, August 16, 2015
JavaFX Essentials
To detect mouse event on JavaFX LineChart Series Node - here is a simple example to change mouse cursor when mouse move over the lines.
seriesR.getNode().setOnMouseEntered(onMouseEnteredSeriesListener);
seriesR.getNode().setOnMouseExited(onMouseExitedSeriesListener);
...
//Lambda expression
EventHandler<MouseEvent> onMouseEnteredSeriesListener =
(MouseEvent event) -> {
((Node)(event.getSource())).setCursor(Cursor.HAND);
};
/* traditional expression
EventHandler<MouseEvent> onMouseEnteredSeriesListener =
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
((Node)(event.getSource())).setCursor(Cursor.HAND);
}
};
*/
//Lambda expression
EventHandler<MouseEvent> onMouseExitedSeriesListener =
(MouseEvent event) -> {
((Node)(event.getSource())).setCursor(Cursor.DEFAULT);
};
/* traditional expression
EventHandler<MouseEvent> onMouseExitedSeriesListener =
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
((Node)(event.getSource())).setCursor(Cursor.DEFAULT);
}
};
*/
Modify the example code of "Display brightness histogram on JavaFX LineChart" to change mouse cursor when move over lines in LineCharts.
[フレーム]
package javafx_imagehistogram;
import java.awt.Color;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com
*/
public class JavaFX_ImageHistogram extends Application {
String defaultImage = "http://goo.gl/kYEQl";
@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 textSrc = new TextField();
textSrc.setText(defaultImage);
Button btnDo = new Button("Do Histogram");
ImageView imageView = new ImageView();
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<String, Number> chartHistogram
= new LineChart<>(xAxis, yAxis);
chartHistogram.setCreateSymbols(false);
final CategoryAxis xAxis_brightness = new CategoryAxis();
final NumberAxis yAxis_brightness = new NumberAxis();
final LineChart<String, Number> brightnessHistogram
= new LineChart<>(xAxis_brightness, yAxis_brightness);
brightnessHistogram.setCreateSymbols(false);
VBox vBoxHistogram = new VBox();
vBoxHistogram.getChildren().addAll(chartHistogram, brightnessHistogram);
ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(vBoxHistogram);
btnDo.setOnAction((ActionEvent event) -> {
String imageSrc = textSrc.getText();
Image image = new Image(imageSrc);
imageView.setImage(image);
chartHistogram.getData().clear();
brightnessHistogram.getData().clear();
ImageHistogram imageHistogram = new ImageHistogram(image);
if(imageHistogram.isSuccess()){
XYChart.Series seriesR = imageHistogram.getSeriesRed();
XYChart.Series seriesG = imageHistogram.getSeriesGreen();
XYChart.Series seriesB = imageHistogram.getSeriesBlue();
XYChart.Series seriesBr = imageHistogram.getSeriesBrightness();
chartHistogram.getData().addAll(
seriesR, seriesG, seriesB);
brightnessHistogram.getData().add(seriesBr);
seriesR.getNode().setOnMouseEntered(onMouseEnteredSeriesListener);
seriesR.getNode().setOnMouseExited(onMouseExitedSeriesListener);
seriesG.getNode().setOnMouseEntered(onMouseEnteredSeriesListener);
seriesG.getNode().setOnMouseExited(onMouseExitedSeriesListener);
seriesB.getNode().setOnMouseEntered(onMouseEnteredSeriesListener);
seriesB.getNode().setOnMouseExited(onMouseExitedSeriesListener);
seriesBr.getNode().setOnMouseEntered(onMouseEnteredSeriesListener);
seriesBr.getNode().setOnMouseExited(onMouseExitedSeriesListener);
}
});
HBox hBox = new HBox();
hBox.getChildren().addAll(imageView, scrollPane);
VBox vBox = new VBox();
vBox.getChildren().addAll(labelInfo, textSrc, btnDo, hBox);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 500);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
//Lambda expression
EventHandler<MouseEvent> onMouseEnteredSeriesListener =
(MouseEvent event) -> {
((Node)(event.getSource())).setCursor(Cursor.HAND);
};
/* traditional expression
EventHandler<MouseEvent> onMouseEnteredSeriesListener =
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
((Node)(event.getSource())).setCursor(Cursor.HAND);
}
};
*/
//Lambda expression
EventHandler<MouseEvent> onMouseExitedSeriesListener =
(MouseEvent event) -> {
((Node)(event.getSource())).setCursor(Cursor.DEFAULT);
};
/* traditional expression
EventHandler<MouseEvent> onMouseExitedSeriesListener =
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
((Node)(event.getSource())).setCursor(Cursor.DEFAULT);
}
};
*/
class ImageHistogram {
private Image image;
private long alpha[] = new long[256];
private long red[] = new long[256];
private long green[] = new long[256];
private long blue[] = new long[256];
private long brightness[] = new long[256];
XYChart.Series seriesAlpha;
XYChart.Series seriesRed;
XYChart.Series seriesGreen;
XYChart.Series seriesBlue;
XYChart.Series seriesBrightness;
private boolean success;
ImageHistogram(Image src) {
image = src;
success = false;
//init
for (int i = 0; i < 256; i++) {
alpha[i] = red[i] = green[i] = blue[i] = 0;
brightness[i] = 0;
}
PixelReader pixelReader = image.getPixelReader();
if (pixelReader == null) {
return;
}
//count pixels
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int argb = pixelReader.getArgb(x, y);
int a = (0xff & (argb >> 24));
int r = (0xff & (argb >> 16));
int g = (0xff & (argb >> 8));
int b = (0xff & argb);
alpha[a]++;
red[r]++;
green[g]++;
blue[b]++;
//Convert RGB to HSB (or HSV)
float[] hsb = new float[3];
Color.RGBtoHSB(r, g, b, hsb);
brightness[(int)(hsb[2]*255)]++;
}
}
seriesAlpha = new XYChart.Series();
seriesRed = new XYChart.Series();
seriesGreen = new XYChart.Series();
seriesBlue = new XYChart.Series();
seriesBrightness = new XYChart.Series();
seriesAlpha.setName("alpha");
seriesRed.setName("red");
seriesGreen.setName("green");
seriesBlue.setName("blue");
seriesBrightness.setName("Brightness");
//copy alpha[], red[], green[], blue[], brightness
//to seriesAlpha, seriesRed, seriesGreen, seriesBlue, seriesBrightness
for (int i = 0; i < 256; i++) {
seriesAlpha.getData().add(new XYChart.Data(String.valueOf(i), alpha[i]));
seriesRed.getData().add(new XYChart.Data(String.valueOf(i), red[i]));
seriesGreen.getData().add(new XYChart.Data(String.valueOf(i), green[i]));
seriesBlue.getData().add(new XYChart.Data(String.valueOf(i), blue[i]));
seriesBrightness.getData().add(new XYChart.Data(String.valueOf(i), brightness[i]));
}
success = true;
}
public boolean isSuccess() {
return success;
}
public XYChart.Series getSeriesAlpha() {
return seriesAlpha;
}
public XYChart.Series getSeriesRed() {
return seriesRed;
}
public XYChart.Series getSeriesGreen() {
return seriesGreen;
}
public XYChart.Series getSeriesBlue() {
return seriesBlue;
}
public XYChart.Series getSeriesBrightness() {
return seriesBrightness;
}
}
}
標籤:
JavaFX,
JavaFX 8 example
Tuesday, July 28, 2015
Display brightness histogram on JavaFX LineChart
The java.awt.Color.RGBtoHSB(int r, int g, int b, float[] hsbvals) method converts RGB components to an equivalent set of values for hue, saturation, and brightness that are the three components of the HSB model. We can easy modify last post "Display image's Histogram on JavaFX LineChart" to display brightness histogram.
[フレーム]
remark: In the video, photos from http://www.ultimate-photo-tips.com/histogram-examples.html are used as sample to generate histogram.
Example code:
package javafx_imagehistogram;
import java.awt.Color;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com
*/
public class JavaFX_ImageHistogram extends Application {
String defaultImage = "http://goo.gl/kYEQl";
@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 textSrc = new TextField();
textSrc.setText(defaultImage);
Button btnDo = new Button("Do Histogram");
ImageView imageView = new ImageView();
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<String, Number> chartHistogram
= new LineChart<>(xAxis, yAxis);
chartHistogram.setCreateSymbols(false);
final CategoryAxis xAxis_brightness = new CategoryAxis();
final NumberAxis yAxis_brightness = new NumberAxis();
final LineChart<String, Number> brightnessHistogram
= new LineChart<>(xAxis_brightness, yAxis_brightness);
brightnessHistogram.setCreateSymbols(false);
VBox vBoxHistogram = new VBox();
vBoxHistogram.getChildren().addAll(chartHistogram, brightnessHistogram);
ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(vBoxHistogram);
btnDo.setOnAction((ActionEvent event) -> {
String imageSrc = textSrc.getText();
Image image = new Image(imageSrc);
imageView.setImage(image);
chartHistogram.getData().clear();
brightnessHistogram.getData().clear();
ImageHistogram imageHistogram = new ImageHistogram(image);
if(imageHistogram.isSuccess()){
chartHistogram.getData().addAll(
//imageHistogram.getSeriesAlpha(),
imageHistogram.getSeriesRed(),
imageHistogram.getSeriesGreen(),
imageHistogram.getSeriesBlue());
brightnessHistogram.getData().add(
imageHistogram.getSeriesBrightness());
}
});
HBox hBox = new HBox();
hBox.getChildren().addAll(imageView, scrollPane);
VBox vBox = new VBox();
vBox.getChildren().addAll(labelInfo, textSrc, btnDo, hBox);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 500);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
class ImageHistogram {
private Image image;
private long alpha[] = new long[256];
private long red[] = new long[256];
private long green[] = new long[256];
private long blue[] = new long[256];
private long brightness[] = new long[256];
XYChart.Series seriesAlpha;
XYChart.Series seriesRed;
XYChart.Series seriesGreen;
XYChart.Series seriesBlue;
XYChart.Series seriesBrightness;
private boolean success;
ImageHistogram(Image src) {
image = src;
success = false;
//init
for (int i = 0; i < 256; i++) {
alpha[i] = red[i] = green[i] = blue[i] = 0;
brightness[i] = 0;
}
PixelReader pixelReader = image.getPixelReader();
if (pixelReader == null) {
return;
}
//count pixels
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int argb = pixelReader.getArgb(x, y);
int a = (0xff & (argb >> 24));
int r = (0xff & (argb >> 16));
int g = (0xff & (argb >> 8));
int b = (0xff & argb);
alpha[a]++;
red[r]++;
green[g]++;
blue[b]++;
//Convert RGB to HSB (or HSV)
float[] hsb = new float[3];
Color.RGBtoHSB(r, g, b, hsb);
brightness[(int)(hsb[2]*255)]++;
}
}
seriesAlpha = new XYChart.Series();
seriesRed = new XYChart.Series();
seriesGreen = new XYChart.Series();
seriesBlue = new XYChart.Series();
seriesBrightness = new XYChart.Series();
seriesAlpha.setName("alpha");
seriesRed.setName("red");
seriesGreen.setName("green");
seriesBlue.setName("blue");
seriesBrightness.setName("Brightness");
//copy alpha[], red[], green[], blue[], brightness
//to seriesAlpha, seriesRed, seriesGreen, seriesBlue, seriesBrightness
for (int i = 0; i < 256; i++) {
seriesAlpha.getData().add(new XYChart.Data(String.valueOf(i), alpha[i]));
seriesRed.getData().add(new XYChart.Data(String.valueOf(i), red[i]));
seriesGreen.getData().add(new XYChart.Data(String.valueOf(i), green[i]));
seriesBlue.getData().add(new XYChart.Data(String.valueOf(i), blue[i]));
seriesBrightness.getData().add(new XYChart.Data(String.valueOf(i), brightness[i]));
}
success = true;
}
public boolean isSuccess() {
return success;
}
public XYChart.Series getSeriesAlpha() {
return seriesAlpha;
}
public XYChart.Series getSeriesRed() {
return seriesRed;
}
public XYChart.Series getSeriesGreen() {
return seriesGreen;
}
public XYChart.Series getSeriesBlue() {
return seriesBlue;
}
public XYChart.Series getSeriesBrightness() {
return seriesBrightness;
}
}
}
- Detect mouse event on JavaFX LineChart Series Node
標籤:
JavaFX,
JavaFX 8 example
Saturday, July 25, 2015
Display image's Histogram (RGB) on JavaFX LineChart
Example to display Histogram of on-line images on JavaFX LineChart
[フレーム]
remark: In the video, photos from http://www.ultimate-photo-tips.com/histogram-examples.html are used as sample to generate histogram.
Example code:
package javafx_imagehistogram;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com
*/
public class JavaFX_ImageHistogram extends Application {
String defaultImage = "http://goo.gl/kYEQl";
@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 textSrc = new TextField();
textSrc.setText(defaultImage);
Button btnDo = new Button("Do Histogram");
ImageView imageView = new ImageView();
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<String, Number> chartHistogram
= new LineChart<>(xAxis, yAxis);
chartHistogram.setCreateSymbols(false);
btnDo.setOnAction((ActionEvent event) -> {
String imageSrc = textSrc.getText();
Image image = new Image(imageSrc);
imageView.setImage(image);
chartHistogram.getData().clear();
ImageHistogram imageHistogram = new ImageHistogram(image);
if(imageHistogram.isSuccess()){
chartHistogram.getData().addAll(
//imageHistogram.getSeriesAlpha(),
imageHistogram.getSeriesRed(),
imageHistogram.getSeriesGreen(),
imageHistogram.getSeriesBlue());
}
});
HBox hBox = new HBox();
hBox.getChildren().addAll(imageView, chartHistogram);
VBox vBox = new VBox();
vBox.getChildren().addAll(labelInfo, textSrc, btnDo, hBox);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 500);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
class ImageHistogram {
private Image image;
private long alpha[] = new long[256];
private long red[] = new long[256];
private long green[] = new long[256];
private long blue[] = new long[256];
XYChart.Series seriesAlpha;
XYChart.Series seriesRed;
XYChart.Series seriesGreen;
XYChart.Series seriesBlue;
private boolean success;
ImageHistogram(Image src) {
image = src;
success = false;
//init
for (int i = 0; i < 256; i++) {
alpha[i] = red[i] = green[i] = blue[i] = 0;
}
PixelReader pixelReader = image.getPixelReader();
if (pixelReader == null) {
return;
}
//count pixels
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int argb = pixelReader.getArgb(x, y);
int a = (0xff & (argb >> 24));
int r = (0xff & (argb >> 16));
int g = (0xff & (argb >> 8));
int b = (0xff & argb);
alpha[a]++;
red[r]++;
green[g]++;
blue[b]++;
}
}
seriesAlpha = new XYChart.Series();
seriesRed = new XYChart.Series();
seriesGreen = new XYChart.Series();
seriesBlue = new XYChart.Series();
seriesAlpha.setName("alpha");
seriesRed.setName("red");
seriesGreen.setName("green");
seriesBlue.setName("blue");
//copy alpha[], red[], green[], blue[]
//to seriesAlpha, seriesRed, seriesGreen, seriesBlue
for (int i = 0; i < 256; i++) {
seriesAlpha.getData().add(new XYChart.Data(String.valueOf(i), alpha[i]));
seriesRed.getData().add(new XYChart.Data(String.valueOf(i), red[i]));
seriesGreen.getData().add(new XYChart.Data(String.valueOf(i), green[i]));
seriesBlue.getData().add(new XYChart.Data(String.valueOf(i), blue[i]));
}
success = true;
}
public boolean isSuccess() {
return success;
}
public XYChart.Series getSeriesAlpha() {
return seriesAlpha;
}
public XYChart.Series getSeriesRed() {
return seriesRed;
}
public XYChart.Series getSeriesGreen() {
return seriesGreen;
}
public XYChart.Series getSeriesBlue() {
return seriesBlue;
}
}
}
- Display brightness histogram on JavaFX LineChart
標籤:
JavaFX,
JavaFX 8 example
JavaFX animating BarChart and PieChart
JavaFX example to show both animating BarChart and PieChart:
[フレーム]
package javafx_histogram;
import java.util.Random;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
* @web http://java-buddy.blogspot.com
*/
public class JavaFX_Histogram extends Application {
int group[] = new int[10];
@Override
public void start(Stage primaryStage) {
prepareData();
Label labelInfo = new Label();
labelInfo.setText(
"java.version: " + System.getProperty("java.version") + "\n"
+ "javafx.runtime.version: " + System.getProperty("javafx.runtime.version")
);
//barChart1 with setAnimated(false)
VBox vBoxBarChart1 = new VBox();
final CategoryAxis xAxis1 = new CategoryAxis();
final NumberAxis yAxis1 = new NumberAxis();
final BarChart<String, Number> barChart1
= new BarChart<>(xAxis1, yAxis1);
barChart1.setCategoryGap(0);
barChart1.setBarGap(0);
barChart1.setMaxSize(500, 450);
XYChart.Series series1 = new XYChart.Series();
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]));
barChart1.getData().addAll(series1);
Label labelAnimated1 = new Label();
barChart1.setAnimated(false);
vBoxBarChart1.getChildren().addAll(barChart1, labelAnimated1);
//- End of barChart1
//PieChart2 with setAnimated(false)
VBox vBoxPieChart2 = new VBox();
ObservableList<PieChart.Data> pieChartData
= FXCollections.observableArrayList(
new PieChart.Data("0-10", group[0]),
new PieChart.Data("10-20", group[1]),
new PieChart.Data("20-30", group[2]),
new PieChart.Data("30-40", group[3]),
new PieChart.Data("40-50", group[4]),
new PieChart.Data("50-60", group[5]),
new PieChart.Data("60-70", group[6]),
new PieChart.Data("70-80", group[7]),
new PieChart.Data("80-90", group[8]),
new PieChart.Data("90-100", group[9])
);
final PieChart pieChart2
= new PieChart(pieChartData);
pieChart2.setMaxSize(500, 450);
Label labelAnimated2 = new Label();
pieChart2.setAnimated(false);
vBoxPieChart2.getChildren().addAll(pieChart2, labelAnimated2);
//- End of pieChart2
HBox hBoxCharts = new HBox();
hBoxCharts.getChildren().addAll(vBoxBarChart1, vBoxPieChart2);
Label labelCnt = new Label();
VBox vBox = new VBox();
vBox.getChildren().addAll(labelInfo, hBoxCharts, labelCnt);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 1000, 500);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
Random random = new Random();
//Apply Animating Data in Charts
//ref: http://docs.oracle.com/javafx/2/charts/bar-chart.htm
//"Animating Data in Charts" section
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(
new KeyFrame(Duration.millis(200), (ActionEvent actionEvent) -> {
int data = random.nextInt(100);
/*
final int mean = 50;
final int standardDeviation = 10;
int data = mean + (int) (random.nextGaussian() * standardDeviation);
*/
if (data <= 10) {
group[0]++;
series1.getData().set(0, new XYChart.Data("0-10", group[0]));
pieChartData.set(0, new PieChart.Data("0-10", group[0]));
} else if (data <= 20) {
group[1]++;
series1.getData().set(1, new XYChart.Data("10-20", group[1]));
pieChartData.set(1, new PieChart.Data("10-20", group[1]));
} else if (data <= 30) {
group[2]++;
series1.getData().set(2, new XYChart.Data("20-30", group[2]));
pieChartData.set(2, new PieChart.Data("20-30", group[2]));
} else if (data <= 40) {
group[3]++;
series1.getData().set(3, new XYChart.Data("30-40", group[3]));
pieChartData.set(3, new PieChart.Data("30-40", group[3]));
} else if (data <= 50) {
group[4]++;
series1.getData().set(4, new XYChart.Data("40-50", group[4]));
pieChartData.set(4, new PieChart.Data("40-50", group[4]));
} else if (data <= 60) {
group[5]++;
series1.getData().set(5, new XYChart.Data("50-60", group[5]));
pieChartData.set(5, new PieChart.Data("50-60", group[5]));
} else if (data <= 70) {
group[6]++;
series1.getData().set(6, new XYChart.Data("60-70", group[6]));
pieChartData.set(6, new PieChart.Data("60-70", group[6]));
} else if (data <= 80) {
group[7]++;
series1.getData().set(7, new XYChart.Data("70-80", group[7]));
pieChartData.set(7, new PieChart.Data("70-80", group[7]));
} else if (data <= 90) {
group[8]++;
series1.getData().set(8, new XYChart.Data("80-90", group[8]));
pieChartData.set(8, new PieChart.Data("80-90", group[8]));
} else if (data <= 100) {
group[9]++;
series1.getData().set(9, new XYChart.Data("10-100", group[9]));
pieChartData.set(9, new PieChart.Data("10-100", group[9]));
}
labelAnimated1.setText(
"barChart1.getAnimated() = " + barChart1.getAnimated());
labelAnimated2.setText(
"barChart2.getAnimated() = " + pieChart2.getAnimated());
String s = "";
for (int i = 0; i < 10; i++) {
s += " " + group[i];
}
labelCnt.setText(s);
}));
timeline.setCycleCount(1000);
timeline.setAutoReverse(true); //!?
timeline.play();
}
public static void main(String[] args) {
launch(args);
}
//generate dummy random data
private void prepareData() {
for (int i = 0; i < 10; i++) {
group[i] = 0;
}
}
}
標籤:
JavaFX,
JavaFX 8 example
Subscribe to:
Comments (Atom)