Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tie/ohj2/ve/2025/kevat/ohj2
  • hasemajo/ohj2
  • nikaleko/ohj2
  • tntvanha/ohj2
  • lemaline/ohj2
  • rintahe/ohj2
  • tersaton/ohj2
  • tornhale/ohj2
  • pjyypiix/ohj-2
  • aneejoko/ohj2
  • reponaw/ohj2
  • saarian/ohj2
  • niemimm/ohj2
  • jppaasww/ohj2-2025k
  • ssniinim/ohj2
  • niememan/ohj2
  • milimaas/ohj2
  • kallmovu/ohj2
  • adaoliro/ohj2
  • tojuhann/ohj2
  • vevejuha/ohj2
  • mieikrla/ohj2
  • miankort/ohj2
  • saeteppo/ohj2
  • saelripa/ohj2
  • saniitty/ohj2
  • nsmietyt/ohj2
  • mikkolto/ohj2
  • mmuhonen/ohj2k25
  • saukkota/ohj-2-ht
  • eenorta/ohj2
  • oapaaso/ht-2
  • eeeeoino/ohj2
  • hietmaem/ohj2
  • vvlaspa/ohj2ht
  • lalaajal/ohj2
  • pepartyy/ohj2
  • loukovjv/ohj2
  • vihtkaan/ohj2
  • annelinu/ohjelmointi2
  • lehtikmi/ohj2
  • ihakalel/ohj2
  • aichinos/ohj2
  • lahteela/ohj-2-ht
  • pellrata/ohj2
  • iljinisa/ohj2
  • nkeuren/ohj2
  • hiltunma/ohj2
  • esshelkr/ohj2
  • vianelo/ohj2
  • kousaepw/ohj-2-ht
  • amheikkz/ohj2
  • jatirkko/ohj2
  • akharine/ohj2
  • rlokilja/ohj2
  • eskrliim/ohj2
  • masakoiv/ohj2
  • toivjope/ohj2
  • sasalons/ohj2
  • hirvepjw/ohj2
  • lajoveps/vuororekisteri
  • lelitirr/ohj-225
  • juhsansa/ohj2
  • essmarpe/ohj2
  • lehtlrvt/ohj2
  • setilus/ohj2
  • julipits/ohj2
  • kivistve/ohj2
  • erpajala/ohj2
  • pslohi/ohj2
  • sediiv/ohj2
  • jovesaar/ohj2
  • jutaalko/ohj2
  • valltoha/ohj2
  • ruotvive/ohj2ht
  • kkvalke/ohj2
  • aetuukka/espanjakohderekisteri
  • pdanilei/ohj2ht
  • lahtlule/ohj2
  • jaemvahu/ohj2
  • kantsiii/ohj2
  • tototuru/ohj2
  • elmotabe/ohj2
  • sutinele/ohj2
  • vepajuna/ohj2
  • tornittu/reseptilista
  • sasoleht/ohj2
  • eemjorto/ohj2
  • gagolzar/ohj2
  • sievanee/ohj2
  • nobekail/ohj2
  • mamiparv/ohj2
  • halolpvz/ohj2
  • tukilo/ohj2
  • mmleppis/ohj2
  • tmruisma/ohj2
  • aajataip/ohj-2
  • salonevs/ohj-2
  • ygulusen/ohj2
  • saarakka/ohj2
  • eakoskix/ohj2
  • lamminm/ohj2ht
  • sellmmv/salibandynpelaajarekisteri
  • tuoskopp/ohj2
  • haarates/ohj-2
  • jormlsuu/ohj2
  • lihiauka/ohj2
  • eeemkarv/ohj2
  • uekolehm/ohj2
  • smkolari/ohj-2-a
  • spicjrxz/ohj2
  • maalvirt/ohj-2-ht
  • hietaolo/ohj2ht
  • rtmatilt/ohj2
  • veevjoen/ohj2
  • lainejee/ohj2
  • pohtojoj/tuotelistaaja
  • jokayli/ohj2
  • sulasaal/ohj2
  • kalloupe/ohj2
  • apeshhhh/ohj2
  • kopperp/ohj2
  • garammtu/ohj2
  • ettalaes/ohj2
  • rajanije/ohj2
  • timovaan/ohj2
  • mkvuonos/ohj2
  • tuomiluu/ohj2
  • konttijm/ohj2
  • palolala/ohj2
  • vejokauk/ohj2
  • peihanus/ohj2
  • itsario/ohj2
  • hejumivu/ohj2
  • isojarto/ohj2
  • pirinpot/ohj2ht
  • oihietan/ohj2
  • niemhizz/ohj2
  • oparve/ohj2
  • truhtejo/ohj-2-ht
  • malineps/ohj-2-pelivalikoima
  • kylkii/ohj2
  • emigrank/ohj2
  • samavakk/ohj2
  • lausofla/ohj2
  • arossors/ohj-2-2
  • nurmsajo/ohj2
  • mattarma/ohj2
  • akjuhesa/ohj-2-ht
  • ovevalka/ohj2
  • lequyanh/ohj-2-ht
  • jasyvays/ohj2
  • lindtope/ohj2
  • kaipainm/ohj2
  • peillips/ohj2
  • miwamich/ohj2
  • anpahypp/ohj2harkka
  • kreenk/ohj2
  • iiaumaoi/ohj2
  • jmsutizy/ohj-2-25
  • conrcsir/ohj2
  • palaakho/ht-metsastyspaivakirja
  • makelkjt/ohj2
  • jooantni/ohj2
  • ttkelaw/ohj-2-2025-k
  • koivishe/kuntohalli-oy
  • laleiho/harjoitustyo-ohj-2
  • joolmatt/ohj2-ht
  • akrasa/ohj2
  • rikretel/ohj-2-ht
  • vuorelma/ohj2
