Problemas para agregar un GridBagLayout dentro de un ActionListener

Tengo un JMenuItemcon un ActionListener, en esto ActionListenerquiero agregar un GridBagLayouta mi frame(que podría o no tener un panel de contenido aún agregado, para fines de prueba, no lo hace) y luego agregar componentsa eso frame. El diseño del frame workson es propio pero lo quiero triggerdesde un ActionListeneron a JMenuItemy aquí es donde me encuentro con un problema. No se mostrará desde el interior de un ActionListener. He intentado ejecutar el mismo código desde un método diferente en la clase desde el AL y tampoco funcionó.

Cuando comento ActionListenercompletamente, lo JLabelque quiero probar se agrega al GBLen el lugar correcto, y al sistema printsmis debuglíneas aquí y aquí2 . El no recoge errores de sintaxis compiler. Esto produce el resultado deseado y se imprime la etiqueta. (Vea a continuación una imagen de lo que sucede cuando comento el AL por completo). A continuación, aparece un fragmento del código en cuestión (en cuyo marco está mi JFrame):

ingrese la descripción de la imagen aquí

// (frame created, menus added, etc.) ...
JMenuItem vPoke1Item = new JMenuItem("Pokemon 1");
vPoke1Item.setActionCommand("poke1");
viewMenu.add(vPoke1Item);

//Setup GBL to view stats for Pokemon 1
  vPoke1Item.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e)
      {
//        debug output
          System.out.println("here");

//        Set up the content pane
          frame.getContentPane().removeAll();
          GridBagLayout gbl = new GridBagLayout();
          GridBagConstraints gbc = new GridBagConstraints();
          Container pane = frame.getContentPane();
          pane.setLayout(gbl);

//        Make a StatCalcObject (all my labels/fields are already initialized)
          StatCalc1 sc1 = new StatCalc1();

//        Add it to pane
          gbc.gridx = 0;gbc.gridy = 0;gbl.setConstraints(sc1.speciesL, gbc);
          pane.add(sc1.speciesL);
          frame.revalidate();
          frame.repaint();

//        debug output
          System.out.println("here2");
      }
  });
// (etc.)

Ahora, cuando ejecuto este código, sigo recibiendo las líneas de depuración "aquí" y "aquí2" para imprimir, por lo que me dice que ActionListener funciona bien. Pero la etiqueta no aparece. Todavía no hay errores de sintaxis recogidos por el compilador. Así que me estoy rascando la cabeza aquí. ¿Qué estoy haciendo mal? Espero que este fragmento de código sea suficiente para comprender el problema, pero si desea el código completo, puedo proporcionarlo.

Respuesta 1

Siempre que use una ventana de tamaño fijo, todo funcionará si lo reemplaza

frame.revalidate();
frame.repaint();

con

pane.invalidate();
pane.validate();

o

pack();

si no tiene marco de tamaño fijo. Tenga en cuenta que revalidar no es compatible con JFrame o Container. También es mejor reemplazar

gbl.setConstraints(sc1.speciesL, gbc);
pane.add(sc1.speciesL);

con

pane.add(sc1, gbc);

para un mejor estilo de código.

Respuesta: 2

Estoy enfrentando un problema en el contexto de empujar un número entero en la pila en BCEL. Tengo un método _square de someClass, es decir, "mathClass" ilist = new InstructionList (); ilist.append (InstructionConstants ....

Tengo una solicitud HTTP javax.servlet.http.HttpServletRequest que está pasando un valor para ser utilizado en algún código que se maneja en un servicio web Java utilizando JAX-RS. La función POST en Java está consumiendo ...

Estoy escribiendo una biblioteca nativa de Java en C ++, y uso el manejo de excepciones dentro de la propia biblioteca nativa, pero la biblioteca se bloquea tan pronto como lanzo una excepción. Aquí está mi programa de prueba simple, cuando lo llamo ...

Quiero completar valores en mi lista de matrices de tipo de clase abstracta. A continuación se muestra mi código public abstract class Account {private int accountId; ID de cliente privado int; doble saldo privado; ...