2012-01-27 14 views
5
class Test extends JPanel implements MouseListener 
{ 
    private JButton b1, b2, b3, b4; 

    public Test() 
    { 
     setLayout (new GridLayout (2, 3)); 

     b1 = new JButton ("Button 1"); 
     b2 = new JButton ("Button 2"); 

     add (b1); 
     add (b2); 
    } 

    public void mousePressed (MouseEvent event) 
    { 
     if (event.getText() == b1.getText()) 
     { 
     } 
    } 
} 

Zastanawiam się, czy istnieje metoda w klasie MouseListener lub JPanel, która pozwala mi uzyskać tekst kliknięcia przycisku. DziękiJak uzyskać tekst przycisku w Javie?

+4

Użyj 'równa się' zamiast' == ', aby porównać ciągi. Co jest nie tak z tym, jak je zdobywasz? –

+1

Mówi, że getText() nie jest metodą w java.awt.event.MouseEvent - czy istnieje podobna metoda w MouseEvent, która zwraca taki tekst? –

Odpowiedz

4

Spójrz na The MouseEvent api istnieje metoda getSource(), które można wykorzystać, która zwraca obiekt, w którym wystąpiło zdarzenie. Następnie sprawdź, czy ten obiekt jest instancją przycisku. Jeśli to możliwe, możesz rzucić go na typ przycisku, a następnie pobrać tekst z tego miejsca.

public void mousePressed (MouseEvent event){ 
    Object o = event.getSource(); 
    JButton b = null; 
    String buttonText = ""; 

    if(o instanceof JButton) 
    b = (JButton)o; 

    if(b != null) 
    buttonText = b.getText(); 

} 
+1

Nie jestem pewien, czy konieczne jest sprawdzenie b! = Null, ponieważ pusty obiekt JButton nie może wystrzelić zdarzenia, tak myślę. Jeśli się mylę, popraw mnie. – Benjamin

+1

@Benjamin potrzebował f.e. get JBUtton from Model lub AbstractButton oba +1 – mKorbel

+0

@Benjamin Kontrola zerowa dotyczy konkretnie przypadku mousePressed używanego dla różnych składników. Inne składniki mogą używać tej metody do działania jako kontroler zdarzeń myszy. Decyzja należy do dewelopera. możesz również zachować wszystko w oryginalnym instancji, jeśli chcesz, jeśli chcesz. Po prostu napisałem to dla uproszczenia. – Sean

4

Powinieneś spróbować spojrzeć na ActionListener i zaimplementować go. Działania te są wypalane, po kliknięciu przycisku, to jak należy pracować:

class Test extends JPanel implements ActionListener { 
... 
    public Test() { 
     super(); 
     ... 
     b1 = new JButton("Button 1"); 
     ... 
     add(b1); 
     ... 
     b1.addActionListener(this); 
     ... 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     System.out.println(((JButton) event.getSource()).getText()); 
     if (event.getSource() == b1) { 
      // do sth 
     } else if (event.getSource() == b2) { 
      // do sth else 
     } 
    } 
} 

Następnie należy napisać główną metodę i dodać nową instancję Test panelu do JFrame i zobaczyć jak to działa.

Tutorial można znaleźć na następującej stronie internetowej: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

+1

To działało! Dzięki :) –

+0

@Ryan Edward Dougherty :) [Zaakceptuj] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) odpowiedź, jeśli jest to jeden, którego szukasz. – Lion

0
import java.util.Arrays; 

import java.util.List; 

private void Button1ActionPerformed(java.awt.event.ActionEvent evt) { 

//******************************************************** 

     String Hunt1 = evt.toString(); 
     Hunt1 = Hunt1.replaceAll("=", ","); 
     Hunt1 = Hunt1.replaceAll("]", ","); 
     String [] Hunt2 = Hunt1.split(","); 
     List Hunt3 = Arrays.asList(Hunt2); 
     String ButtonText = Hunt3.get(2).toString(); 
     System.out.println(ButtonText); } 

//******************************************************* 

To jak to zrobiłem. Szukałem sposobu na przekazanie nazw guzików do metody, dzięki czemu mogłem zlikwidować zasięg około 12 przycisków.

Złapanie nazwy przycisku okazało się trudne dla mnie (ja tylko robiłem Javę przez dzień lub dwa), więc wymyśliłem to, aby przekazać etykietę/tekst do metody.

Ten kod może być umieszczony w jego własnej metody tak, że po dokonaniu Twój zestaw przycisku można po prostu iść do każdego zdarzenia click i wklej

SendButtonLabel(evt.ToString()); 

następnie przekazać go stamtąd do listy if/następnie buttonlist metoda

lub cokolwiek potrzebuje twój projekt, bez konieczności wchodzenia i kodowania czegokolwiek do każdego zdarzenia kliknięcia. Przypuszczam, że byłoby to możliwe, gdybyś wykonywał konkretny projekt, aby skonfigurować IDE, aby automatycznie dodać wywołanie tej metody do każdego zdarzenia kliknięcia w trakcie jego tworzenia, ale jeszcze nie jestem tak zaawansowany.

1

To również doprowadzało mnie do szaleństwa ... i oto odpowiedź: nie ma metody .getText() dla Button ... którego chcesz użyć .getLabel() Czyż przestrzeń nazw nie jest zabawna?

Powiązane problemy