Ho iniziato a esercitarmi con JavaFX creando una semplice calcolatrice, come IDE utilizzo IntelliJ idea e eseguendo il programmino tramite run tutto funziona correttamente, il problema si crea quando eseguo la build, infatti l'eseguibile che ottengo nella cartella out non da nessun cenno di vita quando premuto. Non ho trovato nessuna soluzione in giro su internet e nonostante io esegua tutti i passaggi nulla sembra funzionare; lascio allegato il codice e gli screenshot.
package com.example.minicalculator;
/* -----------------------------------------------------------------------
MiniCalculator
Programmer: Davide Giacomelli
Program creation: 28/11/2021
Last edit: 28/11/2021
Version: 1.0.0
-----------------------------------------------------------------------*/
import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.stage.*;
import java.text.DecimalFormat;
import static javafx.scene.paint.Color.WHITE;
public class MiniCalculator extends Application implements EventHandler<ActionEvent> {
public static void main(String[] args) {
launch(args);
}
//GUI controls
private Button[] keyBoard;
private TextField screen;
//GUI layout
private VBox kPanel;
private HBox kLine1, kLine2, kLine3, kLine4;
private Scene scene;
Stage stage;
//calculator variables
private double result;
String[] splitCheck0;
/*
change this value to change the precision
cambia questo valore per modificare la precisione
*/
private String precision = "0.######";
// metodo main
@Override
public void start(Stage s) {
Image icon = new Image("file:src/icons/ico.png");
screen = new TextField();
screen.setMinHeight(50);
screen.setEditable(false);
Button[] keyBoard = new Button[]{
new Button("7"), new Button("8"), new Button("9"), new Button("×"),
new Button("4"), new Button("5"), new Button("6"), new Button("+"),
new Button("1"), new Button("2"), new Button("3"), new Button("÷"),
new Button("C"), new Button("0"), new Button("="), new Button("-"),
};
for (int i = 0; i < keyBoard.length; i++) {
keyBoard[i].setMinHeight(45);
keyBoard[i].setMinWidth(45);
keyBoard[i].setMaxHeight(45);
keyBoard[i].setMaxWidth(45);
keyBoard[i].setOnAction(this);
}
kPanel = new VBox();
kLine1 = new HBox();
kLine1.getChildren().addAll(keyBoard[0], keyBoard[1], keyBoard[2], keyBoard[3]);
kLine2 = new HBox();
kLine2.getChildren().addAll(keyBoard[4], keyBoard[5], keyBoard[6], keyBoard[7]);
kLine3 = new HBox();
kLine3.getChildren().addAll(keyBoard[8], keyBoard[9], keyBoard[10], keyBoard[11]);
kLine4 = new HBox();
kLine4.getChildren().addAll(keyBoard[12], keyBoard[13], keyBoard[14], keyBoard[15]);
kPanel.getChildren().addAll(screen, kLine1, kLine2, kLine3, kLine4);
scene = new Scene(kPanel, 181.9, 232, WHITE);
stage = new Stage();
stage.setResizable(false);
stage.getIcons().add(icon);
stage.setScene(scene);
stage.show();
}
//il seguente metodo inserisce il valore digitato tramite tastiera
private Button btn;
private String btnText;
private String screenText;
@Override
public void handle(ActionEvent e) {
btn = (Button) e.getSource();
btnText = btn.getText();
screenText = screen.getText();
//Verifica del valore + operazione collegata al dato inserito
//Reset
if (btnText == "C") {
screen.setText("");
//operatori
} else if (btnText == "+") {
runCalcs("+");
}
else if (btnText == "-") {
runCalcs("-");
}
else if (btnText == "×") {
runCalcs("×");
}
else if (btnText == "÷") {
runCalcs("÷");
}
//uguale
else if (btnText == "=")
{
runCalcs("=");
}
//valore numerico
else if (Integer.parseInt(btnText) > 0 & Integer.parseInt(btnText) <= 9)
{
screen.setText(screenText + btnText);
// eccezione 0 (se l'utente tenta di posizonare 0 all'inizio della stringa non viene posizionato)
} else if (Integer.parseInt(btnText) == 0)
{
if (screen.getText() == "") {
}
else if (screen.getText().contains("+"))
set0("+");
else if (screen.getText().contains("-"))
set0("-");
else if (screen.getText().contains("×"))
set0("×");
else if (screen.getText().contains("÷"))
set0("÷");
}
//errore
else
System.exit(-666);
}
/*
Questo metodo verifica i simboli già presenti nell'operazione ed effettua i calcoli,
dopodiché visualizza sullo schermo risultato + il parametro s
*/
String[] numbers;
DecimalFormat format;
private void runCalcs(String s) {
format = new DecimalFormat(precision);
//l'uguale non deve essere inserito nel calcolo visto che non è un operatore
if(s=="=") {
s="";
}
if(screen.getText().contains("+"))
{
numbers = screen.getText().replace(",", ".").replace("+", "/").split("/", 0);
result = Double.parseDouble(numbers[0]) + Double.parseDouble(numbers[1]);
screen.setText((format.format(result)+s).replace(",", "."));
}
else if(screen.getText().contains("-"))
{
numbers = screen.getText().replace(",", ".").replace("-", "/").split("/", 0);
result = Double.parseDouble(numbers[0]) - Double.parseDouble(numbers[1]);
screen.setText((format.format(result)+s).replace(",", "."));
}
else if(screen.getText().contains("×"))
{
numbers = screen.getText().replace(",", ".").replace("×", "/").split("/", 0);
result = Double.parseDouble(numbers[0]) * Double.parseDouble(numbers[1]);
screen.setText((format.format(result)+s).replace(",", "."));
}
else if(screen.getText().contains("÷"))
{
numbers = screen.getText().replace(",", ".").replace("÷", "/").split("/", 0);
result = Double.parseDouble(numbers[0]) /Double.parseDouble(numbers[1]);
screen.setText((format.format(result)+s).replace(",", "."));
}
//nessun operatore già presente sullo schermo
else {
screen.setText(screen.getText()+s.replace(",", "."));
}
}
// Il seguente metodo verifica se il valore inserito dopo l'operatore è 0, in questo caso non inserisce il valore
public void set0(String s) {
splitCheck0 = screen.getText().replace(",", ".").replace(s, "/").split("/", 0);
if(splitCheck0[1]!="")
screen.setText(screenText + btnText);
}
}
Allegati: