Hier gibt es also mindestens zwei Lösungen. Entweder Sie nehmen das, was @Geoff und @sthupahsmaht vorschlagen. BTW auch möglich ist, JOptionPane zu verwenden, die automatisch einen Dialog für Sie erstellt.
Die andere Möglichkeit wäre die Verwendung eines GlassPane aus einem Rahmen.
Eine weitere Möglichkeit ist die Verwendung von JLayeredPane, wie von @jzd vorgeschlagen.
EDITAR: Beispiel für die Verwendung GlasScheibe um Benutzerauswahlen zu erfassen. Versuchen Sie folgende Schritte:
1. klicken Sie mit der linken Maustaste auf die Glasscheibe, die beim Start sichtbar ist. Siehe die Ausgabe.
2. klicken Sie mit der rechten Maustaste darauf. Dadurch wird die Glasscheibe ausgeblendet.
3. klicken Sie mit der linken Maustaste auf das Inhaltsfenster. Sehen Sie die Ausgabe.
4. klicken Sie mit der rechten Maustaste darauf. Gehen Sie zu Punkt 1. Genießen Sie.
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 : Wenn Sie den Effekt eines Dialogs haben wollen, können Sie ihn erreichen, indem Sie diesen Code in mein Beispiel einbauen.
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);