NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Pozadí dialogového okna (JavaFX)

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vojtěch Bešťák:30.5.2016 19:21

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.5.2016 19:21
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Vojtěch Bešťák
pocitac770:31.5.2016 14:40

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.5.2016 14:40
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na Vojtěch Bešťák
Atrament:31.5.2016 14:49

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.5.2016 14:49
Avatar
Odpovídá na Atrament
Vít Pekárek:31.5.2016 16:05

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.5.2016 16:08
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
31.5.2016 16:05
Avatar
Odpovídá na Vít Pekárek
Vojtěch Bešťák:31.5.2016 16:16

Co přesně je to "my-rect" ?

 
Nahoru Odpovědět
31.5.2016 16:16
Avatar
Odpovídá na Vít Pekárek
Vojtěch Bešťák:31.5.2016 16:30

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.5.2016 16:30
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na Vojtěch Bešťák
Atrament:31.5.2016 17:21

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.5.2016 17:21
Avatar
Vojtěch Bešťák:31.5.2016 19:44

Děkuji všem ;)

 
Nahoru Odpovědět
31.5.2016 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.