Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Drizzt
    nagyúr

    Sziasztok.
    .
    Van egy grafikus JavaFX alkalmazásom, az App osztály felelős az kirajzolásért és az irányításért. A problémám a következő:

    Van egy gombom (addMember), ami azt szeretném, hogy a kattintáskor létrehozzon egy új Member-t, majd ezt a Member-t hozzáadja ahhoz a Team-hez, ami épp ki van választva a megjelenített táblázatban. Ha én az EventHandler-t az App-on belül valósítom meg, akkor minden gombnak az App osztály adattagjának kell lennie, hogy a handle függvényben le tudjam ellenőrizni, hogy melyik osztályban történt a kattintás. Viszont ha külön osztályt hozok erre létre, akkor viszont kattintáskor le kéne kérni a szövegdobozok tartalmát, az épp aktuálisan kiválasztott Team-et, és ezt átadni az EventHandler-nek, de ezt önmagának nem tudja megtenni. Arra gondoltam, hogyha az App-on belül a csapatokat tároló teamData, teamTable (megjelenített táblázat) és a szövegdobozok static-ok lennének, akkor külső EventHandler osztályból is elérném őket és akkor legalább a gomboknak nem kellene az App osztálynak adattagjának lenni, hanem lehetne függvényen belül. Van erre valami más megoldás?

    Valahol van erre minta kódod?

    "Ha én az EventHandler-t az App-on belül valósítom meg, akkor minden gombnak az App osztály adattagjának kell lennie, hogy a handle függvényben le tudjam ellenőrizni, hogy melyik osztályban történt a kattintás."

    Ez szerintem nem így van. Vagyis nem teljesen értem, hogy mit értesz az alatt, hogy le kell tudd ellenőrizni, hogy melyik osztályban történt a kattintás? Miért kellene ezt leellenőrizni? Ha bárhol csinálsz EventHandler-t implementáló osztályt, azt be tudod állítani event handlernek. Akár csinálhatsz egy olyan függvényt az Appban, ami EventHandler<MouseEvent>-et ad vissza, pl. így:

    Class MyApplication {
    EventHandler<MouseEvent> createTeamHandler(Team t) {
    return new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent e) {
    System.out.println("MouseEventhandler runs");
    t.doSomething();
    }
    };
    }
    }

    És akkor ahol akarod használni:

    MyApplication app = new MyApplication();
    Team t = new Team();
    button.addEventHandler(app.createTeamHandler(t));

    Mondjuk Javafx-hez sem értek. De ehhez hasonló dolog simán megy pl.: Consumer-ekkel:

    public class Book{

    public Book(String name) {
    this.name = name;
    }

    private String name;
    private Consumer<Book> consumer;

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public void setConsumer(Consumer<Book> bookConsumer) {
    consumer = bookConsumer;
    }

    public void consume() {
    consumer.accept(this);
    }
    }

    public class Tester {

    public static Consumer<Book> getBookConsumer(int number) {
    return new Consumer<Book>() {
    @Override
    public void accept(Book book) {
    System.out.println(number);
    }
    };
    }

    public static void test() {
    Book b1 = new Book("AGILE workflow");
    b1.setConsumer((book -> {
    System.out.println(visitables.size());
    }));
    b1.consume();
    b1.setConsumer(getBookConsumer(8));
    b1.consume();
    }
    }

Új hozzászólás Aktív témák