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 1500 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.jdt.USER_LIBRARY/ohj2"/>
<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
<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>htyo</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>
<filteredResources>
<filter>
<id>1737533798199</id>
<name>tiedostot</name>
<type>5</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-*.dat</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
<?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="kohtaushallinta"/>
<info/>
</deploy>
<signjar/>
</anttasks:AntTask>
kuvat/hahmo_asia.png

519 KiB

kuvat/kohtaukset.png

830 KiB

kuvat/muokkaa.png

456 KiB

kuvat/nayta_kohtaus.png

20.8 KiB

kuvat/paaikkuna.png

48 KiB

kuvat/uusi_tietue.png

23.1 KiB

package fxKohtaushallinta;
import java.util.ArrayList;
import java.util.List;
public class Avainsanat {
private String[] sanat;
private int sanoja;
/**
* Lukee
* @param koko Avainsanataulukon koko
* @param sanat avainsanat välilyönnillä eroteltuina
* @example
* <pre name="test">
* Avainsanat a = new Avainsanat(5, " Yksi Kaksi Kolme Neljä Viisi Kuusi");
* a.montaSanaa() === 5;
* a.haeIndeksista(1) === "Kaksi";
* a.haeIndeksista(4) === "Viisi";
* a = new Avainsanat(6, "Yksi Kaksi Kolme Neljä");
* a.montaSanaa() === 4;
* </pre>
*/
public Avainsanat(int koko, String sanat) {
this.sanat = new String[koko];
this.sanoja = 0;
String[] uusi = sanat.split("\\s+");
for (String s : uusi) {
if (s.length() > 0 ) {
this.sanat[this.sanoja++] = s;
if (this.sanoja == this.sanat.length) break;
}
}
}
public int montaSanaa() {
return sanoja;
}
public int getKoko() {
return this.sanat.length;
}
public String get(int indeksi) {
if (indeksi > -1 && indeksi < this.sanoja) return this.sanat[indeksi];
return "";
}
/**
* Lisää listaan avainsanat, joita siinä ei jo ole
* @param lista lista, johon lisätään
* @example
* <pre name="test">
*
* </pre>
*/
public void lisaaSanatListaan(List<String> lista) {
for (String sana : this.sanat)
if (!lista.contains(sana)) lista.add(sana);
}
/**
* Lisää sanan, jos on tilaa
* @param sana lisättävä sana
*/
public void lisaaSana(String sana) {
if (this.sanoja < this.sanat.length && haeIndeksi(sana) == -1)
this.sanat[this.sanoja++] = sana;
}
/**
* Jos sana löytyy taulukosta, poistaa sen. Siirtää taulukon viimeisen alkion poistettavan paikalle
* ja määrittää viimeisen alkion tyhjäksi. Päivittää sanojen lukumäärän.
* @param sana poistettava sana
*/
public void poistaSana(String sana) {
int i = haeIndeksi(sana);
if (i > -1) poistaSana(i);
}
/**
* Jos annetussa indeksissä on sana, poistetaan se. Siirtää taulukon viimeisen alkion poistettavan paikalle
* ja määrittää viimeisen alkion tyhjäksi. Päivittää sanojen lukumäärän.
* @param indeksi indeksi, josta poistetaan.
* @example
* <pre name="test">
* Avainsanat a = new Avainsanat(6, "Yksi Kaksi Kolme Neljä");
* a.poistaSana(0);
* a.get(0) === "Neljä";
* </pre>
*/
public void poistaSana(int indeksi) {
if (indeksi < -1 || indeksi > sanoja-1) return;
this.sanat[indeksi] = this.sanat[this.sanoja-1];
this.sanat[this.sanoja-1] = null;
this.sanoja--;
}
/**
* Hakee, mikä on sanan indeksi
* @param sana haettava sana
* @return Sanan indeksin. Jos ei löydy, -1.
*/
public int haeIndeksi(String sana) {
for (int i = 0; i < this.sanoja; i++)
if (sana.equals(this.sanat[i])) return i;
return -1;
}
public String[] getSanat() {
String[] uusi = new String[this.sanoja];
for (int i = 0; i < sanoja; i++) uusi[i] = this.sanat[i];
return uusi;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (String s : this.sanat) sb.append(" " + s);
return sb.toString();
}
}
package fxKohtaushallinta;
public class Kohtaukset {
private String otsikko;
private Kohtaus[] kohtaukset = new Kohtaus[1000];
private Tietue[] hahmot = new Tietue[1000];
private Tietue[] asiat = new Tietue[1000];
public final static int KOHTAUS = 0;
public final static int HAHMO = 1;
public final static int ASIA = 2;
public Kohtaukset() {
//
}
/**
* Hakee hahmon halutusta indeksistä
* @param indeksi haettava indeksi
* @return tietue, johon indeksi viittaa
*/
public Tietue getHahmo(int indeksi) {
return null;
}
}
package fxKohtaushallinta;
/**
* @author Jussi Lipitsäinen
* @version 20.2.2025
*
*/
public class Kohtaus extends Tietue {
private String muistiinpanot;
Kohtaus(String tiedot) {
int i = tiedot.lastIndexOf('|');
super(tiedot.substring(0, i));
this.muistiinpanot = tiedot.substring(i).strip();
}
}
package fxKohtaushallinta;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ListChooser;
import fi.jyu.mit.fxgui.ModalController;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
/**
* @author Jussi Lipitsäinen
* @version 20.2.2025
*
*/
public class KohtaushallintaGUIController {
private Kohtaukset kohtaukset = new Kohtaukset();
private int valittuIndeksi = 1; // VÄLIAIKAINEN MUUTTUJA METODIEN TESTAAMISEKSI
@FXML private Button btnAvaaKohtaus;
@FXML private Button btnLisaaHahmo;
@FXML private Button btnMuokkaaKohtausta;
@FXML private Button btnMuokkaaValittua;
@FXML private Button btnPoistaHahmo;
@FXML private Button btnPoistaKohtaus;
@FXML private Button btnSulje;
@FXML private Button btnTallenna;
@FXML private Button btnTuhoaValittu;
@FXML private Button btnTyhjennaAsiaSuodatin;
@FXML private Button btnTyhjennaHahmoSuodatin;
@FXML private Button btnTyhjennaKohtausSuodattimet;
@FXML private Button btnUusiKohtaus;
@FXML private Label lblOtsikko;
@FXML private MenuItem menuTallenna;
@FXML private MenuItem menuUusiHahmo;
@FXML private MenuItem menuUusiKohtaus;
@FXML private TextArea txtAreaKohtausKuvaus;
@FXML private TextArea txtAreaMuistiinpanot;
@FXML private TextArea txtAreaValittu;
@FXML private TextField txtKohtausSuodatin;
@FXML private TextField txtSuodatinAsialista;
@FXML private TextField txtSuodatinAsiat;
@FXML private TextField txtSuodatinHahmolista;
@FXML private TextField txtSuodatinHahmot;
//TODO: Yhdistä luokkaobjekteiksi
@FXML private ListChooser<?> lstChooserKohtaukset;
@FXML private ListChooser<?> lstChooserHahmot;
@FXML private ListChooser<?> lstChooserAsiat;
@FXML private ListChooser<?> lstChooserHahmolista;
@FXML private ListChooser<?> lstChooserAsialista;
@FXML private ComboBox<?> cmbAsialistaAS;
@FXML private ComboBox<?> cmbAsiatAS;
@FXML private ComboBox<?> cmbHahmolistaAS;
@FXML private ComboBox<?> cmbHahmotAS;
@FXML private ComboBox<?> cmbKohtausAS;
@FXML private MenuItem menuUusiAsia;
@FXML private Button btnUusiAsia;
@FXML private Button btnUusiHahmo;
@FXML private Button btnTyhjennaSuodattimet1;
@FXML private Button btnTyhjennaSuodattimet11;
@FXML void handleAsiaAS() {
paivitaAvainsana(cmbAsiatAS);
}
@FXML void handleAsialistanAS() {
paivitaAvainsana(cmbAsialistaAS);
}
@FXML void handleAvaaKohtaus() {
avaaKohtaus(valittuIndeksi);
}
@FXML void handleHahmoAS(ActionEvent event) {
paivitaAvainsana(cmbHahmotAS);
}
@FXML void handleHahmolistanAS(ActionEvent event) {
paivitaAvainsana(cmbHahmolistaAS);
}
@FXML void handleKohtausAS(ActionEvent event) {
paivitaAvainsana(cmbKohtausAS);
}
@FXML void handleLisaaHahmo(ActionEvent event) {
lisaaKohtaukseen(Kohtaukset.HAHMO, valittuIndeksi);
}
@FXML void handleMuokkaaKohtausta(ActionEvent event) {
muokkaaTietuetta(Kohtaukset.KOHTAUS, valittuIndeksi);
}
@FXML void handleMuokkaaValittua() {
//TODO hanki tieto, mikä valittu
muokkaaTietuetta(Kohtaukset.HAHMO, 0);
}
@FXML void handlePoistaHahmo() {
//TODO hanki tieto, mikä valittu
poistaKohtauksesta(Kohtaukset.HAHMO, valittuIndeksi);
}
@FXML void handlePoistaKohtaus() {
tuhoaTietue(Kohtaukset.KOHTAUS, valittuIndeksi);
}
@FXML void handleSulje(ActionEvent event) {
sulje();
}
@FXML void handleTallenna(ActionEvent event) {
tallenna();
}
@FXML void handleTietueKlikkaus() {
//
}
@FXML void handleTuhoaValittu() {
tuhoaTietue(Kohtaukset.HAHMO, valittuIndeksi);
}
@FXML void handleTyhjennaAsiaSuodatin() {
//Tähän tyyliin tulevaisuudessa, paitsi yhdistävän luokan avulla:
tyhjennaSuodatin(txtSuodatinAsiat);
}
@FXML void handleTyhjennaAsialistaSuodatin(ActionEvent event) {
//Vaikka näin tulevaisuudessa:
tyhjennaSuodatin(txtSuodatinAsialista);
}
@FXML void handleTyhjennaHahmoSuodatin(ActionEvent event) {
tyhjennaSuodatin(txtSuodatinHahmot);
}
@FXML void handleTyhjennaHahmolistaSuodatin(ActionEvent event) {
tyhjennaSuodatin(txtSuodatinHahmolista);
}
@FXML void handleTyhjennaKohtausSuodattimet(ActionEvent event) {
tyhjennaSuodatin(txtKohtausSuodatin);
}
@FXML void handleUusiAsia(ActionEvent event) {
uusiTietue(Kohtaukset.ASIA);
}
@FXML void handleUusiHahmo(ActionEvent event) {
uusiTietue(Kohtaukset.HAHMO);
}
@FXML void handleUusiKohtaus(ActionEvent event) {
uusiTietue(Kohtaukset.KOHTAUS);
}
@FXML void handlePoistaAsia() {
poistaKohtauksesta(Kohtaukset.ASIA, valittuIndeksi);
}
@FXML void handleUusiLista() {
uusiLista();
}
@FXML void handleLataaLista() {
lataaLista();
}
//=====================================================
/**
* Tallentaa tiedot ja sulkee ohjelman
*/
private void sulje() {
tallenna();
Platform.exit();
}
/**
* Avaa dialogin ladattavan listan valitsemiseksi
*/
private void lataaLista() {
Dialogs.showMessageDialog("Listan lataamista ei ole vielä toteutettu");
}
/*
* Avaa dialogin uuden listan luomiseksi ja jos saa takaisin uuden listan, asettaa sen käsiteltäväksi.
*/
private void uusiLista() {
Kohtaukset uusi = luoUusiLista();
if ( uusi != null ) kohtaukset = uusi;
}
/**
* Poistaa halutun tietueen
* @param tyyppi KOHTAUS, HAHMO, ASIA
* @param indeksi poistettavan indeksi
*/
private void tuhoaTietue(int tyyppi, int indeksi) {
Dialogs.showMessageDialog("Tietueen poistoa ei ole vielä toteutettu");
}
/**
* Lisää kohtaukseen valitun tyyppisen tietueen tietystä indeksistä
* @param tyyppi tietueen tyyppi
* @param indeksi tietueen indeksi
*/
private void lisaaKohtaukseen(int tyyppi, int indeksi) {
Dialogs.showMessageDialog("Tietueen lisäämistä kohtaukseen ei ole vielä toteutettu");
}
private void muokkaaTietuetta(int tyyppi, int indeksi) {
MuokkaaTietuettaController.muokkaaTietuetta(null, kohtaukset, tyyppi, indeksi);
}
/**
* Poistaa tietueen kohtauksesta
* @param tyyppi poistettavan tietueen tyyppi
* @param indeksi poistettavan tietueen indeksi
*/
private void poistaKohtauksesta(int tyyppi, int indeksi) {
Dialogs.showMessageDialog("Tietueen poistoa kohtauksesta ei ole vielä toteutettu");
}
/**
* Tyhjentää valitun suodattimen
* @param suodatin tyhjennettävä suodatin
*/
private void tyhjennaSuodatin(TextField suodatin) {
// TODO Muut toimenpiteet, muunna jutut luokaksi pelkän textfieldin sijaan
suodatin.setText("");
}
/**
* Päivittää avainsanat
* @param avainsanat
*/
private void paivitaAvainsana(ComboBox<?> avainsanat) {
//TODO: Yhdistä jutut luokaksi
Dialogs.showMessageDialog("Avainsanan päivitystä ei ole vielä toteutettu");
}
/**
* Avaa valitun kohtauksen omaan ikkunaansa
* @param indeksi valitun kohtauksen indeksi
*/
public void avaaKohtaus(int indeksi) {
NaytaKohtausController.naytaKohtaus(kohtaukset, indeksi, null);
}
/**
* Luo uuden tietueen haluttua tyyppiä
* @param tyyppi KOHTAUS, HAHMO, ASIA
*/
private void uusiTietue(int tyyppi) {
Dialogs.showMessageDialog("Uuden tietueen luomista ei ole vielä toteutettu");
}
/**
* Luo uuden kohtauslistan
* @return viitteen luotuun listaan. Null, jos epäonnistui
*/
private Kohtaukset luoUusiLista() {
Dialogs.showQuestionDialog("Uusi lista", "Luodaan uusi kohtauslista, oletko varma?", "Kyllä", "En ole");
return null;
}
/**
* Tallentaa tiedot levylle ja ilmoittaa onnistumisesta
* @return true, jos tallennus onnistui ja muuten false
*/
private boolean tallenna() {
Dialogs.showMessageDialog("Tallennusta ei ole vielä toteutettu");
return false;
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?import fi.jyu.mit.fxgui.ListChooser?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<BorderPane prefHeight="800.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxKohtaushallinta.KohtaushallintaGUIController">
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="Tiedosto">
<items>
<MenuItem fx:id="menuUusiLista" mnemonicParsing="false" onAction="#handleUusiLista" text="Uusi kohtauslista" />
<MenuItem fx:id="menuLataaLista" mnemonicParsing="false" onAction="#handleLataaLista" text="Lataa kohtauslista" />
<MenuItem fx:id="menuSulje" mnemonicParsing="false" onAction="#handleSulje" text="Sulje" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Muokkaa">
<items>
<MenuItem fx:id="menuTallenna" mnemonicParsing="false" onAction="#handleTallenna" text="Tallenna muutokset" />
<MenuItem fx:id="menuUusiKohtaus" mnemonicParsing="false" onAction="#handleUusiKohtaus" text="Uusi kohtaus" />
<MenuItem fx:id="menuUusiHahmo" mnemonicParsing="false" onAction="#handleUusiHahmo" text="Uusi hahmo" />
<MenuItem fx:id="menuUusiAsia" mnemonicParsing="false" onAction="#handleUusiAsia" text="Uusi asia / esine" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Apua">
<items>
<MenuItem mnemonicParsing="false" text="Tietoja" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<left>
<VBox prefWidth="500.0" style="-fx-border-color: gray; -fx-border-radius: 5;" BorderPane.alignment="CENTER">
<children>
<Label fx:id="lblOtsikko" text="Kohtauslistan otsikko">
<font>
<Font size="14.0" />
</font>
<VBox.margin>
<Insets bottom="5.0" />
</VBox.margin>
</Label>
<HBox prefHeight="400.0" prefWidth="400.0">
<children>
<VBox prefWidth="350.0" spacing="10.0">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtKohtausSuodatin" prefWidth="200.0" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnTyhjennaSuodattimet" fx:id="btnTyhjennaKohtausSuodattimet" mnemonicParsing="false" onAction="#handleTyhjennaKohtausSuodattimet" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbKohtausAS" onAction="#handleKohtausAS" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserKohtaukset" onMouseClicked="#handleTietueKlikkaus" rivit="Majatalo&#10;Väijytys varastossa&#10;Huolestunut aviomies&#10;Ruumis kujalla" />
</children>
<padding>
<Insets right="10.0" />
</padding>
</VBox>
<VBox alignment="CENTER" prefWidth="250.0" spacing="20.0">
<children>
<Button id="btnSuljeOhjelma" fx:id="btnAvaaKohtaus" onAction="#handleAvaaKohtaus" prefHeight="40.0" prefWidth="120.0" text="_AVAA KOHTAUS" textAlignment="CENTER" />
<Button id="btnUusiKohtaus" fx:id="btnUusiKohtaus" onAction="#handleUusiKohtaus" prefHeight="40.0" prefWidth="120.0" text="_UUSI KOHTAUS" textAlignment="CENTER" />
<Button id="btnPoistaKohtaus" fx:id="btnMuokkaaKohtausta" onAction="#handleMuokkaaKohtausta" prefHeight="50.0" prefWidth="120.0" text="_MUOKKAA KOHTAUSTA" textAlignment="CENTER" wrapText="true" />
<Button id="btnPoistaKohtaus" fx:id="btnPoistaKohtaus" onAction="#handlePoistaKohtaus" prefHeight="40.0" prefWidth="120.0" text="POISTA KOHTAUS" textAlignment="CENTER" />
<Button id="btnPoistaKohtaus" fx:id="btnTallenna" onAction="#handleTallenna" prefHeight="50.0" prefWidth="120.0" text="_TALLENNA MUUTOKSET" textAlignment="CENTER" wrapText="true" />
<Button id="btnSuljeOhjelma" fx:id="btnSulje" onAction="#handleSulje" prefHeight="40.0" prefWidth="120.0" text="_SULJE OHJELMA" textAlignment="CENTER" />
</children>
<padding>
<Insets bottom="10.0" top="10.0" />
</padding>
</VBox>
</children>
</HBox>
<TextArea id="txtAreaKohtauksenKuvaus" fx:id="txtAreaKohtausKuvaus" promptText="Kohtauksen kuvaus" text="Sovittu tapaaminen majatalossa. Einauge on yläkerran huoneessa ja tulee tapaamaan alas pelaajia. Ankerias seuraa tilannetta majatalon ulkopuolella. " wrapText="true">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</TextArea>
<Label text="Muistiinpanot:">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</Label>
<TextArea id="txtAreaMuistiinpanot" fx:id="txtAreaMuistiinpanot" promptText="Pelinjohtajan muistiinpanot" text="Einauge suostui auttamaan tarvittaessa sopivaa korvausta vastaan." wrapText="true" />
</children>
<BorderPane.margin>
<Insets bottom="10.0" left="10.0" top="10.0" />
</BorderPane.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</left>
<center>
<VBox prefHeight="500.0" prefWidth="500.0" BorderPane.alignment="CENTER">
<children>
<HBox prefHeight="600.0" spacing="10.0">
<children>
<VBox prefWidth="400.0">
<children>
<Label text="Hahmot" />
<VBox spacing="10.0" style="-fx-border-color: gray; -fx-border-radius: 5;">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtSuodatinHahmot" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnTyhjennaSuodattimet" fx:id="btnTyhjennaHahmoSuodatin" mnemonicParsing="false" onAction="#handleTyhjennaHahmoSuodatin" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbHahmotAS" onAction="#handleHahmoAS" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserHahmot" onMouseClicked="#handleTietueKlikkaus" rivit="Einauge Spaltmann" />
<HBox prefHeight="100.0" spacing="10.0">
<padding>
<Insets top="5.0" />
</padding>
<children>
<Button fx:id="btnPoistaHahmo" mnemonicParsing="false" onAction="#handlePoistaHahmo" prefWidth="200.0" text="--&gt; POISTA" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
<Label text="Asiat ja esineet">
<padding>
<Insets top="10.0" />
</padding>
</Label>
<VBox spacing="10.0" style="-fx-border-color: gray; -fx-border-radius: 5;">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtSuodatinAsiat" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnTyhjennaSuodattimet" fx:id="btnTyhjennaAsiaSuodatin" mnemonicParsing="false" onAction="#handleTyhjennaAsiaSuodatin" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbAsiatAS" onAction="#handleAsiaAS" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserAsiat" onMouseClicked="#handleTietueKlikkaus" rivit="Isännän muistikuva&#10;Uhkapelipöytä&#10;Loosit&#10;" />
<HBox prefHeight="100.0" spacing="10.0">
<padding>
<Insets top="5.0" />
</padding>
<children>
<Button fx:id="btnPoistaAsia" mnemonicParsing="false" onAction="#handlePoistaAsia" prefWidth="200.0" text="--&gt; POISTA" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</children>
</VBox>
<VBox prefWidth="400.0">
<children>
<Label />
<VBox spacing="10.0">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtSuodatinHahmolista" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnTyhjennaSuodattimet" fx:id="btnTyhjennaSuodattimet1" mnemonicParsing="false" onAction="#handleTyhjennaHahmolistaSuodatin" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbHahmolistaAS" onAction="#handleHahmolistanAS" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserHahmolista" onMouseClicked="#handleTietueKlikkaus" rivit="Ankerias&#10;Osanna Windandus&#10;Erich Stalhlhaken&#10;Josef Specht" />
<HBox prefHeight="100.0" spacing="10.0">
<padding>
<Insets top="5.0" />
</padding>
<children>
<Button fx:id="btnLisaaHahmo" mnemonicParsing="false" onAction="#handleLisaaHahmo" prefWidth="200.0" text="&lt;-- LISÄÄ" />
<Button fx:id="btnUusiHahmo" mnemonicParsing="false" onAction="#handleUusiHahmo" prefWidth="200.0" text="Luo uusi" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
<Label>
<padding>
<Insets top="10.0" />
</padding>
</Label>
<VBox spacing="10.0">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtSuodatinAsialista" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnTyhjennaSuodattimet" fx:id="btnTyhjennaSuodattimet11" mnemonicParsing="false" onAction="#handleTyhjennaAsialistaSuodatin" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbAsialistaAS" onAction="#handleAsialistanAS" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserAsialista" onMouseClicked="#handleTietueKlikkaus" rivit="Vartijoiden käytös&#10;Lukitsematon ovi&#10;Verijälkiä portaissa&#10;Tyttären muistikuva" />
<HBox prefHeight="100.0" spacing="10.0">
<padding>
<Insets top="5.0" />
</padding>
<children>
<Button mnemonicParsing="false" prefWidth="200.0" text="&lt;-- LISÄÄ" />
<Button fx:id="btnUusiAsia" mnemonicParsing="false" onAction="#handleUusiAsia" prefWidth="200.0" text="Luo uusi" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</children>
</VBox>
</children>
</HBox>
<TextArea id="txtAreaKohtauksenKuvaus" fx:id="txtAreaValittu" promptText="Valitun kuvaus" text="Muistaa Einaugen tavanneen nuoren pojan. Antaa kuvauksen Hannosta." wrapText="true">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</TextArea>
<HBox spacing="20.0">
<children>
<Button fx:id="btnMuokkaaValittua" onAction="#handleMuokkaaValittua" prefWidth="500.0" text="Muokkaa _valittua" />
<Button fx:id="btnTuhoaValittu" onAction="#handleTuhoaValittu" prefWidth="500.0" text="Tu_hoa valittu" />
</children>
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</HBox>
</children>
<BorderPane.margin>
<Insets />
</BorderPane.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</center>
</BorderPane>
package fxKohtaushallinta;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.fxml.FXMLLoader;
/**
* @author jlipi
* @version 26.1.2025
*
*/
public class KohtaushallintaMain extends Application {
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader ldr = new FXMLLoader(getClass().getResource("KohtaushallintaGUIView.fxml"));
final Pane root = ldr.load();
//final KohtaushallintaGUIController kohtaushallintaCtrl = (KohtaushallintaGUIController) ldr.getController();
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("kohtaushallinta.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.setTitle("Kohtaushallinta");
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
<?xml version="1.0" encoding="UTF-8"?>
<?import fi.jyu.mit.fxgui.ListChooser?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<BorderPane minWidth="500.0" prefHeight="402.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxKohtaushallinta.MuokkaaTietuettaController">
<right>
<VBox maxWidth="150.0" minWidth="250.0" prefHeight="200.0" prefWidth="250.0" spacing="10.0" style="-fx-border-color: gray; -fx-border-radius: 5;" BorderPane.alignment="CENTER">
<children>
<HBox fillHeight="false" prefHeight="30.0">
<children>
<TextField id="txtHahmotSuodatin" fx:id="txtSuodatin" promptText="Suodatin">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</TextField>
<Button id="btnHahmotTyhjenna" fx:id="btnTyhjennaSuodattimet" mnemonicParsing="false" onAction="#handleTyhjennaSuodattimet" prefWidth="80.0" text="Tyhjennä" />
</children>
<VBox.margin>
<Insets top="5.0" />
</VBox.margin>
</HBox>
<ComboBox id="cmbHahmotAvain1" fx:id="cmbAvainsanat" prefWidth="300.0" promptText="Avainsana">
<padding>
<Insets right="5.0" />
</padding>
</ComboBox>
<ListChooser fx:id="lstChooserTietueet" onMouseClicked="#handleTietueKlikkaus" rivit="Majatalo&#10;Väijytys varastossa&#10;Huolestunut aviomies&#10;" />
<HBox prefHeight="100.0" spacing="10.0">
<children>
<Button id="btnMuokkaaTietuetta" fx:id="btnMuokkaa" minWidth="110.0" mnemonicParsing="false" onAction="#handleMuokkaa" prefHeight="25.0" text="Muokkaa" />
<Button id="btnPoistaTietue" fx:id="btnPoista" minWidth="110.0" mnemonicParsing="false" onAction="#handlePoista" prefHeight="25.0" text="Poista" />
</children>
<padding>
<Insets top="5.0" />
</padding>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<BorderPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</BorderPane.margin>
</VBox>
</right>
<center>
<BorderPane style="-fx-border-color: gray; -fx-border-radius: 5;" BorderPane.alignment="CENTER">
<right>
<VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
<children>
<Label text="Avainsanat" />
<TextField fx:id="txtUusiAvainsana" text="Uusi avainsana">
<VBox.margin>
<Insets bottom="10.0" top="10.0" />
</VBox.margin>
</TextField>
<Button id="btnLisaaAvainsana" fx:id="btnLisaaAvainsana" minWidth="150.0" mnemonicParsing="false" onAction="#handleLisaaAvainsana" prefWidth="150.0" text="Lisää avainsana">
<VBox.margin>
<Insets bottom="10.0" />
</VBox.margin>
</Button>
<ListChooser id="listAvainsanat" fx:id="lstChooser" minWidth="150.0" onMouseClicked="#handleAvainsanaKlikkaus" prefHeight="379.0" prefWidth="150.0" rivit="Ansa&#10;Tarttuva_Nyrkki&#10;Satama" />
<Button id="btnPoistaAvainsana" fx:id="btnPoistaAvainsana" minWidth="150.0" mnemonicParsing="false" onAction="#handlePoistaAvainsana" prefWidth="150.0" text="Poista avainsana">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</Button>
</children>
<BorderPane.margin>
<Insets left="10.0" right="10.0" top="10.0" />
</BorderPane.margin>
</VBox>
</right>
<center>
<VBox BorderPane.alignment="CENTER">
<children>
<HBox prefWidth="200.0">
<children>
<Label minWidth="40.0" text="Nimi" />
<TextField fx:id="txtTietueenNimi" prefWidth="500.0" text="Väijytys varastossa" />
</children>
</HBox>
<Label text="Kuvaus">
<VBox.margin>
<Insets bottom="10.0" top="10.0" />
</VBox.margin>
</Label>
<TextArea fx:id="txtAreaKuvaus" prefWidth="200.0" text="Ankeriaan vinkki johtaa suoraan kultin väijytykseen. Kartta kertoo tarkemmin tilanteen." wrapText="true" />
<HBox alignment="TOP_CENTER" prefWidth="500.0" spacing="10.0">
<children>
<Button id="btnUusiTietue" fx:id="btnUusiTietue" mnemonicParsing="false" onAction="#handleUusiTietue" prefHeight="25.0" prefWidth="90.0" text="Luo uusi" />
<Button id="btnTallenna" fx:id="btnTallenna" mnemonicParsing="false" onAction="#handleTallenna" prefHeight="25.0" prefWidth="120.0" text="Tallenna" />
<Button id="btnPeruuta" fx:id="btnPeruuta" mnemonicParsing="false" onAction="#handlePeruuta" prefHeight="25.0" prefWidth="120.0" text="Peruuta" />
</children>
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</HBox>
<Button id="btnSulje" fx:id="btnSulje" mnemonicParsing="false" onAction="#handleSulje" prefHeight="29.0" prefWidth="400.0" text="Sulje">
<VBox.margin>
<Insets left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</Button>
</children>
<BorderPane.margin>
<Insets left="10.0" right="10.0" top="10.0" />
</BorderPane.margin>
</VBox>
</center>
<BorderPane.margin>
<Insets bottom="10.0" left="10.0" top="10.0" />
</BorderPane.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</BorderPane>
</center>
<top>
<MenuBar prefWidth="600.0" BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="Tiedosto">
<items>
<MenuItem mnemonicParsing="false" text="Luo uusi" />
<MenuItem mnemonicParsing="false" text="Tallenna" />
<MenuItem mnemonicParsing="false" text="Sulje" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Muokkaa">
<items>
<MenuItem mnemonicParsing="false" text="Peruuta muutokset" />
<MenuItem mnemonicParsing="false" text="Tyhjennä kentät" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Apua">
<items>
<MenuItem mnemonicParsing="false" text="Tietoja" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
</BorderPane>
package fxKohtaushallinta;
import fi.jyu.mit.fxgui.ModalController;
import fi.jyu.mit.fxgui.ModalControllerInterface;
import javafx.stage.Stage;
import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ListChooser;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
public class MuokkaaTietuettaController implements ModalControllerInterface<String> {
@FXML private Button btnLisaaAvainsana;
@FXML private Button btnMuokkaa;
@FXML private Button btnPeruuta;
@FXML private Button btnPoista;
@FXML private Button btnPoistaAvainsana;
@FXML private Button btnSulje;
@FXML private Button btnTallenna;
@FXML private Button btnTyhjennaSuodattimet;
@FXML private Button btnUusiTietue;
@FXML private ComboBox<?> cmbAvainsanat;
@FXML private ListChooser<?> lstChooser;
@FXML private ListChooser<?> lstChooserTietueet;
@FXML private TextArea txtAreaKuvaus;
@FXML private TextField txtSuodatin;
@FXML private TextField txtTietueenNimi;
@FXML private TextField txtUusiAvainsana;
private int tyyppi;
@FXML void handleAvainsanaKlikkaus(MouseEvent event) {
//
}
@FXML void handleLisaaAvainsana(ActionEvent event) {
lisaaAvainsana();
}
@FXML void handleMuokkaa(ActionEvent event) {
muokkaaTietuetta(0);
}
@FXML void handlePoista(ActionEvent event) {
poistaTietue(0);
}
@FXML void handlePoistaAvainsana(ActionEvent event) {
poistaAvainsana(0);
}
@FXML void handleTietueKlikkaus(MouseEvent event) {
//
}
@FXML void handleTyhjennaSuodattimet(ActionEvent event) {
tyhjennaSuodattimet();
}
@FXML void handlePeruuta(ActionEvent event) {
peruuta();
}
@FXML void handleSulje(ActionEvent event) {
sulje();
}
@FXML void handleTallenna(ActionEvent event) {
tallenna();
}
@FXML void handleUusiTietue(ActionEvent event) {
uusiTietue();
}
//============
/**
* Tarkistaa tekstikentän sisällön ja lisää sen avainsanaksi, jos kelvollinen
*/
public void lisaaAvainsana() {
Dialogs.showMessageDialog("Avainsanan lisäämistä ei ole vielä toteutettu");
}
/**
* Avaa uuden ikkunan ja luo uuden tietueen muokkaamista varten
* @param modalityStage modaliteetti
* @param koht kohtaukset
* @param tyyppi tietueen tyyppi
*/
public static void uusiTietue(Stage modalityStage, Kohtaukset koht, int tyyppi) {
ModalController.showModal(KohtaushallintaGUIController.class.getResource("MuokkaaTietuetta.fxml"),
"Tietue",
modalityStage, null);
}
/**
* Avaa ikkunan ja muokkaa valittua tietuetta
* @param modalityStage modaliteetti
* @param koht kohtaukset
* @param tyyppi tietueen tyyppi
* @param indeksi tietueen indeksi
*/
public static void muokkaaTietuetta(Stage modalityStage, Kohtaukset koht, int tyyppi, int indeksi) {
String otsikko;
switch (tyyppi) {
case Kohtaukset.KOHTAUS:
otsikko = "Muokkaa kohtauksia";
break;
case Kohtaukset.HAHMO:
otsikko = "Muokkaa hahmoja";
break;
case Kohtaukset.ASIA:
otsikko = "Muokkaa asioita / esineitä";
break;
default:
otsikko = "";
break;
}
ModalController.showModal(KohtaushallintaGUIController.class.getResource("MuokkaaTietuetta.fxml"),
otsikko,
modalityStage, null);
}
/**
* Muokkaa valittua tietuetta
* @param indeksi tietueen indeksi
*/
private void muokkaaTietuetta(int indeksi) {
Dialogs.showMessageDialog("Tietueen muokkaamista lisäämistä ei ole vielä toteutettu");
}
private void poistaTietue(int indeksi) {
Dialogs.showMessageDialog("Tietueen poistoa ei ole vielä toteutettu");
}
private void poistaAvainsana(int indeksi) {
Dialogs.showMessageDialog("Avainsanan poistoa ei ole vielä toteutettu");
}
private void uusiTietue() {
Dialogs.showMessageDialog("Uutta tietuetta ei ole vielä toteutettu");
}
private void tallenna() {
Dialogs.showMessageDialog("Tallennusta ei ole vielä toteutettu");
}
private void sulje() {
Dialogs.showMessageDialog("Sulkemista ei ole vielä toteutettu");
}
private void peruuta() {
Dialogs.showMessageDialog("Toimintojen peruuttamista ei ole vielä toteutettu");
}
private void tyhjennaSuodattimet() {
txtSuodatin.setText("");
}
@Override
public String getResult() {
// TODO Auto-generated method stub
return null;
}
@Override
public void handleShown() {
// TODO Auto-generated method stub
}
@Override
public void setDefault(String arg0) {
// TODO Auto-generated method stub
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import fi.jyu.mit.fxgui.ListChooser?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<BorderPane minWidth="500.0" prefHeight="800.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxKohtaushallinta.NaytaKohtausController">
<top>
<MenuBar prefWidth="800.0" BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="Tiedosto">
<items>
<MenuItem fx:id="menuSulje" mnemonicParsing="false" onAction="#handleSulje" text="Sulje" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Muokkaa">
<items>
<MenuItem fx:id="menuUusiHahmo" mnemonicParsing="false" onAction="#handleUusiHahmo" text="Uusi hahmo" />
<MenuItem fx:id="menuUusiAsia" mnemonicParsing="false" onAction="#handleUusiAsia" text="Uusi asia / esine" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Apua">
<items>
<MenuItem mnemonicParsing="false" text="Tietoja" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<center>
<VBox alignment="CENTER_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="10.0" style="-fx-border-color: gray; -fx-border-radius: 5;" BorderPane.alignment="CENTER_LEFT">
<children>
<HBox alignment="CENTER_LEFT" minWidth="30.0" prefHeight="35.0" spacing="10.0">
<children>
<Label fx:id="lblOtsikko" minWidth="50.0" prefWidth="600.0" text="Kohtauksen otsikko">
<font>
<Font size="18.0" />
</font></Label>
<Button id="btnSuljeIkkuna" fx:id="btnSulje" mnemonicParsing="false" onAction="#handleSulje" prefHeight="25.0" prefWidth="200.0" text="Sulje ikkuna" />
</children>
</HBox>
<TextArea id="txtAreaKohtauksenKuvaus" fx:id="txtAreaKohtauksenKuvaus" maxHeight="1000.0" prefHeight="200.0" prefWidth="500.0" text="Ankeriaan vinkki johtaa suoraan kultin väijytykseen. Kartta kertoo tarkemmin tilanteen." />
<VBox prefHeight="170.0" prefWidth="820.0">
<children>
<Label text="Muistiinpanot" />
<TextArea id="txtAreaMuistiinpanot" fx:id="txtAreaMuistiinpanot" maxHeight="1000.0" prefHeight="200.0" prefWidth="500.0" text="Ei mennyt suunnitelmien mukaan. Pelaajat varomattomia. Nokkeluus pelasti.">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</TextArea>
</children>
</VBox>
</children>
<BorderPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</BorderPane.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</center>
<bottom>
<VBox prefHeight="300.0" spacing="10.0" BorderPane.alignment="CENTER">
<children>
<HBox prefWidth="850.0" spacing="10.0" style="-fx-border-color: gray; -fx-border-radius: 5;">
<children>
<VBox prefHeight="250.0" spacing="10.0">
<children>
<Label id="lblHahmot" text="Hahmot" />
<ComboBox id="cmbHahmoAvainsanat" prefHeight="25.0" prefWidth="200.0" promptText="Avainsanat" />
<ListChooser id="lstcHahmot" prefWidth="116.0" rivit="Ankerias&#10;Erich Stahlhaken" />
<Button id="btnUusiHahmo" fx:id="btnUusiHahmo" mnemonicParsing="false" onAction="#handleUusiHahmo" prefHeight="25.0" prefWidth="194.0" text="Lisää uusi hahmo" />
</children>
</VBox>
<VBox prefHeight="250.0" prefWidth="200.0" spacing="10.0">
<children>
<Label text="Asiat ja esineet" />
<ComboBox id="cmbAsiaAvainsanat" prefHeight="25.0" prefWidth="200.0" promptText="Avainsanat" />
<ListChooser id="lstcAsiat" minWidth="100.0" prefWidth="200.0" rivit="Vartijoiden käytös&#10;Lukitsematon ovi" />
<Button id="btnUusiAsia" fx:id="btnUusiAsia" mnemonicParsing="false" onAction="#handleUusiAsia" prefHeight="25.0" prefWidth="191.0" text="Lisää uusi asia / esine" />
</children>
</VBox>
<VBox spacing="10.0">
<children>
<Label maxHeight="15.0" minHeight="15.0" prefHeight="15.0" text="Kuvaus" />
<TextArea id="txtAreaValinnanKuvaus" fx:id="txtAreaValitunKuvaus" prefHeight="1000.0" text="Alueen vartijat on lahjottu. He ovat yllättävän välinpitämättömiä hahmojen toiminnasta" wrapText="true" />
</children>
</VBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
</children>
<BorderPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" />
</BorderPane.margin>
</VBox>
</bottom>
</BorderPane>
package fxKohtaushallinta;
import java.lang.ModuleLayer.Controller;
import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ModalController;
import fi.jyu.mit.fxgui.ModalControllerInterface;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
public class NaytaKohtausController implements ModalControllerInterface<String> {
@FXML private Button btnSulje;
@FXML private Button btnUusiAsia;
@FXML private Button btnUusiHahmo;
@FXML private Label lblOtsikko;
@FXML private MenuItem menuUusiHahmo;
@FXML private MenuItem menuSulje;
@FXML private MenuItem menuUusiAsia;
@FXML private TextArea txtAreaKohtauksenKuvaus;
@FXML private TextArea txtAreaMuistiinpanot;
@FXML private TextArea txtAreaValitunKuvaus;
@FXML void handleSulje(ActionEvent event) {
sulje();
}
@FXML
void handleUusiAsia(ActionEvent event) {
uusiTietue(Kohtaukset.ASIA);
}
@FXML
void handleUusiHahmo(ActionEvent event) {
uusiTietue(Kohtaukset.HAHMO);
}
//======================================
private void sulje() {
tallenna();
Platform.exit();
}
private boolean tallenna() {
Dialogs.showMessageDialog("Tallennusta ei ole vielä toteutettu");
return false;
}
private void uusiTietue(int tyyppi) {
Dialogs.showMessageDialog("Uuden tietueen luomista ei ole vielä toteutettu");
}
public static void naytaKohtaus(Kohtaukset koht, int ind, Stage modalityStage) {
//TODO: hae otsikko objektilta
String otsikko = "Majatalo";
ModalController.showModal(KohtaushallintaGUIController.class.getResource("NaytaKohtaus.fxml"),
otsikko,
modalityStage, null);
}
@Override
public String getResult() {
// TODO Auto-generated method stub
return null;
}
@Override
public void handleShown() {
// TODO Auto-generated method stub
}
@Override
public void setDefault(String oletus) {
// TODO Auto-generated method stub
}
}
package fxKohtaushallinta;
/**
* @author Jussi Lipitsäinen
* @version 28.2.2025
*
*/
public class Tietue {
private static final int MAXAVAIN = 10; //Kuinka monta avainsanaa saa olla
private int id;
private String otsikko;
private String kuvaus;
private Avainsanat avainsanat;
public Tietue() {
//
}
/**
* Lukee merkkijonon ("id | otsikko | avainsanat | kuvaus") tiedot kenttiin
* @param tiedot tiedot sisältävä merkkijono
* @example
* <pre name="test">
* Tietue t = new Tietue("1 | Tietue 1 | avain1 avain 2 avain 3 | tämä on kuvausteksti");
* t.getOtsikko() === "Tietue 1"; *
* </pre>
*/
public Tietue(String tiedot) {
String[] palaset = tiedot.split("[|]");
this.otsikko = palaset[1].strip();
this.avainsanat = new Avainsanat(MAXAVAIN, palaset[2].strip());
this.kuvaus = palaset[3].strip();
}
/**
* Lukee merkkijonon ("id | nimi | avainsanat | kuvaus") tiedot kenttiin
* @param tiedot tiedot sisältävä merkkijono
*/
public void lueJono(String tiedot) {
//
}
public void setID(int id) {
this.id = id;
}
public void setOtsikko(String otsikko) {
this.otsikko = otsikko;
}
public void setKuvaus(String kuvaus) {
this.kuvaus = kuvaus;
}
public int getID() {
return this.id;
}
public String getOtsikko() {
return this.otsikko;
}
public String getKuvaus() {
return this.kuvaus;
}
public Avainsanat getAvainsanat() {
return this.avainsanat;
}
}
\ No newline at end of file