Duda con el manejo de checkbox

tengo una serie de checkbox, ellos está ubicados en forma de lista uno debajo de otro, y tengo un panel al lado de ellos, lo que deseo es que cuando de clic en uno de los checkbox se me agregue un nuevo checkbox en el panel.

Uso el evento stateChanged donde introduzco el siguiente código

private void nombresStateChanged(javax.swing.event.ChangeEvent evt) {
if(nombres.isSelected()==true)
{
JCheckBox nombres1 = new JCheckBox();
Visualizar.add(nombres1);
nombres1.setVisible(true);
}
}

inicialmente me lo agrega, pero el checkbox original se me bloquea y el de abajo de la lista de checkbox también se me bloquea.

Alguna sugerencia? Gracias de antemano

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

«ItemEvent» en lugar de «ChangeEvent»

 

El evento para escuchar un cambio de estado de selección de una casilla de verificación en Java Swing (i.e. JCheckBox) debe ser tipo de ItemEvent en lugar de ChangeEvent.

En otras palabras:

killerCheckBox.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent evt) {
        ...
    }
});

Y en cuanto al congelamiento de la interfaz, seguramente hay otras líneas involucradas que no han sido incluidas en tu publicación.

~~~

gracias por tú aclaración

gracias por tú aclaración pero estoy usando netbean 8.1 y busco en los eventos de item y solo me sale el itemStateChanged, y trate de introducir tú código pero me manda error

ya logré ver el error y lo

ya logré ver el error y lo compusé, me quedó de la siguiente manera:

public Rpt_HHRR() {
initComponents();
this.setLocationRelativeTo(null);

//Conecta a la base de datos
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://xxx.xxx.xxx.xxx:xxxx;databaseName=xxxx;user=xx; password=xxxxxxxxx;";
con=DriverManager.getConnection(url);
}
catch (Exception e)
{
e.printStackTrace();
}

nombres.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent evt)
{
JCheckBox nombres1 = new JCheckBox();
Mostrar.add(nombres1);
}
});
}

pero lo ejecuto y no pasa nada, yo deseo que el nuevo checkbox que se crea que se agregue a un nuevo panel

Gracias de antemano

Container.validate()

 

De acuerdo con la documentación de java.awt.Component (1), si modificas el árbol jerárquico de cierto componente, necesitas llamar al método validate() para mostrar los cambios:

When the hierarchy gets invalidated, like after changing the bounds of components, or adding/removing components to/from containers, the whole hierarchy must be validated afterwards by means of the Container.validate() method invoked on the top-most invalid container of the hierarchy.

Asumiendo que Mostrar (2) sea una instancia de JPanel, tu código se asemejaría a:

JCheckBox nombres1 = new JCheckBox();
Mostrar.add(nombres1);
Mostrar.validate();

Notas

  1. https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html
  2. Para evitar confusiones de este tipo, te recomiendo que utilices las Java Code Conventions [PDF]. Hay una versión en español: Convenciones de Código para el lenguaje de programación JAVA [PDF]

~~~