JTree con casillas de verificación

votos
12

Necesito agregar casillas de verificación a un JTree. Un TreeCellRenderer / TreeCellEditor personalizado parece ser el enfoque correcto. Hasta ahora usé el enfoque CheckBoxNodeRenderer en esta página web . Funciona bien, excepto por dos cosas:

  1. hay espacios en blanco adicionales arriba + debajo de la casilla de verificación; Me gustaría mantenerlo igual que un JTree normal.
  2. Me gustaría distinguir entre hacer clic en la casilla de verificación (que debería intentar alternar la casilla de verificación) y hacer clic en el texto asociado con la casilla de verificación (que debería permitir a un oyente de eventos interpretar esto haciendo clic en el nodo de árbol correspondiente y tomar cualquier acción es apropiado)

¿Hay alguna manera de hacer estas cosas? Busqué a JTrees con casillas de verificación, no puedo encontrar mucho. JIDE se ve bien, pero necesito usar un software libre de código abierto (GPL no está bien, LGPL está bien) en este caso. (o crea mi propio árbol de casillas de verificación)

Publicado el 03/08/2009 a las 17:06
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
7

En cuanto al # 2, podría hacer que un panel sea el editor / procesador, y agregar una etiqueta junto con la casilla de verificación: la etiqueta sería el texto y la casilla de verificación no tendría el texto agregado.

Respondida el 03/08/2009 a las 18:00
fuente por usuario

votos
4

por sugerencia de @aperkins esto es lo que terminé haciendo en el TableCellRenderer, parece funcionar bien:

final private JPanel nodeRenderer = new JPanel();
final private JLabel label = new JLabel();
final private JCheckBox check = new JCheckBox();

     ...

// in constructor:
final Insets inset0=new Insets(0,0,0,0);        
this.check.setMargin(inset0);
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST);
this.nodeRenderer.add(this.label, BorderLayout.CENTER);

Las claves para deshacerse del espacio no deseado en los márgenes parece ser (a) llamar a JCheckBox.setMargin () para reducir el margen de la casilla de verificación, y (b) usar un BorderLayout para JPanel.

Respondida el 03/08/2009 a las 20:35
fuente por usuario

votos
9

Sé que esta pregunta se ha respondido ya, pero sólo quiero aclarar algunos puntos:

1) Capa JIDE común es de doble licencia GPL (con excepción ruta de clases y la licencia comercial libre). Esto significa que puede utilizar el Proyecto capa común sin ningún tipo de problemas de licencia. Por favor, compruebe el siguiente enlace para confirmar: http://www.jidesoft.com/products/oss.htm . La capa común incluye una implementación de un JTree comprobable (com.jidesoft.swing.CheckBoxTree).

2) Hay un blog que data de 2005 desde el mismo Maestro, Santhosh Kumar, donde explica cómo implementar un JTree con casillas de verificación con los requisitos que usted ha mencionado: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes . Vale la pena leerlo, en mi opinión.

Respondida el 20/02/2012 a las 13:16
fuente por usuario

votos
2

He publicado un autónomo Oscilación del árbol de casilla de verificación del proyecto, disponible en Maven central como org.scijava:swing-checkbox-tree.

El paquete se basa en John Zukowski Muestra árbol de nodos CheckBox código. Es BSD-2-licencia sin dependencias.

Permite mezcla y combinación de DefaultMutableTreeNodey CheckBoxNodeDatalos tipos de nodo. También permite comprobar nodos caja como nodos que no son hojas.

En cuanto a la edición de la pregunta # 1: No he probado en todas las plataformas, pero en mis sistemas OS X, los CheckBoxNodeDatanodos son exactamente la misma altura en píxeles como los DefaultMutableTreeNodenodos.

En cuanto a la edición de la pregunta # 2: se utiliza un JCheckBox+ JLabelen un JPanel(a aperkins sugiere) para diferenciar entre hacer clic en una casilla de verificación (para activar / desactivar un nodo) frente a una etiqueta (para seleccionar un nodo).

Ejemplo usos:

El último ejemplo también tiene código para alternar de forma recursiva subárboles en respuesta a las cajas que se comprueba o sin marcar (ver el treeNodesChangedmétodo).

Respondida el 12/10/2012 a las 20:49
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more