W programie korzystam z "szyby" - obiektu zwracanego przez getGlassPane(). Wysunięta szyba zasłania JFrame. Kliknięcie w przycisk "Szyba" wysuwa szybę, PPM chowa szybę. Jak szyba jest wysunięta, to LPM rysuje na niej czerwone koło. Program działa dobrze, z jednym wyjątkiem Źle działa pierwszy LPM po pierwszym wysunięciu szyby. Co jest źle w programie?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Szyba extends JFrame implements ActionListener
{
private Component szyba = null;
private boolean jestSzyba = false;
//------------------------
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new Szyba().createAndShowGUI();
}
});
}
//------------------------
private void createAndShowGUI()
{
setTitle("Nie ma szyby");
szyba = getGlassPane();
szyba.addMouseListener(zakraplacz);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setLayout(new FlowLayout(FlowLayout.CENTER));
JButton b = new JButton("Szyba");
b.addActionListener(this);
add(b);
setLocationRelativeTo(null);
setVisible(true);
}
//------------------------
public void actionPerformed(ActionEvent ae)
{
szyba.setVisible(true);
setTitle("Szyba wszystko zasłoniła");
}
//------------------------
MouseListener zakraplacz = new MouseAdapter()
{
public void mousePressed(MouseEvent me)
{
Graphics g = szyba.getGraphics();
g.setColor(Color.RED);
g.fillOval(me.getX()-25,me.getY()-25,50,50);
jestSzyba = true;
System.out.println("1");
}
//--------------------
public void mouseReleased(MouseEvent me)
{
System.out.println("2");
if(me.isPopupTrigger() && jestSzyba)
{
System.out.println("3");
szyba.setVisible(false);
jestSzyba = false;
setTitle("Nie ma szyby");
repaint();
}
}
};
}