171 results
Show changes
Commits on Source (16)
Showing
with 784 additions and 0 deletions
<?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="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Kirjalista</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>
File added
<?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="Kirjalista"/>
<info/>
</deploy>
<signjar/>
</anttasks:AntTask>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project Kirjalista">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required -->
<!--define folder properties-->
<property name="dir.buildfile" value="."/>
<property name="dir.workspace" value="C:/kurssit/ohj2/ws"/>
<property name="dir.jarfile" value="${dir.buildfile}"/>
<target name="create_run_jar">
<jar destfile="${dir.jarfile}/Kirjalista.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="fxKirjalista.KirjalistaMain"/>
<attribute name="Class-Path" value="."/>
</manifest>
<fileset dir="${dir.jarfile}/bin"/>
<zipfileset excludes="META-INF/*.SF" src="C:/devel/ec2412/eclipse/plugins/org.eclipse.fx.ide.css.jfx8_3.8.0.202204150904.jar"/>
<zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Ali.jar"/>
<zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/fxgui.jar"/>
<zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Graphics.jar"/>
<zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Music.jar"/>
</jar>
</target>
</project>
kuvat/Lisaa.png

9.54 KiB

kuvat/Paaikkuna.png

19.1 KiB

kuvat/muokkaa.png

11.3 KiB

kuvat/poista.png

8.5 KiB

kuvat/virhe.png

7 KiB

