lunes, 24 de septiembre de 2012

hoy 2 x 1 JComboBox con despliegue a la derecha y Separador en java


Hoy Lunes de 2 x 1, y les traigo una forma sencilla de personalizar un JComboBox haciendo que el despliegue del Popup sea a la derecha y añadiremos un separador de items con el fin dedistinguirde los de mas items pero primero veamos unos conceptos:

BasicComboPopup: es una implementacionbásicade la interfaz popup que representa a la parte emergente del cuadro combinado.

PopupMenuListener : es un oyente delmenúemergente .

¿Como cambiamos deposiciónalMenúemergente del JComboBox?
para esto hacemos uso del oyente del popup(PopupMenuListener), implementando una clase instanciamos elBasicComboPopup con el fin de obtener el Popup y cambiar suorientación.

public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
JComboBox combo = (JComboBox)e.getSource();
Accessible a = combo.getAccessibleContext().getAccessibleChild(0);
if(a instanceof BasicComboPopup) {//UTILIZACION DE BasicComboPopup
BasicComboPopup pop = (BasicComboPopup)a;
Point p = new Point(combo.getSize().width, 0);
SwingUtilities.convertPointToScreen(p, combo);
pop.setLocation(p);
}
}
});


con la propiedadsetLocation la cual nos recibe las nuevas coordenadas del popup, cambiamos laorientación.

Añadiendo Separador o JSeparator
para separar los items necesitamos agregar un Modelo al JComboBox esto lo hacemos conDefaultComboBoxModel, el cual modificamos para que instancie el separador al items seleccionado, y tambien hacemos uso de la propiedadsetRenderer , agregando la claseDefaultListCellRenderer.


 DefaultComboBoxModel modelo = new DefaultComboBoxModel() {
@Override public void setSelectedItem(Object anObject) {
if(!(anObject instanceof JSeparator)) {
super.setSelectedItem(anObject);
}
}
};

jComboBox.setRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if(value instanceof JSeparator) {
return (Component)value;
}else{
return super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
}
}
});
DESCARGAR



3 comentarios:

  1. amigo nesecito ayuda uergente estudie un curso de analisis y programacion.
    pero para podernos graduar nos pusieron un proyecto sencillo pero me falta ayoda con los combo box y es visualstudio c# hayudame o este codigo tambien sirve;
    este es el ejemplo de el proyecto es una aplicacion :

    des de aca lo copias y plo pegas en word

    AÑO MES PROGRAMA DOCUMENTOS PARAMETROS
    2012 -> -Enero ------> -Analisis y Programacion de PC --------------> -Hojas de Vida -----> -Praticas ---------> LISTADO Y LINKS
    -Febrero -Ensamble y Mantenimiento de PC -Pendientes --------> LISTADO Y LINKS

    -Marzo -Diseño Grafico -Aplazadas ---------> LISTADO Y LINKS
    -Abril -Electronica -Cartas de Remision -----> -Firmadas ----------> LISTADO Y LINKS

    -Mayo -Administracion Portuaria y Maritima -Pendientes ---------> LISTADO Y LINKS

    -Junio -Logistica -Contratos de Aprendizaje ------> LISTADO Y LINKS

    -Julio -Ingles -Convenios de Practicas -------> LISTADO Y LINKS
    -Agosto -Contabilidad -Convenios Interinstitucionales ----> LISTADO Y LINKS

    -Septiembre -Comercio Exterior -Visitas de Seguimientos -------->LISTADO Y LINKS
    -Octubre -Secretariado Ejecutivo Sistematizado -Test Evaluativos -------->LISTADO Y LINKS

    -Noviembre -Administracion de PYMES -Certificados Laborales -------->LISTADO Y LINKS
    -Diciembre -Asistencia al Infante -Otros formatos --------->PENDIENTE POR DEFINIR

    -Mercadeo y Ventas -Encuestas de Satisfacción ---------->LISTADO Y LINKS
    2013 ->
    2014 ->
    2015 ->


    oye y tu como puedes poner ese estilo de la paguina esta muy bueno dame un consejo porfa a un aprendis
    este
    es mi correo

    migue6482@hotmail.es

    ResponderEliminar
  2. Amigo disculpame no te voy a poder ayduar C# no es mi fuerte tengo un amigo que sabe C# y es autor en mi blog sobre ese tema agregame al facebook para poder ayudarte,y el diseño solo es css :)

    ResponderEliminar
  3. me impresiona la gran cantidad de ayuda que proporcionas en este blog muchas gracias

    ResponderEliminar