Archive for the ‘Cómputo’ Category.

Java: Cómo vetar el cambio en un JComboBox / How to veto item change on JComboBox

Como no existe un VetoableChangeListener para el cambio de un item en un JComboBox (que sería algo así como un VetoableItemListener), se puede usar la siguiente técnica:

Escuchar el evento itemStateChanged en un ItemListener.

Cuando el stateChange() del evento sea ItemEvent.DESELECTED, guardar el item deseleccionado (mediante el método getItem() del evento) en .

Cuando el stateChange() del evento sea ItemEvent.SELECTED, y se desea vetar el cambio, ejecutar:

theJComboBox.setSelectedItem(deselectedItem);

———————-

There is no exist a VetoableChangeListener class to allow veto on item change on a JComboBox -it would be a class named like VetoableItemListener. However, you can use the next technique:

Hear itemStateChanged event on a ItemListener instance.

When event.getStateChange() == ItemEvent.DESELECTED, save the deselected item (event.getItem()) .

When event.getStateChange() == ItemEvent.SELECTED, and you wish to veto the change, do:

theJComboBox.setSelectedItem(deselectedItem);

Java: Cómo comparar cadenas ignorando acentos / How to compare Strings ignoring accents

Hoy enfrenté un problema: comparar cadenas ignorando acentos. Las soluciones propuestas en el artículo Unaccent letters no me gustaron por ser poco eficientes. He aquí la mejor, estándar y más rapida solución: usar la clase java.text.Collator, con un valor PRIMARY en strength:

Collator esMXCollator = Collator.getInstance(new Locale("es", "MX"));
sMXCollator.setStrength(Collator.PRIMARY);
boolean iguales = 0 == esMXCollator.compare("Querétaro", "Queretaro"); // iguales == true

Este collator también ignora mayúsculas y minúsculas.

Today, I faced a challenge: to compare Strings ignoring accents. I did not like solutions on Unaccent letters because they are unefficient. Here is the best, more standard and quick solution: to use java.text.Collator class, using a strength value of PRIMARY:

Collator esMXCollator = Collator.getInstance(new Locale("es", "MX"));
sMXCollator.setStrength(Collator.PRIMARY);
boolean iguales = 0 == esMXCollator.compare("Querétaro", "Queretaro"); // iguales == true

This collator is case insensitive too.