package
hashcalc;
import
java.io.File;
import
java.io.IOException;
import
java.security.NoSuchAlgorithmException;
import
java.util.logging.Level;
import
java.util.logging.Logger;
import
javafx.application.Application;
import
javafx.concurrent.WorkerStateEvent;
import
javafx.event.ActionEvent;
import
javafx.geometry.HPos;
import
javafx.scene.Scene;
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.layout.ColumnConstraints;
import
javafx.scene.layout.GridPane;
import
javafx.scene.layout.RowConstraints;
import
javafx.stage.FileChooser;
import
javafx.stage.Stage;
public
class
HashCalc
extends
Application {
Stage stage;
String baseDir = getClass().getResource(
"image/"
).toString();
Image icoApp =
new
Image(baseDir +
"Binary.png"
);
Image icoFile =
new
Image(baseDir +
"File.png"
);
Image icoPen =
new
Image(baseDir +
"Pencil.png"
);
File file;
Button button_file;
Button button_sha256;
TextField field_file;
TextField field_sha256;
@Override
public
void
start(Stage primaryStage) {
this
.stage = primaryStage;
GridPane root =
new
GridPane();
root.setId(
"pane"
);
ColumnConstraints col1 =
new
ColumnConstraints();
ColumnConstraints col2 =
new
ColumnConstraints(
600
);
ColumnConstraints col3 =
new
ColumnConstraints();
root.getColumnConstraints().addAll(col1, col2, col3);
RowConstraints row1 =
new
RowConstraints();
row1.setFillHeight(
true
);
RowConstraints row2 =
new
RowConstraints();
row2.setFillHeight(
true
);
root.getRowConstraints().addAll(row1, row2);
Label label_file =
new
Label(
"File Name"
);
GridPane.setHalignment(label_file, HPos.RIGHT);
root.add(label_file,
0
,
0
);
field_file =
new
TextField();
field_file.setEditable(
false
);
GridPane.setHalignment(field_file, HPos.LEFT);
root.add(field_file,
1
,
0
);
button_file =
new
Button();
button_file.setGraphic(
new
ImageView(icoFile));
button_file.setOnAction((ActionEvent t) -> {
FileChooser fileChooser =
new
FileChooser();
file = fileChooser.showOpenDialog(stage);
field_file.setText(file.toString());
clearMessageDigest();
});
root.add(button_file,
2
,
0
);
Label label_sha256 =
new
Label(
"SHA-256"
);
GridPane.setHalignment(label_sha256, HPos.RIGHT);
root.add(label_sha256,
0
,
1
);
field_sha256 =
new
TextField();
field_sha256.setEditable(
false
);
GridPane.setHalignment(field_sha256, HPos.LEFT);
root.add(field_sha256,
1
,
1
);
button_sha256 =
new
Button();
button_sha256.setGraphic(
new
ImageView(icoPen));
button_sha256.setOnAction((ActionEvent t) -> {
try
{
calcMessageDigest(
"SHA-256"
, field_sha256);
}
catch
(NoSuchAlgorithmException | IOException ex) {
Logger.getLogger(HashCalc.
class
.getName()).log(Level.SEVERE,
null
, ex);
}
});
root.add(button_sha256,
2
,
1
);
Scene scene =
new
Scene(root);
scene.getStylesheets().add(getClass().getResource(getClass().getSimpleName() +
".css"
).toExternalForm());
setAppTitle();
stage.setResizable(
false
);
stage.getIcons().add(icoApp);
stage.setScene(scene);
stage.show();
}
void
clearMessageDigest() {
field_sha256.setText(
""
);
}
void
calcMessageDigest(String algorithm, TextField field)
throws
NoSuchAlgorithmException, IOException {
CalcMessageDigest md =
new
CalcMessageDigest(file, algorithm);
md.setOnSucceeded((WorkerStateEvent t) -> {
field.setText(md.getValue());
field.requestFocus();
setAppTitle();
button_file.setDisable(
false
);
button_sha256.setDisable(
false
);
});
Thread th =
new
Thread(md);
th.setDaemon(
true
);
th.start();
setAppTitleRun();
button_file.setDisable(
true
);
button_sha256.setDisable(
true
);
}
void
setAppTitle() {
stage.setTitle(getClass().getSimpleName());
}
void
setAppTitleRun() {
stage.setTitle(getClass().getSimpleName() +
" - calculating"
);
}
public
static
void
main(String[] args) {
launch(args);
}
}
0 件のコメント:
コメントを投稿