Итак, у вас есть как минимум два решения. Или идите с тем, что предлагают @Geoff и @sthupahsmaht. Кстати, также возможно использовать JOptionPane, которая автоматически создает диалог для вас.
Другим вариантом будет использование GlassPane из фрейма.
Или еще один вариант - использовать JLayeredPane, как подсказывает @jzd.
EDIT:
Пример, показывающий, как использовать GlassPane для захвата пользовательских выборов.
Попробуйте следующие шаги:
1. Левый клик на стеклянной панели виден при запуске. Смотрите вывод.
2. Щелкните правой кнопкой мыши. Это скрывает стеклянную панель.
3.Нажмите левой кнопкой мыши на панели содержимого. Смотрите вывод.
4. Щелкните правой кнопкой мыши. Перейти к пункту 1.
Наслаждайтесь.
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 :
Если вы хотите создать эффект диалога, вы можете добиться этого, включив соответствующий код в мой пример.
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);