From 536c4534270a38d0ad3cb5782ff392e4b4680c12 Mon Sep 17 00:00:00 2001 From: vesal <vesa.t.lappalainen@jyu.fi> Date: Sun, 28 Jan 2024 23:10:44 +0200 Subject: [PATCH] liev06 --- luennot/live01/kerho/kanat/harrastukset.dat | 0 luennot/live04/.classpath | 12 +++ luennot/live04/.project | 23 +++++ luennot/live04/build.fxbuild | 8 ++ .../src/fxYhdista/YhdistaGUIController.java | 22 +++++ .../live04/src/fxYhdista/YhdistaGUIView.fxml | 53 ++++++++++++ luennot/live04/src/fxYhdista/YhdistaMain.java | 38 ++++++++ luennot/live04/src/fxYhdista/yhdista.css | 1 + luennot/live04/src/live04/Alkuluku.java | 58 +++++++++++++ .../live04/src/live04/test/AlkulukuTest.java | 28 ++++++ luennot/live06/.classpath | 12 +++ luennot/live06/.project | 23 +++++ luennot/live06/build.fxbuild | 8 ++ luennot/live06/src/example/Hello3.java | 16 ++++ .../muuttujat/matkaFX/MatkaGUIController.java | 86 +++++++++++++++++++ .../src/muuttujat/matkaFX/MatkaGUIView.fxml | 42 +++++++++ .../src/muuttujat/matkaFX/MatkaMain.java | 38 ++++++++ .../live06/src/muuttujat/matkaFX/matka.css | 1 + luennot/live06/src/viitteet/Jonotesti.java | 51 +++++++++++ 19 files changed, 520 insertions(+) create mode 100644 luennot/live01/kerho/kanat/harrastukset.dat create mode 100644 luennot/live04/.classpath create mode 100644 luennot/live04/.project create mode 100644 luennot/live04/build.fxbuild create mode 100644 luennot/live04/src/fxYhdista/YhdistaGUIController.java create mode 100644 luennot/live04/src/fxYhdista/YhdistaGUIView.fxml create mode 100644 luennot/live04/src/fxYhdista/YhdistaMain.java create mode 100644 luennot/live04/src/fxYhdista/yhdista.css create mode 100644 luennot/live04/src/live04/Alkuluku.java create mode 100644 luennot/live04/src/live04/test/AlkulukuTest.java create mode 100644 luennot/live06/.classpath create mode 100644 luennot/live06/.project create mode 100644 luennot/live06/build.fxbuild create mode 100644 luennot/live06/src/example/Hello3.java create mode 100644 luennot/live06/src/muuttujat/matkaFX/MatkaGUIController.java create mode 100644 luennot/live06/src/muuttujat/matkaFX/MatkaGUIView.fxml create mode 100644 luennot/live06/src/muuttujat/matkaFX/MatkaMain.java create mode 100644 luennot/live06/src/muuttujat/matkaFX/matka.css create mode 100644 luennot/live06/src/viitteet/Jonotesti.java diff --git a/luennot/live01/kerho/kanat/harrastukset.dat b/luennot/live01/kerho/kanat/harrastukset.dat new file mode 100644 index 0000000..e69de29 diff --git a/luennot/live04/.classpath b/luennot/live04/.classpath new file mode 100644 index 0000000..a5a3676 --- /dev/null +++ b/luennot/live04/.classpath @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"> + <attributes> + <attribute name="module" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/> + <classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/luennot/live04/.project b/luennot/live04/.project new file mode 100644 index 0000000..9533c89 --- /dev/null +++ b/luennot/live04/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>live04</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/luennot/live04/build.fxbuild b/luennot/live04/build.fxbuild new file mode 100644 index 0000000..b220c62 --- /dev/null +++ b/luennot/live04/build.fxbuild @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="ASCII"?> +<anttasks:AntTask xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:anttasks="http://org.eclipse.fx.ide.jdt/1.0" buildDirectory="${project}/build"> + <deploy> + <application name="live04"/> + <info/> + </deploy> + <signjar/> +</anttasks:AntTask> diff --git a/luennot/live04/src/fxYhdista/YhdistaGUIController.java b/luennot/live04/src/fxYhdista/YhdistaGUIController.java new file mode 100644 index 0000000..21a311d --- /dev/null +++ b/luennot/live04/src/fxYhdista/YhdistaGUIController.java @@ -0,0 +1,22 @@ +package fxYhdista; + +import javafx.fxml.FXML; +import javafx.scene.control.TextField; + +/** + * @author vesal + * @version 16.1.2024 + * + */ +public class YhdistaGUIController { + @FXML private TextField editEtu; + @FXML private TextField editKoko; + + @FXML private TextField editSuku; + + @FXML void handleYhdista() { + String nimi = editEtu.getText() + " " + editSuku.getText(); + editKoko.setText(nimi); + + } +} \ No newline at end of file diff --git a/luennot/live04/src/fxYhdista/YhdistaGUIView.fxml b/luennot/live04/src/fxYhdista/YhdistaGUIView.fxml new file mode 100644 index 0000000..c2a15d7 --- /dev/null +++ b/luennot/live04/src/fxYhdista/YhdistaGUIView.fxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> + + +<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/21" fx:controller="fxYhdista.YhdistaGUIController"> + <center> + <VBox BorderPane.alignment="CENTER"> + <children> + <HBox> + <children> + <Label prefWidth="100.0" text="Etunimi" /> + <TextField fx:id="editEtu" /> + </children> + <VBox.margin> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </VBox.margin> + </HBox> + <HBox> + <children> + <Label prefWidth="100.0" text="Sukunimi" /> + <TextField fx:id="editSuku" /> + </children> + <VBox.margin> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </VBox.margin> + </HBox> + <HBox> + <children> + <Label prefWidth="100.0" text="Kokonimi" /> + <TextField fx:id="editKoko" /> + </children> + <padding> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </padding> + </HBox> + </children> + </VBox> + </center> + <bottom> + <Button mnemonicParsing="false" onAction="#handleYhdista" text="Yhdista" BorderPane.alignment="CENTER"> + <BorderPane.margin> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </BorderPane.margin> + </Button> + </bottom> +</BorderPane> diff --git a/luennot/live04/src/fxYhdista/YhdistaMain.java b/luennot/live04/src/fxYhdista/YhdistaMain.java new file mode 100644 index 0000000..a21e9c2 --- /dev/null +++ b/luennot/live04/src/fxYhdista/YhdistaMain.java @@ -0,0 +1,38 @@ +package fxYhdista; + +import javafx.application.Application; +import javafx.stage.Stage; +import javafx.scene.Scene; +import javafx.scene.layout.Pane; +import javafx.fxml.FXMLLoader; + + +/** + * @author vesal + * @version 16.1.2024 + * + */ +public class YhdistaMain extends Application { + @Override + public void start(Stage primaryStage) { + try { + FXMLLoader ldr = new FXMLLoader(getClass().getResource("YhdistaGUIView.fxml")); + final Pane root = ldr.load(); + //final YhdistaGUIController yhdistaCtrl = (YhdistaGUIController) ldr.getController(); + Scene scene = new Scene(root); + scene.getStylesheets().add(getClass().getResource("yhdista.css").toExternalForm()); + primaryStage.setScene(scene); + primaryStage.setTitle("Yhdista"); + primaryStage.show(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * @param args Ei kaytossa + */ + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/luennot/live04/src/fxYhdista/yhdista.css b/luennot/live04/src/fxYhdista/yhdista.css new file mode 100644 index 0000000..83d6f33 --- /dev/null +++ b/luennot/live04/src/fxYhdista/yhdista.css @@ -0,0 +1 @@ +/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ \ No newline at end of file diff --git a/luennot/live04/src/live04/Alkuluku.java b/luennot/live04/src/live04/Alkuluku.java new file mode 100644 index 0000000..8b6381b --- /dev/null +++ b/luennot/live04/src/live04/Alkuluku.java @@ -0,0 +1,58 @@ +package live04; + +/** + * @author vesal + * @version 16.1.2024 + * + */ +public class Alkuluku { + + /** + * @param args ei käytetössä + */ + public static void main(String[] args) { + int luku = 25; + int jaollinen; + + jaollinen = millaJaollinen(luku); + + if ( jaollinen == 1) + System.out.println("alkuluku"); + else + System.out.println("Jaollinen luvulla " + jaollinen); + } + + + /** + * Aliohjelmalla tutkitaan onko parametrina tuotu + * luku alkuluku vai ei<br> + * + * Algoritmi: Jaetaan tutkittavaa lukua jakajilla 2,3,5,7...luku/2. + * Jos jokin jako menee tasan, niin ei alkuluku. + * + * @param luku tutkittava luku + * @return luvun jolla jaollinen tai 1 jos alkuluku + * @example + * <pre name="test"> + * millaJaollinen(25) === 5; + * millaJaollinen(2) === 1; + * millaJaollinen(4) === 2; + * millaJaollinen(123) === 3; + * millaJaollinen(7) === 1; + * </pre> + */ + public static int millaJaollinen(int luku) { + int jakaja = 2; + int kasvatus = 1; + if (luku == 2) return 1; + + do { + if (luku % jakaja == 0) return jakaja; + jakaja += kasvatus; + kasvatus = 2; + } while (jakaja < luku/2); + + return 1; + } + +} diff --git a/luennot/live04/src/live04/test/AlkulukuTest.java b/luennot/live04/src/live04/test/AlkulukuTest.java new file mode 100644 index 0000000..a1f2e9a --- /dev/null +++ b/luennot/live04/src/live04/test/AlkulukuTest.java @@ -0,0 +1,28 @@ +package live04.test; +// Generated by ComTest BEGIN +import static org.junit.Assert.*; +import org.junit.*; +import static live04.Alkuluku.*; +// Generated by ComTest END + +/** + * Test class made by ComTest + * @version 2024.01.16 13:13:11 // Generated by ComTest + * + */ +@SuppressWarnings("all") +public class AlkulukuTest { + + + + // Generated by ComTest BEGIN + /** testMillaJaollinen36 */ + @Test + public void testMillaJaollinen36() { // Alkuluku: 36 + assertEquals("From: Alkuluku line: 37", 5, millaJaollinen(25)); + assertEquals("From: Alkuluku line: 38", 1, millaJaollinen(2)); + assertEquals("From: Alkuluku line: 39", 2, millaJaollinen(4)); + assertEquals("From: Alkuluku line: 40", 3, millaJaollinen(123)); + assertEquals("From: Alkuluku line: 41", 1, millaJaollinen(7)); + } // Generated by ComTest END +} \ No newline at end of file diff --git a/luennot/live06/.classpath b/luennot/live06/.classpath new file mode 100644 index 0000000..8c39f29 --- /dev/null +++ b/luennot/live06/.classpath @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"> + <attributes> + <attribute name="module" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ohj2"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/luennot/live06/.project b/luennot/live06/.project new file mode 100644 index 0000000..362de1c --- /dev/null +++ b/luennot/live06/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>live06</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/luennot/live06/build.fxbuild b/luennot/live06/build.fxbuild new file mode 100644 index 0000000..20938b1 --- /dev/null +++ b/luennot/live06/build.fxbuild @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="ASCII"?> +<anttasks:AntTask xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:anttasks="http://org.eclipse.fx.ide.jdt/1.0" buildDirectory="${project}/build"> + <deploy> + <application name="live06"/> + <info/> + </deploy> + <signjar/> +</anttasks:AntTask> diff --git a/luennot/live06/src/example/Hello3.java b/luennot/live06/src/example/Hello3.java new file mode 100644 index 0000000..f2b11fd --- /dev/null +++ b/luennot/live06/src/example/Hello3.java @@ -0,0 +1,16 @@ +package example; +/** + * Ohjelma tulostaa kutsun mukana tulleet parametrit + * @author Vesa Lappalainen + * @version 1.0, 03.01.2003 + */ +public class Hello3 { + /** + * @param args ei käytössä + */ + public static void main(String[] args) { + System.out.println("Argumenttejä on " + args.length + " kappaletta:"); + for(int i=0; i<args.length; i++) + System.out.println("Parametri " + i + ": " + args[i]); + } +} \ No newline at end of file diff --git a/luennot/live06/src/muuttujat/matkaFX/MatkaGUIController.java b/luennot/live06/src/muuttujat/matkaFX/MatkaGUIController.java new file mode 100644 index 0000000..3274e62 --- /dev/null +++ b/luennot/live06/src/muuttujat/matkaFX/MatkaGUIController.java @@ -0,0 +1,86 @@ +package muuttujat.matkaFX; +import fi.jyu.mit.ohj2.Mjonot; + +import javafx.fxml.FXML; +import javafx.scene.control.TextField; + +/** + * @author vesal + * @version 23.1.2024 + * + */ +public class MatkaGUIController { + @FXML private TextField textKartalla; + + @FXML private TextField textMaastossa; + + @FXML private TextField textMittakaava; + + @FXML void keyReleased() { + laske(); + } + + // ====================================================== + + /** Oletusmittakaava */ + public static final double MITTAKAAVA = 200000.0; + + /** Kerroin mm muuttamiseksi km */ + public static final double MM_KM = 1000.0 * 1000.0; + + + /** + * Haetaan tekstikentästä luku + * @param text kenttä josta haetaan + * @param oletus luvun arvo jos kentästä ei saa järkevää lukua + * @return kentästä haettu luku + * @example + * <pre name="test"> + * #TOLERANCE=0.01 + * #import javafx.embed.swing.JFXPanel; + * #import javafx.scene.control.*; + * (new JFXPanel()).toString(); + * haeLuku(new TextField("234.233"), 44) ~~~ 234.23; + * haeLuku(new TextField("foobar1"), 44) ~~~ 44.00; + * haeLuku(new TextField("1foobar"), 44) ~~~ 1.00; + * </pre> + */ + public static double haeLuku(TextField text,double oletus) { + double luku = Mjonot.erotaDouble(text.getText(), oletus); + return luku; + } + + /** + * Muunnetaan kartalta mm mitattu matka maastoon km + * @param matka_mm kartalta mitattu matka mm + * @param mittakaava käytettävä mittakaava + * @return matka maastossa km + */ + public static double mittakaavamuunnos(double matka_mm, double mittakaava) { + return mittakaava*matka_mm / MM_KM; + } + + /** + * Laittaa tekstikenttään tuloksen + * @param text kenttä johon luku laitetaan + * @param luku joka laitetaan kenttään + */ + public static void laitaTulos(TextField text, double luku) { + String tulos = String.format("%5.2f",luku); + tulos = tulos.replace(',', '.'); + text.setText(tulos); + } + + + /** + * Lasketaan uudet arvot muuttuneiden perusteella + */ + private void laske() { + double mittakaava = haeLuku(textMittakaava,MITTAKAAVA); + double matka_mm = haeLuku(textKartalla, 0); + double matka_km = mittakaavamuunnos(matka_mm,mittakaava); + laitaTulos(textMaastossa,matka_km); + } + + +} \ No newline at end of file diff --git a/luennot/live06/src/muuttujat/matkaFX/MatkaGUIView.fxml b/luennot/live06/src/muuttujat/matkaFX/MatkaGUIView.fxml new file mode 100644 index 0000000..86b5b8e --- /dev/null +++ b/luennot/live06/src/muuttujat/matkaFX/MatkaGUIView.fxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.RowConstraints?> + + +<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/21" fx:controller="muuttujat.matkaFX.MatkaGUIController"> + <center> + <GridPane BorderPane.alignment="CENTER"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="150.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="10.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="40.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <Label text="MIttakavaa" /> + <Label text="Kartalat mitattu" GridPane.rowIndex="1" /> + <Label text="Matka maastossa" GridPane.rowIndex="2" /> + <Label text="1:" GridPane.columnIndex="1" /> + <Label text="mm" GridPane.columnIndex="3" GridPane.rowIndex="1" /> + <Label text="km" GridPane.columnIndex="3" GridPane.rowIndex="2" /> + <TextField fx:id="textMittakaava" onKeyReleased="#keyReleased" GridPane.columnIndex="2" /> + <TextField fx:id="textKartalla" onKeyReleased="#keyReleased" GridPane.columnIndex="2" GridPane.rowIndex="1" /> + <TextField fx:id="textMaastossa" GridPane.columnIndex="2" GridPane.rowIndex="2" /> + </children> + <padding> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </padding> + </GridPane> + </center> +</BorderPane> diff --git a/luennot/live06/src/muuttujat/matkaFX/MatkaMain.java b/luennot/live06/src/muuttujat/matkaFX/MatkaMain.java new file mode 100644 index 0000000..94adace --- /dev/null +++ b/luennot/live06/src/muuttujat/matkaFX/MatkaMain.java @@ -0,0 +1,38 @@ +package muuttujat.matkaFX; + +import javafx.application.Application; +import javafx.stage.Stage; +import javafx.scene.Scene; +import javafx.scene.layout.Pane; +import javafx.fxml.FXMLLoader; + + +/** + * @author vesal + * @version 23.1.2024 + * + */ +public class MatkaMain extends Application { + @Override + public void start(Stage primaryStage) { + try { + FXMLLoader ldr = new FXMLLoader(getClass().getResource("MatkaGUIView.fxml")); + final Pane root = ldr.load(); + //final MatkaGUIController matkaCtrl = (MatkaGUIController) ldr.getController(); + Scene scene = new Scene(root); + scene.getStylesheets().add(getClass().getResource("matka.css").toExternalForm()); + primaryStage.setScene(scene); + primaryStage.setTitle("Matka"); + primaryStage.show(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * @param args Ei kaytossa + */ + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/luennot/live06/src/muuttujat/matkaFX/matka.css b/luennot/live06/src/muuttujat/matkaFX/matka.css new file mode 100644 index 0000000..83d6f33 --- /dev/null +++ b/luennot/live06/src/muuttujat/matkaFX/matka.css @@ -0,0 +1 @@ +/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ \ No newline at end of file diff --git a/luennot/live06/src/viitteet/Jonotesti.java b/luennot/live06/src/viitteet/Jonotesti.java new file mode 100644 index 0000000..99e5829 --- /dev/null +++ b/luennot/live06/src/viitteet/Jonotesti.java @@ -0,0 +1,51 @@ +package viitteet; + +/** + * Tutkitaan olioviitteiden käyttäytymistä + * @author Vesa Lappalainen + * @version 1.0, 08.01.20003 + */ +public class Jonotesti { + + private static void tulosta(boolean b) { + if (b) + System.out.println("Samat ovat"); + else + System.out.println("Erilaiset ovat"); + } + + + private static void ali(String s) { + System.out.println(s); + } + + + /** + * @param args ei käytössä + */ + public static void main(String[] args) { + String s1 = "eka"; + ali(s1); + String s2 = new String("eka"); + + tulosta(s1 == s2); // Erilaiset ovat + tulosta(s1.equals(s2)); // Samat ovat + + int i1 = 11; + int i2 = 10 + 1; + + tulosta(i1 == i2); // Samat ovat + + Integer io1 = Integer.valueOf(3); + @SuppressWarnings("removal") // koska haluan luoda uuden + Integer io2 = new Integer(3); + + tulosta(io1 == io2); // Erilaiset ovat + tulosta(io1.equals(io2)); // Samat ovat + tulosta(io1.intValue() == io2.intValue()); // Samat ovat + + s2 = s1; + tulosta(s1 == s2); + s1 = null; + } +} \ No newline at end of file -- GitLab