Así que aquí tiene al menos dos soluciones. O ve con lo que sugieren @Geoff y @sthupahsmaht. Por cierto, también es posible utilizar JOptionPane, que crea automáticamente un diálogo para usted.
La otra opción sería usar un GlassPane de un marco.
O bien, otra opción es utilizar JLayeredPane como @jzd sugiere.
EDIT: ejemplo que muestra cómo utilizar GlassPane para capturar las selecciones del usuario. Pruebe los siguientes pasos:
1.Haga clic con el botón izquierdo sobre el cristal visible al inicio. Ver la salida.
2.Haga clic derecho. Esto oculta el panel de vidrio.
3.Haga clic con el botón izquierdo en el panel de contenido. Ver la salida.
4.Haga clic derecho en él. Vaya al punto 1. Disfrútelo.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class OverPanel extends JPanel
{
private static void createAndShowGUI()
{
final JFrame f = new JFrame();
f.setPreferredSize(new Dimension(400, 300));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel glassPanel = new JPanel();
glassPanel.setBackground(Color.RED);
glassPanel.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
System.out.println("f.getGlassPane() mousePressed");
if(e.getButton() == MouseEvent.BUTTON3)
f.getGlassPane().setVisible(false);
}
});
f.setGlassPane(glassPanel);
f.getContentPane().setBackground(Color.GREEN);
f.getContentPane().addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
System.out.println("f.getContentPane() mousePressed");
if(e.getButton() == MouseEvent.BUTTON3)
f.getGlassPane().setVisible(true);
}
});
f.getGlassPane().setVisible(true);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
}
Edit2: Si usted quiere tener un efecto de un cuadro de diálogo, se puede lograr mediante la incorporación de manera apropiada este código en mi ejemplo.
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
panel.setBackground(Color.YELLOW);
panel.add(new JLabel("I am message Label"));
panel.add(new JButton("CLOSE"));
JPanel glassPanel = new JPanel(new GridBagLayout());
glassPanel.setOpaque(false);
glassPanel.add(panel);
Probablemente debería utilizar un 'JDialog' en lugar de un' JPanel', ya que se puede establecer su _modality_ – mre
_Also debo mencionar que yo no quiero JDialog.Quiero usar la parte superior de jpanel de cualquier elemento para mostrar una carga hasta que termine el proceso. ¿Qué? 'JDialog' hará todo esto de forma gratuita. ¿Puedes justificar el uso de 'JPanel' en lugar de' JDialog'? – mre