Solo aparece un componente en JFrame
Como mejora a mi proyecto de cifrado, decidí hacer una pequeña GUI. Sin embargo, cuando ejecuto el programa, sólo el elemento superior aparece en la pantalla y parece ocultar los demás, aunque no tengo forma de comprobarlo. ¿Alguien sabe por qué?
A continuación se muestra mi código en su totalidad, además, e()
porque d()
simplemente cifran una cadena y no tienen nada que ver con una GUI. También me gustaría encontrar una forma de acelerarlo tanto como sea posible sin editar el cifrado, solo para hacerlo lo mejor posible.
@SuppressWarnings("serial")
public class EncDecExample extends JFrame implements ActionListener {
final static JPanel top = new JPanel();
final static JPanel mid = new JPanel();
final static JPanel bot = new JPanel();
final static JTextField in = new JTextField(10);
final static JTextField out = new JTextField(10);
final static JButton enc = new JButton("Encrypt");
final static JButton dec = new JButton("Decrypt");
final static JFrame f = new JFrame("Encryption/decryption");
public static void main(String[] args) {
// EncDec.exampleImplement();
f.setSize(500, 500);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
out.setEditable(false);
out.setText("Hello");
in.setVisible(true);
out.setVisible(true);
enc.setVisible(true);
dec.setVisible(true);
top.add(in);
mid.add(enc);
mid.add(dec);
bot.add(out);
f.add(top);
f.add(mid);
f.add(bot);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == enc && !in.getText().equalsIgnoreCase("")) {
out.setText(EncDec.e(in.getText(), 5));
}
else if(e.getSource() == dec && !in.getText().equalsIgnoreCase("")) {
out.setText(EncDec.d(in.getText()));
}
}
}
El panel de contenido de a JFrame
tiene un archivo BorderLayout
. Si coloca un componente en un BL sin restricciones, terminará en el archivo CENTER
. El centro sólo puede mostrar un componente.
Para un efecto inmediato, sugiero:
f.add(top, BorderLayout.PAGE_START);
f.add(mid);
f.add(bot, BorderLayout.PAGE_END);
Otros puntos.
- Sacar
f.setSize(500, 500);
y llamarpack()
inmediatamente antes.setVisible(true)
- Para obtener una mejor manera de finalizar la GUI, cambie
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
af.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
in.setVisible(true);
Excepto el marco en sí, sácalos. Un componente se vuelve visible automáticamente cuando se agrega a un contenedor de nivel superior y ese contenedor se hace visible.- Cambiar
public class EncDecExample extends JFrame
apublic class EncDecExample
Este código mantiene una referencia a un marco, y ese es el camino correcto a seguir.