Witam, w temacie javy jest początkujący, do tej pory programowałem w Visual Studio C#, wszystkie zdarzenia obsługujące działanie komponentów można było dodać wizualnie, albo poprzez dodanie delegata, niestety w Javie odbywa się to nieco inaczej. Na pewno nie do końca rozumiem schemat działania zdarzeń, a bez tego nie da się programować.
Pod pytaniami zamieszczam cały kod do którego one się odnoszą.
-
Czy ActionListener jest podstawowym słuchaczem? Czy za jego pomocą mogę jakoś identyfikować i dzielić zdarzenia np. kliknięcia, czy rozróżniać obiekty który wywołał zdarzenie? Zastanawiam się czy w ogóle zrobienie metody dla całego Frame, a później wyszukiwanie ich przez switch ma sens?
-
Dla obiektu menuItem wywołane są metody
// DZIAŁA WYSWIETLA ActionPerformed dla Window
// menuItemImportWMRODZ.addActionListener(this);
// NIE DZIAŁA
// menuItemImportWMRODZ.addMouseListener(this);
Rozumiem, że w nawiasie podawany jest obiekt dla którego wywoływane są metody?
- W tym przypadku tworzę osobne zdarzenie które obsługuję dokładnie jeden element menuItem, podobnie jak w C#.
Dla drugiej opcji trochę bez sensu wydaje się konieczność za każdym razem deklarowania wszystkich metod, jeżeli chcesz wywoła zdarzenie tylko Click.
// Działa
menuItemImportWMRODZ.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "ActionPerformed dla menuItemImportWMRODZ");
}
});
// Nie działa
menuItemImportWMRODZ.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, "MouseListener dla menuItemImportWMRODZ"); }
public void mouseReleased(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
});
-
Ostatnie pytanie, czy wewnątrz głownego okna zadeklarować prywatne obiekty frame? a w zdarzeniu click dla każdego elementu wykonywać new = frame, i setvisable(show)?
-
Dodałem jeszcze jedno pytanko, dlaczego działa mousePressed, a nie działa mouseClicked? MouseAdapter zawęża jakoś zdarzenia Mouse?
menuItemImportWMRODZ.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(null, "menuItemImportWMRODZ");
}
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, "MouseListener dla menuItemImportWMRODZ !!");
}
});