2009年4月24日金曜日

The glass pane in Java


/**
* Glass pane class
* The glass pane is displayed overlap the content
* pane in the japplet or jframe. It can be set to
* visible while user want to temporarily disable
* their window.
*
* Usage:
*
* //In your frame's initialization, set the glass pane.
* this.setGlassPane(new GlassPane());
*
* //In your event, make the glass pane visible.
* this.getGlassPane().setVisible(true);
* new Thread(){
* public void run(){
* //Your program code
* ...................
* SwingUtilities.invokeLater(new Runnable(){
* public void run(){
* XXXX.this.getGlassPane().setVisible(false);
* }
* });
* }
* }.start();
*
*
*/
public class GlassPane extends JComponent implements MouseListener, KeyListener{
/** Serial version ID */
private static final long serialVersionUID = -5955027767708857008L;

/** Label to display message */
private JLabel lblmsg = null;
/** Glass pane's color */
private Color glassColor = null;

/**
* constructor
*
*/
public GlassPane(){
addMouseListener(this);
addKeyListener(this);
setOpaque(false);

//Get glass pane's color
Color base = UIManager.getColor("OptionPane.background");
glassColor = new Color(base.getRed(), base.getGreen(), base.getBlue(), 128);

setLayout(new GridBagLayout());

lblmsg = new JLabel("aaaaaaaaa");
lblmsg.setHorizontalAlignment(SwingConstants.CENTER);
lblmsg.setOpaque(true);

this.add(lblmsg);
}

//Mask mouse and keyboard event
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void keyPressed(KeyEvent e){e.consume();}
public void keyReleased(KeyEvent e){e.consume();}
public void keyTyped(KeyEvent e){}

/**
* Show or hide glass pane
*
*/
public void setVisible(boolean fl){
super.setVisible(fl);
if(fl){
requestFocusInWindow();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}else{
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}

/**
* Drawing glass pane's background
*
*/
protected void paintComponent(Graphics g){
g.setColor(glassColor);
g.fillRect(0, 0, getSize().width, getSize().height);
}
}