2012-01-27 19 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()) 
     { 
     } 
    } 
} 

Me preguntaba si había un método dentro de la clase MouseListener o JPanel que me permite obtener el texto de un botón al que se hace clic. Gracias¿Cómo obtengo el texto de un botón en Java?

+4

Utilice 'equals' en lugar de' == 'para comparar cadenas. ¿Qué hay de malo en cómo lo estás obteniendo? –

+1

Dice que getText() no es un método en java.awt.event.MouseEvent - ¿hay algún método similar en MouseEvent que devuelva texto así? –

Respuesta

4

Tome un vistazo a la API MouseEvent Hay un método getSource() que puede utilizar que devuelve el objeto donde se produjo el suceso. Luego verifique si ese objeto es una instancia de un botón. Si es así, puedes convertirlo en un tipo de botón y luego obtener el texto desde allí.

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

No estoy seguro de si es necesario comprobar b! = Null, porque el objeto JButton nulo no puede desencadenar un evento, supongo. Si estoy equivocado, por favor, corrígeme. – Benjamin

+1

@Benjamin needed f.e. obtener JBUtton de Model, o AbstractButton +1 – mKorbel

+0

@Benjamin La comprobación nula está específicamente para el caso del mousePressed que se usa para diferentes componentes. Otros componentes podrían estar usando este método para actuar como un controlador para eventos de mouse. Eso dependería del desarrollador decidir. también puede mantener todo en la instancia original de la instrucción if si lo desea. Simplemente lo escribí por simplicidad. – Sean

4

Debería intentar mirar ActionListener e implementarlo. Esas acciones se dispararon, al hacer clic en un botón, así es como se debe trabajar:

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 
     } 
    } 
} 

luego escribir un método principal y añadir una nueva instancia de Test panel a un JFrame y ver cómo funciona.

tutorial se puede encontrar en la siguiente página web: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

+1

Esto funcionó! Gracias :) –

+0

@Ryan Edward Dougherty :) [Aceptar] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) la respuesta, si es el uno que estás buscando – 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); } 

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

Ésta es la forma en que lo hice. Estaba buscando una forma de pasar los nombres de los botones a un método para poder ejecutar un alcance de if(s==Button1){}else if(s==Button2){..... de aproximadamente 12 botones.

La captura de un nombre de botón me resultó difícil (solo he estado haciendo Java durante un día más o menos), así que se me ocurrió esto para pasar la etiqueta/texto a un método.

Ese código se puede colocar en su propio método de manera que después de hacer su botón establece que sólo puede ir en cada evento de clic y pegar

SendButtonLabel(evt.ToString()); 

luego pasarlo a partir de ahí a su si/método continuación buttonlist

o lo que necesite su proyecto sin tener que entrar y codificar cualquier cosa en cada evento de clic. Supongo que sería posible si estuvieras haciendo un proyecto en particular para configurar tu IDE para agregar automáticamente esa llamada de método a cada evento de clic a medida que se crea, pero aún no estoy tan avanzado.

1

Esto me estaba volviendo loco también ... y esta es la respuesta: no hay un método .getText() para un Botón ... ¿quieres usar .getLabel() ¿No son divertidos los espacios de nombres?

Cuestiones relacionadas