package Kirjalista;
/**
* Genre-luokka
* - Sisältää genren tiedot
* - Muuttaa merkkijonon genren tiedoiksi
* - Muuttaa genren tiedot merkkijonoksi
*/
public class Genre {
private int id = 0;
private String nimi = "";
private static int seuraavaId = 1;
/**
* Ottaa merkkijonon ja muuttaa sen genren tiedoiksi, poistaa turhat völilyönnit ja muuttaa
* syötteen pieniksi kirjaimiksi
* @param mjono Merkkijono, josta kirjan tiedot saadaan
* <pre name="test">
* Genre g = new Genre();
* g.parse("fantasia");
* g.toString() === "fantasia";
* g.parse("FANTASIA");
* g.toString() === "fantasia";
* g.parse(" Fantasia ");
* g.toString() === "fantasia";
* </pre>
*/
public void parse(String mjono) {
this.nimi = mjono.trim().toLowerCase();
}
/**
* Palauttaa genren nimen merkkijonona
*/
@Override
public String toString() {
return (this.nimi);
}
/**
* Rekisteröi genren antamalla sille id:n, kasvattaa seuraavaId:tä
* <pre name="test">
* Genre g1 = new Genre();
* Genre g2 = new Genre();
* g1.rekisteroi();
* g2.rekisteroi();
* g1.getId() === g2.getId() - 1;
* </pre>
*/
public void rekisteroi() {
this.id = seuraavaId;
seuraavaId++;
}
/**
* palauttaa genren id:n
* @return Genren id
*/
public int getId() {
return this.id;
}
}
package Kirjalista;
import java.io.PrintStream;
import java.util.Random;
import fi.jyu.mit.ohj2.Mjonot;
/**
* Kirja-luokka
* - Sisältää kirjan tiedot
* - Muuttaa merkkijonon kirjan tiedoiksi
* - Muuttaa kirjan tiedot merkkijonoksi
*/
public class Kirja {
private int id = 0;
private String nimi = "";
private String kirjoittaja = "";
private String kirjasarja = "";
private int sivumaara = 0;
private static int seuraavaId = 1;
/**
* Ottaa merkkijonon ja muuttaa sen kirjan tiedoiksi, poistaa turhat välilyönnit
* merkkijono muotoa nimi|kirjoittaja|kirjasarja|sivumäärä
* @param mjono Merkkijono, josta kirjan tiedot saadaan
* <pre name="test">
* Kirja k = new Kirja();
* k.parse("Hobitti|J.R.R. Tolkien||336");
* k.toString() === "Hobitti|J.R.R. Tolkien||336";
*
* Kirja k2 = new Kirja();
* k2.parse(" Hobitti | J.R.R. Tolkien | |336");
* k2.toString() === "Hobitti|J.R.R. Tolkien||336";
*
*
* </pre>
*/
public void parse(String mjono) {
StringBuilder sb = new StringBuilder(mjono);
this.nimi = Mjonot.erota(sb, '|').trim();
this.kirjoittaja = Mjonot.erota(sb, '|').trim();
this.kirjasarja = Mjonot.erota(sb, '|').trim();
this.sivumaara = Mjonot.erotaInt(sb, 0);
}
/**
* Palauttaa kirjan tiedot merkkijonona muodossa id|nimi|kirjoittaja|kirjasarja|sivumäärä
*/
@Override
public String toString() {
return (this.id + "|" + this.nimi + "|" + this.kirjoittaja + "|" + this.kirjasarja + "|" + this.sivumaara);
}
/**
* Rekisteröi kirjan antamalla sille Id:n. Kasvattaa seuraavaId:tä.
* <pre name="test">
* Kirja k = new Kirja();
* Kirja k2 = new Kirja();
* k.rekisteroi();
* k2.rekisteroi();
* k.getId() === k2.getId() - 1;
* </pre>
*/
public void rekisteroi() {
this.id = seuraavaId;
seuraavaId++;
}
/**
* Apumetodi, jolla saadaan täytettyä testiarvot kirjalle.
*/
public void esimerkkiKirja() {
Random rand = new Random();
this.nimi = "Hobitti" + rand.nextInt(10);
this.kirjoittaja = "J.R.R. Tolkien";
this.kirjasarja = "";
this.sivumaara = rand.nextInt(1000);
}
/**
* @return palauttaa kirjan id:n
*/
public int getId() {
return this.id;
}
/**
* @return Kirjan nimi
*/
public String getNimi() {
return this.nimi;
}
/**
* Tulostaa kirjan tiedot
* @param out Tietovirta, johon tulostetaan
*/
public void tulosta(PrintStream out) {
out.println(this.id + " " + this.nimi + " " + this.kirjoittaja + " " + this.kirjasarja + " " + this.sivumaara);
}
/**
* Testausta varten
* @param args ei käytössä
*/
public static void main(String[] args) {
Kirja k = new Kirja();
k.rekisteroi();
k.esimerkkiKirja();
k.tulosta(System.out);
Kirja k1 = new Kirja();
k1.rekisteroi();
k1.esimerkkiKirja();
k1.tulosta(System.out);
}
}
package Kirjalista;
/**
* Liimaa kirjan ja genren yhteen id:n perusteella
*/
public class KirjanGenre {
private int kirjaId;
private int genreId;
/**
* Luo olion
* @param kirja kirja, jonka id tallennetaan
* @param genre genre, jonka id tallennetaan
* <pre name="test">
* Kirja k = new Kirja();
* k.rekisteroi();
* Kirja k1 = new Kirja();
* k1.rekisteroi();
*
* Genre g = new Genre();
* g.rekisteroi();
* Genre g1 = new Genre();
* g1.rekisteroi();
*
* KirjanGenre kg = new KirjanGenre(k, g);
* KirjanGenre kg1 = new KirjanGenre(k1, g1);
* KirjanGenre kg2 = new KirjanGenre(k, g1);
*
* kg.getKirjaId() === k.getId();
* kg1.getKirjaId() === k1.getId();
* kg2.getKirjaId() === k.getId();
*
* kg.getGenreId() === g.getId();
* kg1.getGenreId() === g1.getId();
* kg2.getGenreId() === g1.getId();
*
*
* </pre>
*/
public KirjanGenre(Kirja kirja, Genre genre) {
this.kirjaId = kirja.getId();
this.genreId = genre.getId();
}
/**
* Palauttaa kirjan id:n
* @return Kirjan id
*/
public int getKirjaId() {
return this.kirjaId;
}
/**
* Palauttaa genren id:n
* @return Genren id
*/
public int getGenreId() {
return this.genreId;
}
}
package Kirjalista;
/**
* Luokka, joka keskustelee käyttöliittymän kanssa
* - Välittää tietoja käyttöliittymän ja kirjojen sekä genrejen välillä
*/
public class Kirjasto {
private Kirjat kirjat = new Kirjat();
//private GenreRelaatio genreRelaatio;
//private Genret genret;
/**
* @param kirja Lisättävä kirja
* @throws SailoException Jos kirjaa ei voi lisätä
*/
public void lisaaKirja(Kirja kirja) throws SailoException {
kirjat.lisaa(kirja);
}
/**
* @param indeksi Indeksipaikka, josta kirja haetaan
* @return Kirja annetussa indeksipaikassa
* @throws IndexOutOfBoundsException Jos indeksi laiton
*/
public Kirja haeKirja(int indeksi) throws IndexOutOfBoundsException {
return kirjat.hae(indeksi);
}
/**
* @return Kirjojen lukumäärä
*/
public int getKirjaLkm() {
return this.kirjat.getLkm();
}
/*
public Genre haeGenre(Kirja kirja) {
GenreRelaatio.haeGenret();
}
*/
}
package Kirjalista;
/**
* Monikkoluokka kirjoille.
* - Sisältää taulukon kirjoista
* - Lisää ja poistaa kirjoja
* - Lukee ja kirjoittaa tiedostoon (sitten joskus)
* - Etsii ja lajittelee (sitten joskus)
*/
public class Kirjat {
private int maxLkm = 8;
private int lkm;
private Kirja[] alkiot = new Kirja[maxLkm];
/**
* @param kirja Lisättävä kirja
* @throws SailoException Heittää, jos lisääminen ei onnistu
*/
public void lisaa(Kirja kirja) throws SailoException {
if (this.lkm >= this.alkiot.length) throw new SailoException("Liikaa alkioita");
this.alkiot[this.lkm] = kirja;
this.lkm++;
}
/**
* Hakee kirjan indeksipaikassa i
* @param i Halutun kirjan indeksi
* @return viite kirjaan, jonka indeksi on i
* @throws IndexOutOfBoundsException jos indeksi liian suuri tai pieni
*/
public Kirja hae(int i) throws IndexOutOfBoundsException {
if (i < 0 || this.lkm <= i)
throw new IndexOutOfBoundsException("Laiton indeksi: " + i);
return this.alkiot[i];
}
/**
* Palauttaa kirjojen lukumäärän
* @return kirjojen lukumäärä
*/
public int getLkm() {
return this.lkm;
}
}
package Kirjalista;
/**
* Poikkeusluokka tietorakenteesta aiheutuville poikkeuksille.
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
*/
public class SailoException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Poikkeuksen muodostaja jolle tuodaan poikkeuksessa
* käytettävä viesti
* @param viesti Poikkeuksen viesti
*/
public SailoException(String viesti) {
super(viesti);
}
}
package Kirjalista.test;
// Generated by ComTest BEGIN
import static org.junit.Assert.*;
import org.junit.*;
import Kirjalista.Genre;
/**
* Test class made by ComTest
* @version 2025.02.24 13:41:02 // Generated by ComTest
*
*/
@SuppressWarnings({ "all" })
public class GenreTest {
// Generated by ComTest BEGIN
/** testParse22 */
@Test
public void testParse22() { // Genre: 22
Genre g = new Genre();
g.parse("fantasia");
assertEquals("From: Genre line: 25", "fantasia", g.toString());
g.parse("FANTASIA");
assertEquals("From: Genre line: 27", "fantasia", g.toString());
g.parse(" Fantasia ");
assertEquals("From: Genre line: 29", "fantasia", g.toString());
} // Generated by ComTest END
// Generated by ComTest BEGIN
/** testRekisteroi48 */
@Test
public void testRekisteroi48() { // Genre: 48
Genre g1 = new Genre();
Genre g2 = new Genre();
g1.rekisteroi();
g2.rekisteroi();
assertEquals("From: Genre line: 53", g2.getId() - 1, g1.getId());
} // Generated by ComTest END
}
\ No newline at end of file
package Kirjalista.test;
// Generated by ComTest BEGIN
import static org.junit.Assert.*;
import org.junit.*;
import Kirjalista.Kirja;
/**
* Test class made by ComTest
* @version 2025.02.24 13:31:16 // Generated by ComTest
*
*/
@SuppressWarnings({ "all" })
public class KirjaTest {
// Generated by ComTest BEGIN
/** testParse26 */
@Test
public void testParse26() { // Kirja: 26
Kirja k = new Kirja();
k.parse("Hobitti|J.R.R. Tolkien||336");
assertEquals("From: Kirja line: 29", "Hobitti|J.R.R. Tolkien||336", k.toString());
Kirja k2 = new Kirja();
k2.parse(" Hobitti | J.R.R. Tolkien | |336");
assertEquals("From: Kirja line: 33", "Hobitti|J.R.R. Tolkien||336", k2.toString());
} // Generated by ComTest END
// Generated by ComTest BEGIN
/** testRekisteroi58 */
@Test
public void testRekisteroi58() { // Kirja: 58
Kirja k = new Kirja();
Kirja k2 = new Kirja();
k.rekisteroi();
k2.rekisteroi();
assertEquals("From: Kirja line: 63", k2.getId() - 1, k.getId());
} // Generated by ComTest END
}
\ No newline at end of file
package Kirjalista.test;
// Generated by ComTest BEGIN
import static org.junit.Assert.*;
import org.junit.*;
import Kirjalista.Genre;
import Kirjalista.Kirja;
import Kirjalista.KirjanGenre;
/**
* Test class made by ComTest
* @version 2025.02.24 13:51:58 // Generated by ComTest
*
*/
@SuppressWarnings({ "all" })
public class KirjanGenreTest {
// Generated by ComTest BEGIN
/** testKirjanGenre16 */
@Test
public void testKirjanGenre16() { // KirjanGenre: 16
Kirja k = new Kirja();
k.rekisteroi();
Kirja k1 = new Kirja();
k1.rekisteroi();
Genre g = new Genre();
g.rekisteroi();
Genre g1 = new Genre();
g1.rekisteroi();
KirjanGenre kg = new KirjanGenre(k, g);
KirjanGenre kg1 = new KirjanGenre(k1, g1);
KirjanGenre kg2 = new KirjanGenre(k, g1);
assertEquals("From: KirjanGenre line: 31", k.getId(), kg.getKirjaId());
assertEquals("From: KirjanGenre line: 32", k1.getId(), kg1.getKirjaId());
assertEquals("From: KirjanGenre line: 33", k.getId(), kg2.getKirjaId());
assertEquals("From: KirjanGenre line: 35", g.getId(), kg.getGenreId());
assertEquals("From: KirjanGenre line: 36", g1.getId(), kg1.getGenreId());
assertEquals("From: KirjanGenre line: 37", g1.getId(), kg2.getGenreId());
} // Generated by ComTest END
}
\ No newline at end of file
package fxKirjalista;
import java.io.PrintStream;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;
import Kirjalista.Kirja;
import Kirjalista.Kirjasto;
import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ListChooser;
import fi.jyu.mit.fxgui.TextAreaOutputStream;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.layout.Pane;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.text.Font;
import javafx.stage.Modality;
import javafx.stage.Stage;
/**
* Ohjelman pääikkunan käsittelijä
*/
public class KirjalistaGUIController implements Initializable {
@FXML private ListChooser<Kirja> chooserKirjat;
@FXML private ScrollPane paneKirja;
/**
* Kirjan lisäys
*/
@FXML void handleLisaaKirja() {
try {
Stage lisaaStage = new Stage();
lisaaStage.initModality(Modality.APPLICATION_MODAL);
final FXMLLoader ldr = new FXMLLoader(getClass().getResource("LisaaView.fxml"));
final Pane root = (Pane)ldr.load();
final LisaaController lisaaCtrl = (LisaaController) ldr.getController();
final Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("kirjalista.css").toExternalForm());
lisaaStage.setScene(scene);
lisaaStage.setTitle("Lisää kirja");
lisaaCtrl.setIsanta(this);
lisaaCtrl.setKirjasto(this.kirjasto);
lisaaStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Kirjan muokkaus
*/
@FXML void handleMuokkaaKirja() {
try {
Stage muokkaaStage = new Stage();
muokkaaStage.initModality(Modality.APPLICATION_MODAL);
final FXMLLoader ldr = new FXMLLoader(getClass().getResource("MuokkaaView.fxml"));
final Pane root = (Pane)ldr.load();
final MuokkaaController muokkaaCtrl = (MuokkaaController) ldr.getController();
final Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("kirjalista.css").toExternalForm());
muokkaaStage.setScene(scene);
muokkaaStage.setTitle("Muokkaa kirjaa");
muokkaaCtrl.setIsanta(this);
muokkaaCtrl.setKirjasto(this.kirjasto);
muokkaaStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Tiedosto-valikon tallenna-valinta
*/
@FXML void handleTallenna() {
// TODO:
Dialogs.showMessageDialog("Vielä ei osata tallentaa");
}
/**
* Apua-valikon tietoja-valinta
*/
@FXML void handleTietoja() {
// TODO:
Dialogs.showMessageDialog("Vielä ei osata antaa tietoja");
}
/**
* Tiedosto-valikon tulosta-valinta
*/
@FXML void handleTulosta() {
// TODO:
Dialogs.showMessageDialog("Vielä ei osata tulostaa");
}
/**
* Muokkaa-valikon poista-valinta
*/
@FXML void poistaKirja() {
poistoVahvistus();
}
@FXML void handleHaku() {
Dialogs.showMessageDialog("Vielä ei osata hakea");
}
// ============================================================================
private Kirjasto kirjasto;
private Kirja valittuKirja;
private TextArea areaKirja = new TextArea();
/**
* Luo näytölle dialogin, joka kysyy vahvistusta kirjan poistamiseksi
*/
public static void poistoVahvistus() {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Poista");
alert.setHeaderText(null);
alert.setContentText("Haluatko varmasti poistaa kirjan?");
ButtonType buttonTypeYes = new ButtonType("Kyllä", ButtonData.OK_DONE);
ButtonType buttonTypeCancel = new ButtonType("Ei", ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeYes, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();
if ( result.get() == buttonTypeYes ) Dialogs.showMessageDialog("Vielä ei osata poistaa");
}
/**
* Asettaa controllerille viitteen kirjasto-olioon
* @param kirjasto Kirjasto-luokan olio, johon viite asetetaan
*/
public void setKirjasto(Kirjasto kirjasto) {
this.kirjasto = kirjasto;
}
/**
* Hakee lisätyn kirjan sen id:n perusteella ja lisää sen näyttöön
* @param idnro Kirjan id
*/
public void hae(int idnro) {
chooserKirjat.clear();
int index = 0;
for (int i = 0; i < kirjasto.getKirjaLkm(); i++) {
Kirja kirja = kirjasto.haeKirja(i);
if (kirja.getId() == idnro) index = i;
chooserKirjat.add(kirja.getNimi(), kirja);
}
chooserKirjat.setSelectedIndex(index);
}
/**
* Näyttää listasta valitun kirjan tiedot,
* tilapäisesti yhteen isoon edit-kenttään
*/
protected void naytaJasen() {
valittuKirja = chooserKirjat.getSelectedObject();
if (valittuKirja == null) return;
areaKirja.setText("");
try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaKirja)) {
valittuKirja.tulosta(os);
}
}
/**
* Tekee tarvittavat muut alustukset, nyt vaihdetaan GridPanen tilalle
* yksi iso tekstikenttä, johon voidaan tulostaa jäsenten tiedot.
* Alustetaan myös jäsenlistan kuuntelija
*/
protected void alusta() {
paneKirja.setContent(areaKirja);
areaKirja.setFont(new Font("Courier New", 12));
paneKirja.setFitToHeight(true);
chooserKirjat.clear();
chooserKirjat.addSelectionListener(e -> naytaJasen());
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
alusta();
}
}