usando poner otro ocultar mostrar llamar encima desde desactivar dentro como cambiar boton java swing jframe jpanel

poner - ocultar jframe java



¿Cómo mostrar/ocultar JPanel encima de otro JPanel en un JFrame? (2)

Tengo un marco principal que reagrupa algunos JPanels. Mi JFrame está completamente lleno.

Quiero poder mostrar / ocultar un pequeño JPanel encima de otro JPanel en mi JFrame a la izquierda. Este JPanel es un área de configuración para el usuario.

Así que aquí está mi pregunta, ¿cuál es la mejor manera de mostrar un JPanel en un área pequeña, además de todo lo demás, en mi JFrame ?

Intenté esto pero no funciona como esperaba (este es el código que se ejecuta al hacer clic en el icono de configuración):

private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) { settingsActive = !this.jLabelEmargement.isVisible(); if(!settingsActive){ FSettings.setSize(222, 380); FSettings.setLocation(0, 150); FSettings.setVisible(true); FSettings.setBackground(new Color(226,236,241)); this.add(FSettings,BorderLayout.CENTER); this.frameLearners.setVisible(false); this.jLabelEmargement.setVisible(false); this.jLabelFinalEval.setVisible(false); this.jLabelLeaners.setVisible(false); } else{ FSettings.setVisible(false); this.frameLearners.setVisible(true); this.jLabelEmargement.setVisible(true); this.jLabelFinalEval.setVisible(true); this.jLabelLeaners.setVisible(true); } }

¡Gracias!


Puede superponer el contenido de su marco con un cristal.

http://www.java2s.com/Code/Java/Swing-JFC/DemonstrateuseofGlassPane.htm

JFrame myFrame = ... JComponent glassPane = new JPanel(null); myFrame.setGlassPane(glassPane); private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) { settingsActive = !this.jLabelEmargement.isVisible(); if(!settingsActive){ FSettings.setSize(222, 380); FSettings.setLocation(0, 150); FSettings.setBackground(new Color(226,236,241)); glassPane.add(FSettings); this.frameLearners.setVisible(false); this.jLabelEmargement.setVisible(false); this.jLabelFinalEval.setVisible(false); this.jLabelLeaners.setVisible(false); } else{ glassPane.remove(FSettings); this.frameLearners.setVisible(true); this.jLabelEmargement.setVisible(true); this.jLabelFinalEval.setVisible(true); this.jLabelLeaners.setVisible(true); } }

Estoy usando esto para mostrar efectos o marcadores dentro de un JFrame .


Gracias a brainiac se me ocurrió esto como una solución, y está funcionando como se esperaba:

public void toggleSettings(){ if(this.jLabelEmargement.isVisible()){ // Set size of JPanel FSettings.setSize(222, 380); // Set location of JPanel FSettings.setLocation(0, 150); // Show JPanel FSettings.setVisible(true); FSettings.setBackground(new Color(226,236,241)); // Add JPanel to LayeredPane jLayeredPaneSettings.add(FSettings, new Integer(5)); this.frameLearners.setVisible(false); this.jLabelEmargement.setVisible(false); this.jLabelFinalEval.setVisible(false); this.jLabelLeaners.setVisible(false); ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_00997d_28.png")); jLabelSettings.setIcon(icon); } else{ // Hide JPanel FSettings.setVisible(false); // Remove from LayeredPane jLayeredPaneSettings.remove(FSettings); this.frameLearners.setVisible(true); this.jLabelEmargement.setVisible(true); this.jLabelFinalEval.setVisible(true); this.jLabelLeaners.setVisible(true); ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_000000_28.png")); jLabelSettings.setIcon(icon); } }

Solo tiene que colocar todos los componentes que desea ocultar / mostrar en un LayeredPane .