domingo, 21 de octubre de 2012

ComponentOrientation en un JComboBox

Al establecer la orientación de un componente JCombobox de la siguiente manera:

JComboBox comboBox = new JComboBox();
comboBox.setComponentOrientation(ComponentOrientation.RIGTH_TO_LEFT);

Resulta que los el botón de despliegue del menú ahora se situa a su izquierda, pero la alineación de los items va a su derecha, por lo que a mi opinión personal resulta un tanto molesto, despues de tanto buscar y no encontrar nada en Internet he decidido hacerlo de la única forma que se me ocurrió, la cual es implementando un ListCellRenderer de la siguiente forma:

JComboBox comboBox = new JComboBox();
comboBox.setComponentOrientation(ComponentOrientation.RIGTH_TO_LEFT);
comboBox.setRenderer(new BasicComboBoxRenderer(){
            public Component getListCellRendererComponent(JList list,
                    Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {
                ComponentOrientation listCO = list.getComponentOrientation();
                ComponentOrientation lTRCO = ComponentOrientation.LEFT_TO_RIGHT;
                if(!listCO.equals(lTRCO))
                    list.setComponentOrientation(lTRCO);
                return super.getListCellRendererComponent(list, value, index, isSelected,
                        cellHasFocus);
            }
        });

Claro que también se puede implementar como una clase interna o externa, no solamente como una clase anonima.

3 comentarios: