Avatar
vlastajuracka:

Čau lidi mam třídu kde mám metodu která mi vypíše 10 buttonu ale u každé bych ctrěl mít jinej Handle evet.. moc nevím jk na to :/ Díky za každou odpověď :)

package zkouseniblbosti;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;

public class Metody {

    public void napis(TextField textfield, AnchorPane anchorPane) {
        Button[] jmeno = new Button[11];
        double x = 0;
        double y = 0;
           jmeno[i] = new Button();
            jmeno[i].setId("cislo" + i);
            jmeno[i].setLayoutX(x);
            jmeno[i].setLayoutY(y);
            x = 0;
            y = 0;
            jmeno[i].setMnemonicParsing(false);
            jmeno[i].setPrefHeight(50);
            jmeno[i].setPrefWidth(50);
            jmeno[i].setText("" + i);
            jmeno[i].setOnAction(new EventHandler<ActionEvent>() {

                public void handle(ActionEvent event) {
                    textfield.appendText("Tady"); //Tady bych chtěl aby to vypisovalo něco jiného
                }
            });
            anchorPane.getChildren().add(jmeno[i]);
        }
    }
}
 
Odpovědět 25.10.2015 9:20
Avatar
Odpovídá na vlastajuracka
Petr Štechmüller:

Můžeš si vytvořit pole tech handleru a pak to sparovat podle indexu, nebo prostě budeš každé tlačítko vytvářet extra zvlášť.

Nahoru Odpovědět 25.10.2015 9:48
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
vlastajuracka:

A jk tam udělam to pole ?

Editováno 25.10.2015 9:57
 
Nahoru Odpovědět 25.10.2015 9:57
Avatar
Odpovídá na vlastajuracka
Petr Štechmüller:

Je to sice bordel kod, ale funguje to:

1. Ve třídě Metody si vytvoříš pole handlerů takto:

EventHandler[] events = new EventHandler[10]; //10 = pocet tlacitek
2. Jsou dvě možnosti, jak ty handlery inicializovat
Buď přímo při vytváření toho pole, ale v tom se uz ani prase nevyzná. Vypadalo by to asi takto:
    EventHandler[] events = new EventHandler[]{
        new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Event handle 0");
            }
        },
        events[1] = new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Event handle 1");
            }
        }
};

- Nebo ta pěknější cesta, že to inicializuješ až v konstruktoru a to by vypadalo takto:

    public Metody() {
    events[0] = new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Event handle 0");
        }
    };
    new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Event handle 1");
        }
    };
}

3. Teď už stačí v metode napis upravit řádek s metodou setOnAction na toto:

jmeno[i].setOnAction(events[i]);

Tento kód sice bude fungovat, ale pokud vytváříš v cyklu tlačítka, kde každé má dělat něco jiného, tak je asi něco špatně. Měl by jsi mít každé tlačítko vytvořeno extra zvlášť.

Nahoru Odpovědět  +1 25.10.2015 10:23
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na vlastajuracka
Tomáš Brůna:

Co treba

Tlacitko[1].setOnAction(e -> { kod pro tlacitko)};
Tlacitko[2]…set.....
Nahoru Odpovědět 25.10.2015 10:38
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
vlastajuracka:

Ja bych chtel aby to fungovalo nějak takhle :p

package zkouseniblbosti;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;

public class Metody {

    public void napis(TextField textfield, AnchorPane anchorPane) {
        Button[] jmeno = new Button[10];
        double x = 0;
        double y = 0;
        for (int i = 9; i >= 0; i--) {
            jmeno[i] = new Button();
            jmeno[i].setId("cislo" + i);
            jmeno[i].setLayoutX(x);
            jmeno[i].setLayoutY(y);
            x = 0;
            y = 0;
            jmeno[i].setMnemonicParsing(false);
            jmeno[i].setPrefHeight(50);
            jmeno[i].setPrefWidth(50);
            jmeno[i].setText("" + i);
            EventHandler[] events = new EventHandler[]{
                new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                    }
                }};
            events[i] = new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    System.out.println(i);
                }
            };
            anchorPane.getChildren().add(jmeno[i]);
        }
    }
}

Nešlo by to nějak udělat ? Nefunguje samozřejmě toto

public void handle(ActionEvent event) {
                    System.out.println(i);
                }

musi to byt final

Editováno 25.10.2015 10:39
 
Nahoru Odpovědět 25.10.2015 10:39
Avatar
Odpovídá na Tomáš Brůna
vlastajuracka:

Todle funguje ale chtěl bych jestli by tam neslo dat proste to i

 
Nahoru Odpovědět 25.10.2015 10:42
Avatar
Odpovídá na Tomáš Brůna
vlastajuracka:

Takto bych to chtěl

jmeno[i].setOnAction(new EventHandler<ActionEvent>() {

                public void handle(ActionEvent e) {
                    System.out.println(i);
                }
            });
 
Nahoru Odpovědět 25.10.2015 10:42
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na vlastajuracka
Tomáš Brůna:

Zkus odstranit tu metodu a ten println dej mimo ni

Nahoru Odpovědět 25.10.2015 10:47
Lepší být šprt než blbec :)
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na vlastajuracka
Tomáš Brůna:
jmeno[i].setOnAction(new EventHandler<ActionEvent>() {
                    System.out.println(i);
           });
Nahoru Odpovědět 25.10.2015 11:10
Lepší být šprt než blbec :)
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na vlastajuracka
Tomáš Brůna:

a ted mi dochazi ze prece n tom Handleru nemáš proměnnou i

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 25.10.2015 11:20
Lepší být šprt než blbec :)
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 12 zpráv z 12.