/* * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */ import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.UIManager; import javax.swing.filechooser.FileFilter; import org.jdesktop.jdic.misc.Wallpaper; import org.jdesktop.jdic.misc.WallpaperFactory; /** * This will demonstrate the JDIC API of setting of a desktop background * wallpaper. * * @author George Zhang * @author Carl Dea * */ public class WallpaperDemo extends JPanel { JPanel jWallpaperPanel = new JPanel(); JPanel fileChooserPanel = new JPanel(); JFileChooser jFileChooser = new JFileChooser(); JPanel jStylePanel = new JPanel(); JLabel jStyleLabel = new JLabel("Style:"); WallpaperMode[] wallpaperStyles = { new WallpaperMode("Stretch", "The background image will be stretched.", Wallpaper.STRETCH), new WallpaperMode("Center", "The background image will be centered.", Wallpaper.CENTER), new WallpaperMode("Tile", "The background image will be tiled.", Wallpaper.TILE) }; JComboBox jStyleComboBox = new JComboBox(wallpaperStyles); JPanel jBottomPanel = new JPanel(); JPanel jButtonPanel = new JPanel(); JButton jSetWallpaperButton = new JButton(); JButton jCancelButton = new JButton(); File selectedFile; public WallpaperDemo() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { } JFrame frame = new JFrame("JDIC Wallpaper API Demo - Set desktop background wallpaper"); Container contentPane = frame.getContentPane(); contentPane.setLayout(new GridLayout(1, 1)); contentPane.add(new WallpaperDemo()); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } private void jbInit() throws Exception { jFileChooser.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); jFileChooser.setControlButtonsAreShown(false); jFileChooser.addChoosableFileFilter(new WallpaperFilter()); jFileChooser.addPropertyChangeListener(new WallpaperDemo_jFileChooser_propertyChangeAdapter(this)); jStylePanel.setLayout(new GridLayout(14, 1)); // Here, it aligns the top of jStylePanel with the top of the file // list box in the jFileChooser. jStylePanel.setBorder(BorderFactory.createEmptyBorder(44, 10, 0, 10)); jStylePanel.add(jStyleLabel, null); jStylePanel.add(jStyleComboBox, null); jStyleComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String style = jStyleComboBox.getSelectedItem().toString(); jSetWallpaperButton.setActionCommand(style); if (style.equalsIgnoreCase("stretch")) { jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[0].getDescription()); } else if (style.equalsIgnoreCase("center")) { jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[1].getDescription()); } else if (style.equalsIgnoreCase("tile")) { jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[2].getDescription()); } } }); fileChooserPanel.setLayout(new BorderLayout()); fileChooserPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); fileChooserPanel.add(jFileChooser, BorderLayout.CENTER); jWallpaperPanel.setLayout(new BorderLayout()); jWallpaperPanel.add(fileChooserPanel, BorderLayout.CENTER); jWallpaperPanel.add(jStylePanel, BorderLayout.EAST); jSetWallpaperButton.setEnabled(false); jSetWallpaperButton.setText("Set Wallpaper"); jSetWallpaperButton.setActionCommand(wallpaperStyles[0].toString()); jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[0].getDescription()); jSetWallpaperButton.addActionListener(new WallpaperDemo_jSetWallpaperButton_actionAdapter(this)); jCancelButton.setText("Cancel"); jCancelButton.addActionListener(new WallpaperDemo_jCancelButton_actionAdapter(this)); jButtonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); jButtonPanel.setLayout(new GridLayout(1, 2)); jButtonPanel.add(Box.createHorizontalGlue()); jButtonPanel.add(jSetWallpaperButton); jButtonPanel.add(jCancelButton); jBottomPanel.setLayout(new BorderLayout()); jBottomPanel.add(jButtonPanel, BorderLayout.EAST); // Center the application. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setPreferredSize(new Dimension((screenSize.width * 7) / 10, (screenSize.height * 6) / 10)); this.setLayout(new BorderLayout()); this.add(jWallpaperPanel, BorderLayout.NORTH); this.add(new JSeparator(), BorderLayout.CENTER); this.add(jBottomPanel, BorderLayout.SOUTH); } void jSetWallpaperButton_actionPerformed(ActionEvent e) { // below code needs to be updated to handle the selected style. Wallpaper wallpaper = WallpaperFactory.createWallpaper(); int mode = 0; if (e.getActionCommand().equalsIgnoreCase("stretch")) { mode = wallpaperStyles[0].getModeId(); jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[0].getDescription()); } else if (e.getActionCommand().equalsIgnoreCase("center")) { mode = wallpaperStyles[1].getModeId(); jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[1].getDescription()); } else if (e.getActionCommand().equalsIgnoreCase("tile")) { mode = wallpaperStyles[2].getModeId(); jSetWallpaperButton.setToolTipText("Click to set desktop wallpaper. " + wallpaperStyles[2].getDescription()); } wallpaper.setBackground(selectedFile.getAbsolutePath(), mode); } void jCancelButton_actionPerformed(ActionEvent e) { System.exit(0); } void jFileChooser_propertyChange(PropertyChangeEvent e) { if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(e.getPropertyName())) { jSetWallpaperButton.setEnabled(false); } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(e.getPropertyName())) { selectedFile = jFileChooser.getSelectedFile(); if (selectedFile != null) { jSetWallpaperButton.setEnabled(true); } else { jSetWallpaperButton.setEnabled(false); } } } } class WallpaperDemo_jSetWallpaperButton_actionAdapter implements java.awt.event.ActionListener { WallpaperDemo adaptee; WallpaperDemo_jSetWallpaperButton_actionAdapter(WallpaperDemo adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jSetWallpaperButton_actionPerformed(e); } } class WallpaperDemo_jCancelButton_actionAdapter implements java.awt.event.ActionListener { WallpaperDemo adaptee; WallpaperDemo_jCancelButton_actionAdapter(WallpaperDemo adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jCancelButton_actionPerformed(e); } } class WallpaperDemo_jFileChooser_propertyChangeAdapter implements java.beans.PropertyChangeListener { WallpaperDemo adaptee; WallpaperDemo_jFileChooser_propertyChangeAdapter(WallpaperDemo adaptee) { this.adaptee = adaptee; } public void propertyChange(PropertyChangeEvent e) { adaptee.jFileChooser_propertyChange(e); } } /** * Filter the valid background wallpaper files. */ class WallpaperFilter extends FileFilter { // Accept all directories and all bmp, gif, jpg, jpeg, dib, png files, // which should be valid for a wallpaper file. public boolean accept(File f) { if (f.isDirectory()) { return true; } String lowerFileName = f.getName().toLowerCase(); // Check the file extension. if (lowerFileName.endsWith("bmp") || lowerFileName.endsWith("gif") || lowerFileName.endsWith("jpg") || lowerFileName.endsWith("jpeg") || lowerFileName.endsWith("dib") || lowerFileName.endsWith("png")) { return true; } else { return false; } } // The description of this filter. public String getDescription() { return "Background Files (*.bmp;*.gif;*.jpg;*.jpeg;*.dib;*.png)"; } } class WallpaperMode { String _displayName; String _description; int _modeId; public WallpaperMode () { } public WallpaperMode (String name, String desc, int mode) { setDisplayName(name); setDescription(desc); setModeId(mode); } public String getDescription() { return _description; } public void setDescription(String description) { _description = description; } public String getDisplayName() { return _displayName; } public void setDisplayName(String displayName) { _displayName = displayName; } public int getModeId() { return _modeId; } public void setModeId(int modeId) { _modeId = modeId; } public String toString() { return getDisplayName(); } }