Avatar
Vojtěch Bešťák:

Zdravím, používám kód pro vytvoření dialogového okna z tohoto odkazu s pár úpravami:
http://www.itnetwork.cz/…lare-podruhe
a mám dotaz, je nějaký způsob, jak tomuto dialogovému oknu přiřadit pozadí?

Zde je kód:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package stiga.scoreboard;



import java.text.ParseException;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.Window;

/**
 *
 * @author Vojta
 */
public class HraciDialog extends Stage {

    private String hrac1;
    private String hrac2;

    private Scene vytvorScenu() {
        VBox box = new VBox();
        box.setAlignment(Pos.CENTER);
        box.setSpacing(20);


        // Mřížka s TextFieldy a Labely
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setPadding(new Insets(10));
        grid.setHgap(10);
        grid.setVgap(10);

        // Komponenty
        final TextField hrac1TextField = new TextField();
        final TextField hrac2TextField = new TextField();
        Label hrac1Label = new Label("Jméno hráč 1");
        Label hrac2Label = new Label("Jméno hráč 2");
        Label warningLabel = new Label("Jména zadej bez diakritiky");


        grid.add(hrac1Label, 0, 0);
        grid.add(hrac1TextField, 1, 0);
        grid.add(hrac2Label, 0, 1);
        grid.add(hrac2TextField, 1, 1);

        // Tlačítko
        Button tlacitko = new Button("OK");
        tlacitko.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
                try {
                        hrac1 = hrac1TextField.getText();
                        hrac2 = hrac2TextField.getText();
                        hrac1 = hrac1.toLowerCase();
                        hrac2 = hrac2.toLowerCase();
                        hide();
                } catch (IllegalArgumentException ex) {
                        System.out.println("Chyba: " + ex.getMessage());
                }
        }
});


        box.getChildren().addAll(grid, tlacitko);

        return new Scene(box);
}
        public HraciDialog(Window okno) {
        setTitle("Nastavení");
        setWidth(350);
        setHeight(250);


        initStyle(StageStyle.UTILITY);
        initModality(Modality.WINDOW_MODAL);
        initOwner(okno);

        setScene(vytvorScenu());
}

    /**
     * @return the hrac1
     */
    public String getHrac1() {
        return hrac1;
    }

    /**
     * @return the hrac2
     */
    public String getHrac2() {
        return hrac2;
    }
}
 
Odpovědět 30. května 19:21
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Vojtěch Bešťák
pocitac770:

Nemám to bohužel odzkoušené, ale mohlo by fungovat něco takového....

private Scene vytvorScenu() {
        VBox box = new VBox();
        box.setAlignment(Pos.CENTER);
        box.setSpacing(20);


        // Mřížka s TextFieldy a Labely
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setPadding(new Insets(10));
        grid.setHgap(10);
        grid.setVgap(10);

        // Komponenty
        final TextField hrac1TextField = new TextField();
        final TextField hrac2TextField = new TextField();
        Label hrac1Label = new Label("Jméno hráč 1");
        Label hrac2Label = new Label("Jméno hráč 2");
        Label warningLabel = new Label("Jména zadej bez diakritiky");


        grid.add(hrac1Label, 0, 0);
        grid.add(hrac1TextField, 1, 0);
        grid.add(hrac2Label, 0, 1);
        grid.add(hrac2TextField, 1, 1);

        // Tlačítko
        Button tlacitko = new Button("OK");
        tlacitko.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                        try {
                                hrac1 = hrac1TextField.getText();
                                hrac2 = hrac2TextField.getText();
                                hrac1 = hrac1.toLowerCase();
                                hrac2 = hrac2.toLowerCase();
                                hide();
                        } catch (IllegalArgumentException ex) {
                                System.out.println("Chyba: " + ex.getMessage());
                        }
                }
        });


        box.getChildren().addAll(grid, tlacitko);
        Scene scene = new Scene(box)
        Image image = new Image(getClass().getResource("obrazky/pozadi.jpg").toString());
        scene.setFill(new ImagePattern(image, 520, 520, 40, 40, false));
        return scene;
}

Ke třídě ImagePattern máš dokumentaci zde: https://docs.oracle.com/…/api/toc.htm, doporučuji přečíst hlavně konstruktor kvůli tomu konstruktoru.

 
Nahoru Odpovědět 31. května 14:40
Avatar
Atrament
Člen
Avatar
Odpovídá na Vojtěch Bešťák
Atrament:

Kdybys použil FXML, tak by sis to mohl normálně naskinovat pomocí CSS, nejsem na JavaFx specialista ale vím že je tam nějaký speciální atribut. Jestli se dostanu dneska nějak rozumně domů tak to rozvedu.

 
Nahoru Odpovědět 31. května 14:49
Avatar
Odpovídá na Atrament
Vít Pekárek:

Pokud si to dobře pamatuji, tak používat CSS by mělo jít i normálně bez FXML.

Edit:
Ukázka z https://docs.oracle.com/…/cssref.html:

Scene scene = new Scene(new Group());
scene.getStylesheets().add(“test.css”);
Rectangle rect = new Rectangle(100,100);
rect.setLayoutX(50);
rect.setLayoutY(50);
rect.getStyleClass().add("my-rect");
((Group)scene.getRoot()).getChildren().add(rect);
Editováno 31. května 16:08
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 31. května 16:05
Avatar
 
Nahoru Odpovědět 31. května 16:16
Avatar
Odpovídá na Vít Pekárek
Vojtěch Bešťák:

Nebo spíše lepší otázka... kam se má uložit test.css? mám ji uloženou ve složce, kde je i ta třída, a píše mi to do konzole:

WARNING: Resource "test.css" not found.
 
Nahoru Odpovědět 31. května 16:30
Avatar
Atrament
Člen
Avatar
Odpovídá na Vojtěch Bešťák
Atrament:

Do adresáře src/ jinak ten attribut je -fx-background-image, takže to nastylování pozadí scény by vypadalo třeba takto

.root {
    -fx-background-image: url("cesta_k_obrázku");
}
 
Nahoru Odpovědět 31. května 17:21
Avatar
Vojtěch Bešťák:

Děkuji všem ;)

 
Nahoru Odpovědět 31. května 19:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.