#fix 19 TabPohja on nyt Tab, joka hoitaa monia asioita kuin itsestään

Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
This commit is contained in:
2026-05-14 23:24:22 +03:00
parent 1b589d0fb5
commit 18a849dfa6
11 changed files with 175 additions and 163 deletions
+21 -38
View File
@@ -2,11 +2,10 @@ package fi.lpam;
import fi.lpam.dataluokat.Tietokanta; import fi.lpam.dataluokat.Tietokanta;
import fi.lpam.gui.*; import fi.lpam.gui.*;
import fi.lpam.gui.elementit.MuutosIlmoitus; import fi.lpam.gui.elementit.MuutosIlmoitus;
import fi.lpam.gui.elementit.TabPohja;
import javafx.application.Application; import javafx.application.Application;
import javafx.geometry.Side; import javafx.geometry.Side;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane; import javafx.scene.control.TabPane;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.stage.Stage; import javafx.stage.Stage;
@@ -15,6 +14,8 @@ import java.util.Objects;
@SuppressWarnings("InstantiationOfUtilityClass") @SuppressWarnings("InstantiationOfUtilityClass")
public class App extends Application { public class App extends Application {
TabPohja asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset;
static void main() { static void main() {
launch(); launch();
} }
@@ -23,41 +24,6 @@ public class App extends Application {
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
new Tietokanta(Main.dev); new Tietokanta(Main.dev);
TabPane root = new TabPane();
root.setSide(Side.LEFT);
root.setTabMinWidth(50);
root.setTabMinHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
root.setTabMaxHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
Tab asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset;
asiakasHallinta = new Tab("Asiakashallinta", new Asiakashallinta());
kierrostenHallinta = new Tab("Kierrostenhallinta");
kuljetusListat = new Tab("Kuljetuslistat");
kuljetetut = new Tab("Kuljetetut");
asetukset = new Tab("Asetukset");
root.getTabs().addAll(asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset);
root.getSelectionModel().selectedItemProperty().addListener((_, _, newValue) -> {
switch (newValue.getText()) {
case "Asiakashallinta": newValue.setContent(new Asiakashallinta()); break;
case "Kierrostenhallinta": newValue.setContent(new Kierroshallinta()); break;
case "Kuljetuslistat": newValue.setContent(new KuljetusListat()); break;
case "Kuljetetut": newValue.setContent(new KuljetusRaportit()); break;
case "Asetukset": newValue.setContent(new Asetukset()); break;
}
});
for (Tab tab : root.getTabs()) {
tab.setClosable(false);
tab.setStyle(
"-fx-font-size: " + Main.properties.getProperty("buttonFonttiKoko") + "px;" +
" -fx-font-weight: bold;" +
" -fx-font-family: " + Main.properties.getProperty("buttonFontti"));
}
Scene scene = new Scene(root);
primaryStage.setScene(scene);
StringBuilder title = new StringBuilder(); StringBuilder title = new StringBuilder();
title.append("Ruokamanageri"); title.append("Ruokamanageri");
title.append(" v").append(Main.properties.getProperty("version")); title.append(" v").append(Main.properties.getProperty("version"));
@@ -65,9 +31,26 @@ public class App extends Application {
primaryStage.setTitle(title.toString()); primaryStage.setTitle(title.toString());
primaryStage.setMaximized(true); primaryStage.setMaximized(true);
primaryStage.show();
primaryStage.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg")))); primaryStage.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg"))));
TabPane tabPane = new TabPane();
tabPane.setSide(Side.LEFT);
tabPane.setTabMinWidth(50);
tabPane.setTabMinHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
tabPane.setTabMaxHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
asiakasHallinta = new Asiakashallinta();
kierrostenHallinta = new Kierroshallinta();
kuljetusListat = new KuljetusListat();
kuljetetut = new KuljetusRaportit();
asetukset = new Asetukset();
tabPane.getTabs().addAll(asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset);
Scene scene = new Scene(tabPane);
primaryStage.setScene(scene);
primaryStage.show();
if (!Main.properties.getProperty("version").equals(Main.properties.getProperty("viimeisinVersio", "0.0.0"))) new MuutosIlmoitus(); if (!Main.properties.getProperty("version").equals(Main.properties.getProperty("viimeisinVersio", "0.0.0"))) new MuutosIlmoitus();
} }
} }
+13 -16
View File
@@ -6,7 +6,6 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.text.Font; import javafx.scene.text.Font;
@@ -21,21 +20,19 @@ public class Asetukset extends TabPohja {
public Asetukset() { public Asetukset() {
BorderPane root = new BorderPane(); super("Asetukset");
root.setPadding(oletusInsets);
HBox yläpalkki = new HBox(); HBox yläpalkki = new HBox();
yläpalkki.setSpacing(5); yläpalkki.setSpacing(5);
yläpalkki.setAlignment(Pos.CENTER_RIGHT); yläpalkki.setAlignment(Pos.CENTER_RIGHT);
Button btnNollaa = new Button("Palauta oletukset"); Button btnNollaa = new Button("Palauta oletukset");
btnNollaa.setFont(buttonFont); btnNollaa.setFont(BUTTON_FONT);
btnNollaa.setOnAction(_ -> palautaOletukset()); btnNollaa.setOnAction(_ -> palautaOletukset());
yläpalkki.getChildren().add(btnNollaa); yläpalkki.getChildren().add(btnNollaa);
root.setTop(yläpalkki); root.setTop(yläpalkki);
root.setCenter(getFonttiAsetukset()); root.setCenter(getFonttiAsetukset());
this.getChildren().add(root);
} }
private Spinner<Integer> tekstiFonttiKoko, buttonFonttiKoko, tulostusFonttiKoko, insets; private Spinner<Integer> tekstiFonttiKoko, buttonFonttiKoko, tulostusFonttiKoko, insets;
@@ -48,14 +45,14 @@ public class Asetukset extends TabPohja {
private GridPane getFonttiAsetukset() { private GridPane getFonttiAsetukset() {
GridPane root = new GridPane(); GridPane root = new GridPane();
root.setAlignment(Pos.CENTER); root.setAlignment(Pos.CENTER);
root.setHgap(spacing*2); root.setHgap(SPACING *2);
root.setVgap(spacing*2); root.setVgap(SPACING *2);
root.setBorder(oletusBorder); root.setBorder(BORDER);
root.setPadding(oletusInsets); root.setPadding(INSETS);
int row = 0; int row = 0;
Label otsikko = new Label("Fonttien asetukset"); Label otsikko = new Label("Fonttien asetukset");
otsikko.setFont(tekstiFont); otsikko.setFont(TEKSTI_FONT);
root.addRow(row++, otsikko); root.addRow(row++, otsikko);
int minFonttiKoko = 8; int minFonttiKoko = 8;
@@ -64,7 +61,7 @@ public class Asetukset extends TabPohja {
tekstiFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("tekstiFonttiKoko")), stepFontti); tekstiFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("tekstiFonttiKoko")), stepFontti);
tekstiFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tekstiFonttiKoko", String.valueOf(tekstiFonttiKoko.getValue()))); tekstiFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tekstiFonttiKoko", String.valueOf(tekstiFonttiKoko.getValue())));
Label tekstinKoko = new Label("Tekstin koko"); Label tekstinKoko = new Label("Tekstin koko");
tekstinKoko.setFont(tekstiFont); tekstinKoko.setFont(TEKSTI_FONT);
root.addRow(row++, tekstinKoko, tekstiFonttiKoko); root.addRow(row++, tekstinKoko, tekstiFonttiKoko);
tekstiFontti = new ComboBox<>(); tekstiFontti = new ComboBox<>();
@@ -72,13 +69,13 @@ public class Asetukset extends TabPohja {
tekstiFontti.getSelectionModel().select(prop.getProperty("tekstiFontti")); tekstiFontti.getSelectionModel().select(prop.getProperty("tekstiFontti"));
tekstiFontti.valueProperty().addListener((_) -> prop.setProperty("tekstiFontti", tekstiFontti.getValue())); tekstiFontti.valueProperty().addListener((_) -> prop.setProperty("tekstiFontti", tekstiFontti.getValue()));
Label tekstinFontti = new Label("Tekstin fontti"); Label tekstinFontti = new Label("Tekstin fontti");
tekstinFontti.setFont(tekstiFont); tekstinFontti.setFont(TEKSTI_FONT);
root.addRow(row++, tekstinFontti, tekstiFontti); root.addRow(row++, tekstinFontti, tekstiFontti);
buttonFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("buttonFonttiKoko")), stepFontti); buttonFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("buttonFonttiKoko")), stepFontti);
buttonFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("buttonFonttiKoko", String.valueOf(buttonFonttiKoko.getValue()))); buttonFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("buttonFonttiKoko", String.valueOf(buttonFonttiKoko.getValue())));
Label nappiTekstinKoko = new Label("Painikkeiden koko"); Label nappiTekstinKoko = new Label("Painikkeiden koko");
nappiTekstinKoko.setFont(tekstiFont); nappiTekstinKoko.setFont(TEKSTI_FONT);
root.addRow(row++, nappiTekstinKoko, buttonFonttiKoko); root.addRow(row++, nappiTekstinKoko, buttonFonttiKoko);
buttonFontti = new ComboBox<>(); buttonFontti = new ComboBox<>();
@@ -86,19 +83,19 @@ public class Asetukset extends TabPohja {
buttonFontti.getSelectionModel().select(prop.getProperty("buttonFontti")); buttonFontti.getSelectionModel().select(prop.getProperty("buttonFontti"));
buttonFontti.valueProperty().addListener((_) -> prop.setProperty("buttonFontti", buttonFontti.getValue())); buttonFontti.valueProperty().addListener((_) -> prop.setProperty("buttonFontti", buttonFontti.getValue()));
Label napinFontti = new Label("Painikkeiden fontti"); Label napinFontti = new Label("Painikkeiden fontti");
napinFontti.setFont(tekstiFont); napinFontti.setFont(TEKSTI_FONT);
root.addRow(row++, napinFontti, buttonFontti); root.addRow(row++, napinFontti, buttonFontti);
tulostusFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("tulostusFonttiKoko")), stepFontti); tulostusFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Integer.parseInt(prop.getProperty("tulostusFonttiKoko")), stepFontti);
tulostusFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tulostusFonttiKoko", String.valueOf(tulostusFonttiKoko.getValue()))); tulostusFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tulostusFonttiKoko", String.valueOf(tulostusFonttiKoko.getValue())));
Label tulostusFontinKoko = new Label("Tulostusfontin koko"); Label tulostusFontinKoko = new Label("Tulostusfontin koko");
tulostusFontinKoko.setFont(tekstiFont); tulostusFontinKoko.setFont(TEKSTI_FONT);
root.addRow(row++, tulostusFontinKoko, tulostusFonttiKoko); root.addRow(row++, tulostusFontinKoko, tulostusFonttiKoko);
insets = new Spinner<>(0, 10, Integer.parseInt(prop.getProperty("insets")), 1); insets = new Spinner<>(0, 10, Integer.parseInt(prop.getProperty("insets")), 1);
insets.valueProperty().addListener((_) -> prop.setProperty("insets", String.valueOf(insets.getValue()))); insets.valueProperty().addListener((_) -> prop.setProperty("insets", String.valueOf(insets.getValue())));
Label insetsi = new Label("Yleinen fyllinki"); Label insetsi = new Label("Yleinen fyllinki");
insetsi.setFont(tekstiFont); insetsi.setFont(TEKSTI_FONT);
root.addRow(row++, insetsi, insets); root.addRow(row++, insetsi, insets);
return root; return root;
+5 -9
View File
@@ -52,13 +52,9 @@ public class AsiakasIkkuna extends Stage {
}}); }});
Tab tabKuljetusTiedot, tabAsiakastiedot; Tab tabKuljetusTiedot, tabAsiakastiedot;
tabKuljetusTiedot = new Tab("Kuljetustiedot"); tabKuljetusTiedot = new TabPohja("Kuljetustiedot");
tabAsiakastiedot = new Tab("Asiakastiedot"); tabAsiakastiedot = new TabPohja("Asiakastiedot");
tabPane.getTabs().addAll(tabKuljetusTiedot, tabAsiakastiedot); tabPane.getTabs().addAll(tabKuljetusTiedot, tabAsiakastiedot);
for (Tab tab : tabPane.getTabs()) {
tab.setClosable(false);
tab.setStyle("-fx-font-size: 18px; -fx-font-weight: bold; -fx-font-family: Open Sans");
}
GridPane kuljetusTiedot = new GridPane(); GridPane kuljetusTiedot = new GridPane();
kuljetusTiedot.setPadding(new Insets(15)); kuljetusTiedot.setPadding(new Insets(15));
@@ -158,15 +154,15 @@ public class AsiakasIkkuna extends Stage {
HBox napit = new HBox(); HBox napit = new HBox();
Button peruuta = new Button("Peruuta"); Button peruuta = new Button("Peruuta");
peruuta.setFont(TabPohja.buttonFont); peruuta.setFont(TabPohja.BUTTON_FONT);
peruuta.setOnAction(_ -> this.close()); peruuta.setOnAction(_ -> this.close());
Button tallenna = new Button("Tallenna"); Button tallenna = new Button("Tallenna");
tallenna.setFont(TabPohja.buttonFont); tallenna.setFont(TabPohja.BUTTON_FONT);
tallenna.setOnAction(_ -> tallenna()); tallenna.setOnAction(_ -> tallenna());
napit.getChildren().addAll(peruuta, tallenna); napit.getChildren().addAll(peruuta, tallenna);
napit.setAlignment(Pos.CENTER_RIGHT); napit.setAlignment(Pos.CENTER_RIGHT);
napit.setSpacing(10); napit.setSpacing(10);
napit.setPadding(TabPohja.oletusInsets); napit.setPadding(TabPohja.INSETS);
VBox root = new VBox(); VBox root = new VBox();
+45 -39
View File
@@ -2,6 +2,7 @@ package fi.lpam.gui;
import fi.lpam.Main; import fi.lpam.Main;
import fi.lpam.dataluokat.Asiakas; import fi.lpam.dataluokat.Asiakas;
import fi.lpam.gui.elementit.FontLabel;
import fi.lpam.gui.elementit.MaaraTableColumn; import fi.lpam.gui.elementit.MaaraTableColumn;
import fi.lpam.gui.elementit.TabPohja; import fi.lpam.gui.elementit.TabPohja;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
@@ -26,46 +27,9 @@ public class Asiakashallinta extends TabPohja {
final TableView<Asiakas> tvAsiakkaat = new TableView<>(); final TableView<Asiakas> tvAsiakkaat = new TableView<>();
public Asiakashallinta() { public Asiakashallinta() {
BorderPane root = new BorderPane(); super("Asiakashallinta");
this.getChildren().add(root); root.setTop(getYläpalkki());
root.setPadding(oletusInsets);
BorderPane yläpalkki = new BorderPane();
root.setTop(yläpalkki);
Label otsikko = new Label("Asiakashallinta");
otsikko.setFont(tekstiFont);
yläpalkki.setLeft(otsikko);
HBox yläpalkinNapit = new HBox();
yläpalkinNapit.setSpacing(Double.parseDouble(Main.properties.getProperty("insets")));
yläpalkinNapit.setPadding(oletusInsets);
yläpalkki.setRight(yläpalkinNapit);
Button avaaVersioloki = new Button("VERSIOLOKI");
avaaVersioloki.setFont(buttonFont);
avaaVersioloki.setOnAction(_ -> {
try {
Desktop.getDesktop().browse(new URI("https://git.lpam.fi/laurimaaninka/Ruokamanageri/src/branch/master/CHANGELOG.md"));
} catch (IOException | URISyntaxException e) {
System.out.println(e.getMessage());
}
});
yläpalkinNapit.getChildren().add(avaaVersioloki);
Button poistaValittu = new Button("Poista");
poistaValittu.setOnAction(_ -> poistaValittu());
poistaValittu.setFont(buttonFont);
yläpalkinNapit.getChildren().add(poistaValittu);
Button muokkaaAsiakasta = new Button("Muokkaa");
muokkaaAsiakasta.setOnAction(_ -> muokkaaValittua());
muokkaaAsiakasta.setFont(buttonFont);
yläpalkinNapit.getChildren().add(muokkaaAsiakasta);
Button uusiAsiakas = new Button("Uusi asiakas");
uusiAsiakas.setOnAction(_ -> uusiAsiakas());
uusiAsiakas.setFont(buttonFont);
yläpalkinNapit.getChildren().add(uusiAsiakas);
tvAsiakkaat.setEditable(false); tvAsiakkaat.setEditable(false);
tvAsiakkaat.setPlaceholder(new Label("Ei vielä tietoja")); tvAsiakkaat.setPlaceholder(new Label("Ei vielä tietoja"));
@@ -141,8 +105,50 @@ public class Asiakashallinta extends TabPohja {
} }
tvAsiakkaat.setItems(FXCollections.observableArrayList(Objects.requireNonNull(Asiakas.haeKaikki()))); tvAsiakkaat.setItems(FXCollections.observableArrayList(Objects.requireNonNull(Asiakas.haeKaikki())));
//tvAsiakkaat.setPrefSize(1920, 1080); //Tämä estää oudon bugin? (asiakkaiden ollessa 31 TV sekoaa)
} }
private BorderPane getYläpalkki() {
BorderPane yläpalkki = new BorderPane();
Label otsikko = new FontLabel(TEKSTI_FONT, "Asiakashallinta");
yläpalkki.setLeft(otsikko);
HBox yläpalkinNapit = new HBox();
yläpalkinNapit.setSpacing(SPACING);
yläpalkinNapit.setPadding(INSETS);
yläpalkki.setRight(yläpalkinNapit);
Button avaaVersioloki = new Button("VERSIOLOKI");
avaaVersioloki.setFont(BUTTON_FONT);
avaaVersioloki.setOnAction(_ -> {
try {
Desktop.getDesktop().browse(new URI("https://git.lpam.fi/laurimaaninka/Ruokamanageri/src/branch/master/CHANGELOG.md"));
} catch (IOException | URISyntaxException e) {
System.out.println(e.getMessage());
}
});
yläpalkinNapit.getChildren().add(avaaVersioloki);
Button poistaValittu = new Button("Poista");
poistaValittu.setOnAction(_ -> poistaValittu());
poistaValittu.setFont(BUTTON_FONT);
yläpalkinNapit.getChildren().add(poistaValittu);
Button muokkaaAsiakasta = new Button("Muokkaa");
muokkaaAsiakasta.setOnAction(_ -> muokkaaValittua());
muokkaaAsiakasta.setFont(BUTTON_FONT);
yläpalkinNapit.getChildren().add(muokkaaAsiakasta);
Button uusiAsiakas = new Button("Uusi asiakas");
uusiAsiakas.setOnAction(_ -> uusiAsiakas());
uusiAsiakas.setFont(BUTTON_FONT);
yläpalkinNapit.getChildren().add(uusiAsiakas);
return yläpalkki;
}
private void uusiAsiakas() { private void uusiAsiakas() {
Asiakas luotavaAsiakas = new Asiakas(); Asiakas luotavaAsiakas = new Asiakas();
AsiakasIkkuna asiakasIkkuna = new AsiakasIkkuna(luotavaAsiakas); AsiakasIkkuna asiakasIkkuna = new AsiakasIkkuna(luotavaAsiakas);
+13 -9
View File
@@ -23,12 +23,10 @@ import java.util.Objects;
public class Kierroshallinta extends TabPohja { public class Kierroshallinta extends TabPohja {
private final MultiColumnListView<Asiakas> mclv = new MultiColumnListView<>(); private final MultiColumnListView<Asiakas> mclv = new MultiColumnListView<>();
private final ArrayList<Kierros> kierrokset = Kierros.haeKaikki(); private final ArrayList<Kierros> kierrokset = Kierros.haeKaikki();
private final ArrayList<Asiakas> kaikkiAsiakkaat = Asiakas.haeKaikki(); private ArrayList<Asiakas> kaikkiAsiakkaat = Asiakas.haeKaikki();
public Kierroshallinta() { public Kierroshallinta() {
BorderPane root = new BorderPane(); super("Kierroshallinta");
this.getChildren().add(root);
root.setPadding(oletusInsets);
root.setCenter(mclv); root.setCenter(mclv);
mclv.setCellFactory(_ -> new AsiakasMCLVListCell(mclv)); mclv.setCellFactory(_ -> new AsiakasMCLVListCell(mclv));
@@ -39,7 +37,7 @@ public class Kierroshallinta extends TabPohja {
BorderPane yläpalkki = new BorderPane(); BorderPane yläpalkki = new BorderPane();
root.setTop(yläpalkki); root.setTop(yläpalkki);
Label infoTeksti = new FontLabel(tekstiFont, "Siirrä asiakkaat haluamallesi kierrokselle. Kierroksia voit lisätä painamalla lisää uusi kierros painiketta.\nKierrosnumerot päivittyvät, sekä tyhjät poistuvat kierroksia tallentaessa."); Label infoTeksti = new FontLabel(TEKSTI_FONT, "Siirrä asiakkaat haluamallesi kierrokselle. Kierroksia voit lisätä painamalla lisää uusi kierros painiketta.\nKierrosnumerot päivittyvät, sekä tyhjät poistuvat kierroksia tallentaessa.");
yläpalkki.setLeft(infoTeksti); yläpalkki.setLeft(infoTeksti);
HBox yläpalkinNapit = new HBox(); HBox yläpalkinNapit = new HBox();
@@ -51,11 +49,11 @@ public class Kierroshallinta extends TabPohja {
int uudenKierroksenNumero = mclv.getColumns().size(); int uudenKierroksenNumero = mclv.getColumns().size();
lisaaKierros(new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>()))); lisaaKierros(new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>())));
}); });
lisääKierros.setFont(buttonFont); lisääKierros.setFont(BUTTON_FONT);
yläpalkinNapit.getChildren().add(lisääKierros); yläpalkinNapit.getChildren().add(lisääKierros);
Button tallenna = new Button("Tallenna kierrokset"); Button tallenna = new Button("Tallenna kierrokset");
tallenna.setFont(buttonFont); tallenna.setFont(BUTTON_FONT);
tallenna.setOnAction(_ ->tallennaKierrokset()); tallenna.setOnAction(_ ->tallennaKierrokset());
yläpalkinNapit.getChildren().add(tallenna); yläpalkinNapit.getChildren().add(tallenna);
@@ -66,6 +64,7 @@ public class Kierroshallinta extends TabPohja {
private void rakennaSarakkeet() { private void rakennaSarakkeet() {
mclv.getColumns().clear(); mclv.getColumns().clear();
kaikkiAsiakkaat = Asiakas.haeKaikki();
ObservableList<Asiakas> eiKierroksella = FXCollections.observableArrayList(new ArrayList<>()); ObservableList<Asiakas> eiKierroksella = FXCollections.observableArrayList(new ArrayList<>());
HashSet<Integer> kierroksellaOlevatAsiakasIDt = new HashSet<>(); HashSet<Integer> kierroksellaOlevatAsiakasIDt = new HashSet<>();
@@ -84,7 +83,7 @@ public class Kierroshallinta extends TabPohja {
} }
} }
MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>(); MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>();
Label labelEiKierroksella = new FontLabel(tekstiFont, "Ei vielä kierroksella"); Label labelEiKierroksella = new FontLabel(TEKSTI_FONT, "Ei vielä kierroksella");
colEiKierroksella.setHeader(labelEiKierroksella); colEiKierroksella.setHeader(labelEiKierroksella);
colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella)); colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella));
mclv.getColumns().add(colEiKierroksella); mclv.getColumns().add(colEiKierroksella);
@@ -93,7 +92,7 @@ public class Kierroshallinta extends TabPohja {
private void lisaaKierros(Kierros kierros) { private void lisaaKierros(Kierros kierros) {
if (kierros.getId() == -1) kierrokset.add(kierros); if (kierros.getId() == -1) kierrokset.add(kierros);
MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>(); MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>();
uusiSarake.setHeader(new FontLabel(tekstiFont, "Kierros " + kierros.getKierrosNumero())); uusiSarake.setHeader(new FontLabel(TEKSTI_FONT, "Kierros " + kierros.getKierrosNumero()));
uusiSarake.setItems(kierros.getAsiakkaat()); uusiSarake.setItems(kierros.getAsiakkaat());
mclv.getColumns().add(kierros.getKierrosNumero()-1, uusiSarake); mclv.getColumns().add(kierros.getKierrosNumero()-1, uusiSarake);
} }
@@ -126,4 +125,9 @@ public class Kierroshallinta extends TabPohja {
info.setContentText(null); info.setContentText(null);
info.showAndWait(); info.showAndWait();
} }
@Override
public void päivitä() {
rakennaSarakkeet();
}
} }
+20 -16
View File
@@ -38,6 +38,8 @@ public class KuljetusListat extends TabPohja {
private final HashMap<Integer, Asiakas> asiakkaat = new HashMap<>(); private final HashMap<Integer, Asiakas> asiakkaat = new HashMap<>();
public KuljetusListat() { public KuljetusListat() {
super("Kuljetuslistat");
ObservableList<Integer> määräVaihtoehdot = FXCollections.observableArrayList(); ObservableList<Integer> määräVaihtoehdot = FXCollections.observableArrayList();
for (int i = 0; i <= 10; i++) { for (int i = 0; i <= 10; i++) {
määräVaihtoehdot.add(i);} määräVaihtoehdot.add(i);}
@@ -46,49 +48,45 @@ public class KuljetusListat extends TabPohja {
asiakkaat.put(asiakas.getId(), asiakas); asiakkaat.put(asiakas.getId(), asiakas);
} }
BorderPane root = new BorderPane();
root.setPadding(oletusInsets);
this.getChildren().add(root);
BorderPane yläpalkki = new BorderPane(); BorderPane yläpalkki = new BorderPane();
Label infoTeksti = new FontLabel(tekstiFont, "Kuljetuslistojen luonti"); Label infoTeksti = new FontLabel(TEKSTI_FONT, "Kuljetuslistojen luonti");
yläpalkki.setLeft(infoTeksti); yläpalkki.setLeft(infoTeksti);
HBox kierroksenValintaLaatikko = new HBox(); HBox kierroksenValintaLaatikko = new HBox();
kierroksenValintaLaatikko.setSpacing(spacing); kierroksenValintaLaatikko.setSpacing(SPACING);
kierroksenValintaLaatikko.setAlignment(Pos.CENTER); kierroksenValintaLaatikko.setAlignment(Pos.CENTER);
Button valitse = new Button("Valitse"); Button valitse = new Button("Valitse");
valitse.setFont(buttonFont); valitse.setFont(BUTTON_FONT);
valitse.setOnAction(_ -> päivitäListanäkymä()); valitse.setOnAction(_ -> päivitäListanäkymä());
tallennusStatus = new FontLabel(tekstiFont, "Tallennettu: Kyllä"); tallennusStatus = new FontLabel(TEKSTI_FONT, "Tallennettu: Kyllä");
tallennusStatus.setFont(tekstiFont); tallennusStatus.setFont(TEKSTI_FONT);
datePicker.valueProperty().addListener(_ -> päivitäListanäkymä()); datePicker.valueProperty().addListener(_ -> päivitäListanäkymä());
kierrosValinta.valueProperty().addListener(_ -> päivitäListanäkymä()); kierrosValinta.valueProperty().addListener(_ -> päivitäListanäkymä());
kierroksenValintaLaatikko.getChildren().addAll( kierroksenValintaLaatikko.getChildren().addAll(
new FontLabel(tekstiFont, "Päivämäärä:"), new FontLabel(TEKSTI_FONT, "Päivämäärä:"),
datePicker, datePicker,
new FontLabel(tekstiFont, "Kierros:"), new FontLabel(TEKSTI_FONT, "Kierros:"),
kierrosValinta, tallennusStatus); kierrosValinta, tallennusStatus);
yläpalkki.setCenter(kierroksenValintaLaatikko); yläpalkki.setCenter(kierroksenValintaLaatikko);
HBox napit = new HBox(); HBox napit = new HBox();
napit.setSpacing(spacing); napit.setSpacing(SPACING);
Button poista = new Button("Poista kuljetusrivi"); Button poista = new Button("Poista kuljetusrivi");
poista.setOnAction(_ -> poistaRivi()); poista.setOnAction(_ -> poistaRivi());
poista.setFont(buttonFont); poista.setFont(BUTTON_FONT);
Button tallenna = new Button("Tallenna"); Button tallenna = new Button("Tallenna");
tallenna.setFont(buttonFont); tallenna.setFont(BUTTON_FONT);
tallenna.setOnAction(_ -> tallennaKierros()); tallenna.setOnAction(_ -> tallennaKierros());
btnTulosta = new Button("Tulosta lista"); btnTulosta = new Button("Tulosta lista");
btnTulosta.setDisable(true); btnTulosta.setDisable(true);
btnTulosta.setFont(buttonFont); btnTulosta.setFont(BUTTON_FONT);
btnTulosta.setOnAction(_ -> tulostaLista()); btnTulosta.setOnAction(_ -> tulostaLista());
napit.getChildren().addAll(poista, tallenna, btnTulosta); napit.getChildren().addAll(poista, tallenna, btnTulosta);
yläpalkki.setRight(napit); yläpalkki.setRight(napit);
root.setTop(yläpalkki); root.setTop(yläpalkki);
tableView.setEditable(true); tableView.setEditable(true);
tableView.setPlaceholder(new Label("Valitse kierros aloittaaksesi")); tableView.setPlaceholder(new FontLabel(BUTTON_FONT, "Valitse kierros aloittaaksesi"));
root.setCenter(tableView); root.setCenter(tableView);
TableColumn<Kuljetus, Boolean> tcNappi = new TableColumn<>("Kuljeta"); TableColumn<Kuljetus, Boolean> tcNappi = new TableColumn<>("Kuljeta");
@@ -220,4 +218,10 @@ public class KuljetusListat extends TabPohja {
private void tulostaLista() { private void tulostaLista() {
new KuljetusListaTulostaja().luoKuljetusLista(tableView.getItems(), kierrosValinta.getValue()); new KuljetusListaTulostaja().luoKuljetusLista(tableView.getItems(), kierrosValinta.getValue());
} }
@Override
public void päivitä() {
if (kierrosValinta.getValue() == null) return;
päivitäListanäkymä();
}
} }
+11 -10
View File
@@ -36,34 +36,32 @@ public class KuljetusRaportit extends TabPohja {
} }
public KuljetusRaportit() { public KuljetusRaportit() {
BorderPane root = new BorderPane(); super("Raportit");
root.setPadding(oletusInsets);
this.getChildren().add(root);
BorderPane yläpalkki = new BorderPane(); BorderPane yläpalkki = new BorderPane();
root.setTop(yläpalkki); root.setTop(yläpalkki);
Label infoTeksti = new FontLabel(tekstiFont, "Kuljetusraportit. \nTarkka-valinnalla koostetun raportin \ntulostaminen paperille ei suositeltua."); Label infoTeksti = new FontLabel(TEKSTI_FONT, "Kuljetusraportit. \nTarkka-valinnalla koostetun raportin \ntulostaminen paperille ei suositeltua.");
yläpalkki.setLeft(infoTeksti); yläpalkki.setLeft(infoTeksti);
HBox yläpalkinNapit = new HBox(); HBox yläpalkinNapit = new HBox();
yläpalkinNapit.setAlignment(Pos.CENTER); yläpalkinNapit.setAlignment(Pos.CENTER);
yläpalkinNapit.setSpacing(spacing); yläpalkinNapit.setSpacing(SPACING);
yläpalkki.setRight(yläpalkinNapit); yläpalkki.setRight(yläpalkinNapit);
tarkka = new CheckBox("Tarkka"); tarkka = new CheckBox("Tarkka");
tarkka.setFont(tekstiFont); tarkka.setFont(TEKSTI_FONT);
alkuPvm = new DatePicker(LocalDate.now().minusDays(LocalDate.now().getDayOfMonth() - 1)); alkuPvm = new DatePicker(LocalDate.now().minusDays(LocalDate.now().getDayOfMonth() - 1));
loppuPvm = new DatePicker(LocalDate.now()); loppuPvm = new DatePicker(LocalDate.now());
Button haeKuljetukset = new Button("Hae"); Button haeKuljetukset = new Button("Hae");
haeKuljetukset.setFont(buttonFont); haeKuljetukset.setFont(BUTTON_FONT);
haeKuljetukset.setOnAction(_ ->haeRaportti()); haeKuljetukset.setOnAction(_ ->haeRaportti());
Button tulostaRaportti = new Button("Tulosta raportti"); Button tulostaRaportti = new Button("Tulosta raportti");
tulostaRaportti.setFont(buttonFont); tulostaRaportti.setFont(BUTTON_FONT);
tulostaRaportti.setOnAction(_ ->tulostaRaportti()); tulostaRaportti.setOnAction(_ ->tulostaRaportti());
yläpalkinNapit.getChildren().addAll(tarkka, yläpalkinNapit.getChildren().addAll(tarkka,
//new FontLabel(tekstiFont,"Hae kuljetukset välillä:"), //new FontLabel(tekstiFont,"Hae kuljetukset välillä:"),
alkuPvm, new FontLabel(tekstiFont,"-"), loppuPvm, alkuPvm, new FontLabel(TEKSTI_FONT,"-"), loppuPvm,
haeKuljetukset, tulostaRaportti); haeKuljetukset, tulostaRaportti);
root.setCenter(tableView); root.setCenter(tableView);
@@ -111,7 +109,7 @@ public class KuljetusRaportit extends TabPohja {
tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot, tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot,
tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti); tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti);
tableView.setPlaceholder(new FontLabel(buttonFont, "Hae raportti")); tableView.setPlaceholder(new FontLabel(BUTTON_FONT, "Hae raportti"));
for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) { for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) {
sarake.setSortable(false); sarake.setSortable(false);
sarake.setEditable(false); sarake.setEditable(false);
@@ -122,4 +120,7 @@ public class KuljetusRaportit extends TabPohja {
"-fx-font-family: " + Main.properties.getProperty("tekstiFontti")); "-fx-font-family: " + Main.properties.getProperty("tekstiFontti"));
} }
} }
@Override
public void päivitä() {}
} }
@@ -17,8 +17,8 @@ public class AsiakasMCLVListCell extends MultiColumnListView.ColumnListCell<Asia
public AsiakasMCLVListCell(MultiColumnListView<Asiakas> multiColumnListView) { public AsiakasMCLVListCell(MultiColumnListView<Asiakas> multiColumnListView) {
super(multiColumnListView); super(multiColumnListView);
this.setMinHeight(TabPohja.tekstiFont.getSize()*4); this.setMinHeight(TabPohja.TEKSTI_FONT.getSize()*4);
this.setMaxHeight(TabPohja.tekstiFont.getSize()*4); this.setMaxHeight(TabPohja.TEKSTI_FONT.getSize()*4);
VBox content = new VBox(); VBox content = new VBox();
content.visibleProperty().bind(placeholder.not().and(emptyProperty().not())); content.visibleProperty().bind(placeholder.not().and(emptyProperty().not()));
@@ -29,7 +29,7 @@ public class AsiakasMCLVListCell extends MultiColumnListView.ColumnListCell<Asia
contentPlaceholder.managedProperty().bind(placeholder); contentPlaceholder.managedProperty().bind(placeholder);
Label label = new Label(); Label label = new Label();
label.setFont(TabPohja.tekstiFont); label.setFont(TabPohja.TEKSTI_FONT);
label.textProperty().bind(textProperty()); label.textProperty().bind(textProperty());
wrapper = new StackPane(content, contentPlaceholder, label); wrapper = new StackPane(content, contentPlaceholder, label);
@@ -5,7 +5,6 @@ import javafx.geometry.Pos;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage; import javafx.stage.Stage;
import one.jpro.platform.mdfx.MarkdownView; import one.jpro.platform.mdfx.MarkdownView;
@@ -17,8 +16,8 @@ public class MuutosIlmoitus extends Stage {
public MuutosIlmoitus() { public MuutosIlmoitus() {
super(); super();
VBox root = new VBox(); VBox root = new VBox();
root.setBorder(TabPohja.oletusBorder); root.setBorder(TabPohja.BORDER);
root.setPadding(TabPohja.oletusInsets); root.setPadding(TabPohja.INSETS);
root.setAlignment(Pos.CENTER); root.setAlignment(Pos.CENTER);
root.setSpacing(10); root.setSpacing(10);
@@ -39,7 +38,7 @@ public class MuutosIlmoitus extends Stage {
root.getChildren().add(markdownView); root.getChildren().add(markdownView);
Button ok = new Button("OK"); Button ok = new Button("OK");
ok.setFont(TabPohja.buttonFont); ok.setFont(TabPohja.BUTTON_FONT);
ok.setOnAction(e -> this.close()); ok.setOnAction(e -> this.close());
root.getChildren().add(ok); root.getChildren().add(ok);
@@ -2,6 +2,7 @@ package fi.lpam.gui.elementit;
import fi.lpam.Main; import fi.lpam.Main;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.Tab;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.text.Font; import javafx.scene.text.Font;
@@ -10,25 +11,44 @@ import javafx.scene.text.FontWeight;
import java.util.Properties; import java.util.Properties;
/** /**
* Käyttöliittymän pohja * Käyttöliittymän välilehden pohja
*/ */
public class TabPohja extends StackPane { public class TabPohja extends Tab {
public static Insets oletusInsets; public static Insets INSETS;
public static Border oletusBorder = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT)); public static Border BORDER = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT));
public static String oletusStyle; public static String STYLE;
public static Font buttonFont; public static Font BUTTON_FONT;
public static Font tekstiFont; public static Font TEKSTI_FONT;
public static double spacing; public static double SPACING;
public TabPohja() { protected BorderPane root = new BorderPane();
public TabPohja(String title) {
super(title);
Properties prop = Main.properties; Properties prop = Main.properties;
oletusInsets = new Insets(Double.parseDouble(prop.getProperty("insets"))); INSETS = new Insets(Double.parseDouble(prop.getProperty("insets")));
spacing = Double.parseDouble(prop.getProperty("insets")); SPACING = Double.parseDouble(prop.getProperty("insets"));
oletusStyle = "-fx-background-color: " + prop.getProperty("taustaVari") + ";"; STYLE = "-fx-background-color: " + prop.getProperty("taustaVari");
buttonFont = Font.font(prop.getProperty("buttonFontti"), FontWeight.BOLD, Double.parseDouble(prop.getProperty("buttonFonttiKoko"))); BUTTON_FONT = Font.font(prop.getProperty("buttonFontti"), FontWeight.BOLD, Double.parseDouble(prop.getProperty("buttonFonttiKoko")));
tekstiFont = Font.font(prop.getProperty("tekstiFontti"), FontWeight.NORMAL, Double.parseDouble(prop.getProperty("tekstiFonttiKoko"))); TEKSTI_FONT = Font.font(prop.getProperty("tekstiFontti"), FontWeight.NORMAL, Double.parseDouble(prop.getProperty("tekstiFonttiKoko")));
this.setStyle(oletusStyle);
this.setPadding(oletusInsets); this.setStyle(
this.setBorder(oletusBorder); "-fx-font-size: " + Main.properties.getProperty("buttonFonttiKoko") + "px;" +
"-fx-font-weight: bold;" +
"-fx-font-family: " + Main.properties.getProperty("buttonFontti") + ";"
);
this.setClosable(false);
this.setOnSelectionChanged(e -> {if (e.getTarget() == this) päivitä();});
root.setStyle(STYLE);
root.setPadding(INSETS);
root.setBorder(BORDER);
this.setContent(root);
} }
/**
* Metodi, jota kutsutaan kun tähän välilehteen palataan
* Luokan toteuttaja määrittää, mitä tarvitsee päivittää välilehteen palattaessa
*/
public void päivitä() {}
} }
+2
View File
@@ -2,10 +2,12 @@ version=${project.version}
buttonFonttiKoko=16 buttonFonttiKoko=16
buttonFontti=Arial buttonFontti=Arial
tekstiFonttiKoko=16 tekstiFonttiKoko=16
tekstiFontti=Arial tekstiFontti=Arial
tulostusFonttiKoko=13 tulostusFonttiKoko=13
taustaVari=lightgray taustaVari=lightgray
insets=5 insets=5