• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed JavaFX Dodanie eventu OnMousePressed do nowo stworzonego przycisku.

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 12 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
zamknięte 13 sierpnia 2018 przez DanielKowalskiX

Witajcie!
Szukam odpowiedzi na pytanie:
Jak dodać event OnClickPressed o nazwie "klikniecie" do nowo stworzonego przycisku?

Próbowałem z setOnMouseClicked, i na kilka innych sposobów i nie mogę za nic znaleźć rozwiązania.


Przykładowy kod:

public FlowPane flowPane;

public void initialize() {
Button button1 = new Button();
flowPane.getChildren().add(button1);
}
public void klikniecie(){ 
button1.setText("X");
}

Kod uprościłem do zobrazowania problemu. Oryginalnie tworzę tablicę kilkudziesięciu przycisków i działanie eventu będzie inne, niż przedstawione.

komentarz zamknięcia: Problem został rozwiązany.

1 odpowiedź

+1 głos
odpowiedź 12 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
wybrane 12 sierpnia 2018 przez DanielKowalskiX
 
Najlepsza

Chyba najlepiej jest to zrobić za pomocą lambdy:

@FXML
private VBox vBox;
private Button button1;

public void initialize()
{
     button1 = new Button("Button1");
    vBox.getChildren().add(button1);

    //pierwszy sposob
    button1.setOnMousePressed(this::klikniecie); //metoda musi przyjmować arg typu javafx.event.Event;

    //drugi sposob
    button1.setOnMousePressed((event) -> this.klikniecie()); //dowolna metoda
}

public void klikniecie(Event event)
{
     button1.setText("X");
}

public void klikniecie()
{
     button1.setText("X");
}

 

Zauważ tylko, że button1 w takim przypadku nie może być zmienną lokalną.

komentarz 12 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)

Rozwiązało to jeden problem jednak pojawił się kolejny..
Użyłem:

buttons[i].setOnMousePressed((event) -> this.klikniecie());
public void klikniecie(ActionEvent event) { 
        ((Button)event.getSource()).setText("X");
    }

Muszę użyć parametru do funkcji, jednak nie mogę dojść jakiego.
Czy mogę coś wstawić, żeby pozbyć się problemu?

 

komentarz 12 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)

Po wielu próbach udało mi się znaleźć rozwiązanie!
Dla potomnych:

buttons[i].setOnMousePressed((event) -> this.klikniecie(event));

public void klikniecie(MouseEvent event) {
        ((Button)event.getSource()).setText("X");
    }

Dziękuję za pomoc. :)

komentarz 12 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

Można też zrobić to tak:

public void initialize()
{
     for(int i = 0; i < buttons.length; i++)
      {
            buttons[i] = new Button("Button " + i);

            int j = i;
            buttons[i].setOnMousePressed((event -> {
                this.klikniecie(buttons[j]);
            }));

            vBox.getChildren().add(buttons[i]);
      }
}

public void klikniecie(Button button)
{
    button.setText("X");
}

Wtedy unika się rzutowania.

Podobne pytania

0 głosów
0 odpowiedzi 142 wizyt
pytanie zadane 18 lutego 2020 w Java przez mm Użytkownik (890 p.)
0 głosów
2 odpowiedzi 306 wizyt
0 głosów
1 odpowiedź 89 wizyt
pytanie zadane 9 stycznia 2016 w Java przez natrov Gaduła (3,970 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...