¿Por qué JComboBox ejecuta la función toString() al pasar el ratón por encima?
He creado una interfaz gráfica de usuario (GUI) simple, con un JComboBox y un JButton. El JButton rellena el JComboBox con objetos de la clase testString. Cuando se pasa el mouse sobre el JComboBox, se llama al método toString() de la clase testString aproximadamente 25 veces. ¿Por qué ocurre esto? ¿Cómo podemos detenerlo?
Aquí está el código:
import javax.swing.DefaultComboBoxModel;
public class _NewJFrame extends javax.swing.JFrame {
public _NewJFrame() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Object[] args = {new testString("ABC") , new testString("EDF") , "GIH", "IJK"};
jComboBox1.setModel(new DefaultComboBoxModel(args ));
}
public static void main(String args[]) {
new _NewJFrame().setVisible(true);
}
private javax.swing.JButton jButton1;
private javax.swing.JComboBox<string> jComboBox1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
}
class testString {
String text;
static int i;
testString(String text){
this.text = text;
};
public String toString(){
System.out.println("ToSting() llamado en Texto " + text + " "+ ++i);
return text;
}
}
GUI: enlace a la imagen
Resultado: enlace a la imagen
davy.ai
El problema está en la implementación del método
toString()
en la clasetestString
. Cada vez que se pasa el cursor sobre elJComboBox
, se llama al métodotoString()
y se imprime el mensaje en la consola. Como resultado, se llama 25 veces, lo que causa un problema de rendimiento.Para solucionar esto, puedes eliminar la instrucción
System.out.println
del métodotoString()
. Si necesitas imprimir el mensaje con fines de depuración, puedes utilizar registradores en su lugar.Aquí está el código modificado para la clase
testString
sin la instrucciónSystem.out.println
.Con esta modificación, el método
toString()
se llamará solo una vez cada vez que se agregue un elemento alJComboBox
, en lugar de llamarlo varias veces al pasar el cursor sobre él.