Mega Code Archive

 
Categories / Java / Swing Components
 

Add Image To GlassPane

/*  * Copyright (c) 2007, Romain Guy  * All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  *   * Redistributions of source code must retain the above copyright  *     notice, this list of conditions and the following disclaimer.  *   * Redistributions in binary form must reproduce the above  *     copyright notice, this list of conditions and the following  *     disclaimer in the documentation and/or other materials provided  *     with the distribution.  *   * Neither the name of the TimingFramework project nor the names of its  *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */ import java.awt.AWTEvent; import java.awt.Cursor; import java.awt.Graphics; import java.awt.Window; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Arrays; import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.SwingUtilities; /**  *  * @author Romain Guy  */ public class GlassMouseCursor extends javax.swing.JFrame {     public GlassMouseCursor() {         initComponents();         setGlassPane(new WatermarkGlassPane());         getGlassPane().setVisible(true);     }          /** This method is called from within the constructor to      * initialize the form.      * WARNING: Do NOT modify this code. The content of this method is      * always regenerated by the Form Editor.      */     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents     private void initComponents() {         javax.swing.JLabel jLabel1;         javax.swing.JLabel jLabel2;         javax.swing.JLabel jLabel3;         javax.swing.JLabel jLabel4;         javax.swing.JLabel jLabel5;         javax.swing.JList jList1;         javax.swing.JScrollPane jScrollPane1;         javax.swing.JScrollPane jScrollPane2;         javax.swing.JTextArea jTextArea1;         javax.swing.JTextField jTextField1;         javax.swing.JTextField jTextField2;         javax.swing.JTextField jTextField3;         javax.swing.JTextField jTextField4;         jScrollPane1 = new javax.swing.JScrollPane();         jList1 = new javax.swing.JList();         jLabel1 = new javax.swing.JLabel();         jLabel2 = new javax.swing.JLabel();         jLabel3 = new javax.swing.JLabel();         jLabel4 = new javax.swing.JLabel();         jLabel5 = new javax.swing.JLabel();         jTextField1 = new javax.swing.JTextField();         jTextField2 = new javax.swing.JTextField();         jTextField3 = new javax.swing.JTextField();         jTextField4 = new javax.swing.JTextField();         jScrollPane2 = new javax.swing.JScrollPane();         jTextArea1 = new javax.swing.JTextArea();         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);         setTitle("Glass Pane and Mouse Cursor");         jList1.setModel(new javax.swing.AbstractListModel() {             String[] strings = { "Jean-Baptiste Freymann", "Nicolas Igot", "Matthieu Grandvallet", "Fr\u00e9d\u00e9ric Hofmann" };             public int getSize() { return strings.length; }             public Object getElementAt(int i) { return strings[i]; }         });         jList1.setSelectedIndex(0);         jScrollPane1.setViewportView(jList1);         jLabel1.setText("First Name");         jLabel2.setText("Last Name");         jLabel3.setText("Phone");         jLabel4.setText("Email");         jLabel5.setText("Address");         jTextField1.setText("Jean-Baptiste");         jTextField2.setText("Freymann");         jTextField3.setText("(555) 462-1492");         jTextField4.setText("roukin@acme.com");         jTextArea1.setColumns(15);         jTextArea1.setRows(5);         jTextArea1.setText("462 Park View Drive\n54999 Santa Clara, CA\nUSA");         jScrollPane2.setViewportView(jTextArea1);         org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());         getContentPane().setLayout(layout);         layout.setHorizontalGroup(             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)             .add(layout.createSequentialGroup()                 .addContainerGap()                 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 152, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)                     .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel5)                     .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel4)                     .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel3)                     .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel2)                     .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel1))                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)                     .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)                     .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)                     .add(jTextField3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)                     .add(jTextField4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)                     .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 209, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))                 .addContainerGap())         );         layout.linkSize(new java.awt.Component[] {jScrollPane2, jTextField1, jTextField2, jTextField3, jTextField4}, org.jdesktop.layout.GroupLayout.HORIZONTAL);         layout.setVerticalGroup(             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)             .add(layout.createSequentialGroup()                 .addContainerGap()                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)                     .add(layout.createSequentialGroup()                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)                             .add(jLabel1)                             .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)                             .add(jLabel2)                             .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)                             .add(jLabel3)                             .add(jTextField3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)                             .add(jLabel4)                             .add(jTextField4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)                             .add(jLabel5)                             .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))                     .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 210, Short.MAX_VALUE))                 .addContainerGap())         );         java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();         setBounds((screenSize.width-489)/2, (screenSize.height-266)/2, 489, 266);     }// </editor-fold>//GEN-END:initComponents          /**      * @param args the command line arguments      */     public static void main(String args[]) {         java.awt.EventQueue.invokeLater(new Runnable() {             public void run() {                 new GlassMouseCursor().setVisible(true);             }         });     }          // Variables declaration - do not modify//GEN-BEGIN:variables     // End of variables declaration//GEN-END:variables      } /*  * Copyright (c) 2007, Romain Guy  * All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  *   * Redistributions of source code must retain the above copyright  *     notice, this list of conditions and the following disclaimer.  *   * Redistributions in binary form must reproduce the above  *     copyright notice, this list of conditions and the following  *     disclaimer in the documentation and/or other materials provided  *     with the distribution.  *   * Neither the name of the TimingFramework project nor the names of its  *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */ /**  *  * @author Romain Guy  */ class WatermarkGlassPane extends JComponent {     private BufferedImage image = null;          /** Creates a new instance of WatermarkGlassPane */     public WatermarkGlassPane() {     }          @Override     public boolean contains(int x, int y) {         if (getMouseListeners().length == 0 &&             getMouseMotionListeners().length == 0 &&             getMouseWheelListeners().length == 0 &&             getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) {             if (image == null) {                 return false;             } else {                 int imageX = getWidth() - image.getWidth();                 int imageY = getHeight() - image.getHeight();                                  // if the mouse cursor is on a non-opaque pixel, mouse events                 // are allowed                 int inImageX = x - imageX;                 int inImageY = y - imageY;                                  if (inImageX >= 0 && inImageY >= 0 &&                     inImageX < image.getWidth() && inImageY < image.getHeight()) {                     int color = image.getRGB(inImageX, inImageY);                     return (color >> 24 & 0xFF) > 0;                 }                                  return x > imageX && x < getWidth() &&                        y > imageY && y < getHeight();             }         }         return super.contains(x, y);     }          @Override     protected void paintComponent(Graphics g) {         if (image == null) {             try {                 image = ImageIO.read(getClass().getResource("watermark.png"));             } catch (IOException ex) {                 ex.printStackTrace();             }         }         g.drawImage(image, getWidth() - image.getWidth(),                 getHeight() - image.getHeight(), null);     } }                     Filthy-Rich-Clients-AddImageToGlassPane.zip( 153 k)