Tak więc dla samorozwoju postanowiłem sobie napisać kalkulator z GUI z pomocą pewnego tutoriala na Youtubie.
Generalnie rzecz wygląda następująco. Napisałem wczoraj kalkulator, odpaliłem. Działał.. Postanowiłem go zjarować. Czego jednak nie dokończyłem. Dziś zasiadłem do komputera i postanowiłem go odpalić. Wczorajszy plik nie chciał sie uruchomić więc wpadłem na pomysł ze utworzę nowy projekt i brutalnie przekopiuje zawartość ze starego.
Przekopiowałem. Generalnie kod wygląda tak :
Main:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/sample/sample.fxml"));
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("Calculator");
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Controller:
public class Controller {
@FXML
private Label result;
private long number1 = 0;
private String operator = "";
private boolean start = true;
private Model model = new Model();
@FXML
public void processNumbers(ActionEvent event) {
if (start) {
result.setText("");
start = false;
}
String value = ((Button) event.getSource()).getText();
result.setText(result.getText() + value);
}
@FXML
public void processOperators(ActionEvent event) {
String value = ((Button) event.getSource()).getText();
if (!value.equals("=")) {
if (!operator.isEmpty()) ;
operator = value;
number1 = Long.parseLong(result.getText());
result.setText("");
} else {
if (operator.isEmpty());
long number2 = Long.parseLong(result.getText());
float output = model.calculate(number2, number1, operator);
result.setText(String.valueOf(output));
operator = "";
start = true;
}
}
}
Model:
public class Model {
public float calculate (long number1, long number2, String operator){
switch(operator){
case "+":
return number1+ number2;
case "-":
return number1- number2;
case "*":
return number1* number2;
case "/":
if (number2==0)
return 0;
return number1/ number2;
default: return 0;
}
}
}
sample.fxml:
<VBox fx:id="Controller" fillWidth="false" maxHeight="329.0" maxWidth="300.0" minHeight="300.0" minWidth="300.0"
prefHeight="316.0" prefWidth="300.0" style="-fx-background-color: gray;" xmlns="http://javafx.com/javafx/8.0.171"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<StackPane prefHeight="100.0" prefWidth="300.0">
<children>
<Label fx:id="result" prefHeight="56.0" prefWidth="230.0" style="-fx-background-color: white;">
<font>
<Font name="System Bold" size="18.0" />
</font>
<StackPane.margin>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</StackPane.margin>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</Label>
</children></StackPane>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="7">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="8">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="9">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="/">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="4">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="5">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="6">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="*">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="1">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="2">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="3">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="-">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="110.0" text="0">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="=">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="+">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
</children>
</VBox>
Dodam że przy kompilacji wyskakuje mi Could not find or load main class sample.Main.
Wydaje mi się jednak że ze ścieżkami wszystko jest w porządku