Java tutorial
/* * Copyright (c) 1995 - 2008 Sun Microsystems, Inc. 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 Sun Microsystems 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.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; import java.util.Random; class JumbledImage extends Component { private int numlocs = 2; private int numcells = numlocs * numlocs; private int[] cells; private BufferedImage bi; int w, h, cw, ch; public JumbledImage(URL imageSrc) { try { bi = ImageIO.read(imageSrc); w = bi.getWidth(null); h = bi.getHeight(null); } catch (IOException e) { System.out.println("Image could not be read"); System.exit(1); } cw = w / numlocs; ch = h / numlocs; cells = new int[numcells]; for (int i = 0; i < numcells; i++) { cells[i] = i; } } void jumble() { Random rand = new Random(); int ri; for (int i = 0; i < numcells; i++) { while ((ri = rand.nextInt(numlocs)) == i) ; int tmp = cells[i]; cells[i] = cells[ri]; cells[ri] = tmp; } } public Dimension getPreferredSize() { return new Dimension(w, h); } public void paint(Graphics g) { int dx, dy; for (int x = 0; x < numlocs; x++) { int sx = x * cw; for (int y = 0; y < numlocs; y++) { int sy = y * ch; int cell = cells[x * numlocs + y]; dx = (cell / numlocs) * cw; dy = (cell % numlocs) * ch; g.drawImage(bi, dx, dy, dx + cw, dy + ch, sx, sy, sx + cw, sy + ch, null); } } } } public class JumbledImageApplet extends JApplet { static String imageFileName = "duke_skateboard.jpg"; private URL imageSrc; private JumbledImage jumbledImage; public JumbledImageApplet() { } public JumbledImageApplet(URL imageSrc) { this.imageSrc = imageSrc; } public void init() { try { imageSrc = new URL(getCodeBase(), imageFileName); } catch (MalformedURLException e) { } buildUI(); } public void buildUI() { final JumbledImage ji = new JumbledImage(imageSrc); add("Center", ji); JButton jumbleButton = new JButton("Jumble"); jumbleButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JButton b = (JButton) e.getSource(); ji.jumble(); ji.repaint(); }; }); Dimension jumbleSize = ji.getPreferredSize(); resize(jumbleSize.width, jumbleSize.height + 40); add("South", jumbleButton); } public static void main(String s[]) { JFrame f = new JFrame("Jumbled Image"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); URL imageSrc = null; try { imageSrc = ((new File(imageFileName)).toURI()).toURL(); } catch (MalformedURLException e) { } JumbledImageApplet jumbler = new JumbledImageApplet(imageSrc); jumbler.buildUI(); f.add("Center", jumbler); f.pack(); f.setVisible(true); } }