Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 

Books Demo Java code example - Click here to copy ->>>

   Can't find what you're looking for? Try our search:

Really working examples categorized by API, package, class. You can compile and run our examples right away! Not from source code for Java projects - only working examples! Copy, compile and run!

Code:

 
 import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

import javax.swing.*;

import javax.media.j3d.*;
import javax.vecmath.*;

import java.util.*;

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.universe.*;

public class BooksDemo extends JFrame
{
    private static final int CANVAS3D_WIDTH  = 400;
    private static final int CANVAS3D_HEIGHT = 400;

    private boolean front = true;
    private JPanel centerPanel = new JPanel();
    private Canvas3D c3d;
    private RotationInterpolator rotator1;
    private Alpha rotor1Alpha;
    private com.sun.j3d.utils.geometry.Box book;
    private HashMap textures = new HashMap(6);

    public BooksDemo()
    {
        super("AmazonPick");

        JButton cover1 = UIHelper.createButton("", "cover1_small_button", true);
        cover1.addActionListener(new CoverSwitcher("cover1"));
        JButton cover2 = UIHelper.createButton("", "cover2_small_button", true);
        cover2.addActionListener(new CoverSwitcher("cover2"));
        JButton cover3 = UIHelper.createButton("", "cover3_small_button", true);
        cover3.addActionListener(new CoverSwitcher("cover3"));

        JPanel buttons = new JPanel();
        buttons.add(cover1);
        buttons.add(cover2);
        buttons.add(cover3);
        buttons.setOpaque(false);

        c3d = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
        c3d.setSize(CANVAS3D_WIDTH, CANVAS3D_HEIGHT);

        centerPanel.add(c3d);
        centerPanel.setOpaque(false);

        this.setContentPane(new GradientPanel());
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(centerPanel, BorderLayout.CENTER);
        this.getContentPane().add(buttons, BorderLayout.SOUTH);

        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        fileMenu.add(new JMenuItem("New Search..."));
        fileMenu.add(new JMenuItem("Save Search..."));
        fileMenu.addSeparator();
        fileMenu.add(new JMenuItem("Quit"));
        menuBar.add(fileMenu);
        this.setJMenuBar(menuBar);

        this.pack();
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        UIHelper.centerOnScreen(this);
    }

    private boolean isBookShowingFront()
    {
      return front;
    }

    private void rotateBook()
    {
        if (!isBookShowingFront())
        {
            rotator1.setMinimumAngle((float) Math.PI * 1.0f);
            rotator1.setMaximumAngle(0.0f);
        } else {
            rotator1.setMinimumAngle(0.0f);
            rotator1.setMaximumAngle((float) Math.PI * 1.0f);
        }

        front = !front;
        rotor1Alpha.setStartTime(System.currentTimeMillis());
    }

    private class CoverSwitcher implements ActionListener
    {
        private String coverName;

        CoverSwitcher(String coverName)
        {
            this.coverName = coverName;
        }

        public void actionPerformed(ActionEvent evt)
        {
            book.getShape(isBookShowingFront() ? book.BACK  : book.FRONT).setAppearance((Appearance) textures.get(coverName));
            rotateBook();
        }
    }

    protected Background createBackground()
    {
        BufferedImage image = new BufferedImage(getContentPane().getWidth(),
                                                getContentPane().getHeight(),
                                                BufferedImage.TYPE_INT_RGB);
        getContentPane().paint(image.getGraphics());

        BufferedImage subImage = new BufferedImage(CANVAS3D_WIDTH,
                                                   CANVAS3D_HEIGHT,
                                                   BufferedImage.TYPE_INT_RGB);
        Graphics2D subGraphics = (Graphics2D) subImage.getGraphics();
        subGraphics.drawImage(image, null, -c3d.getX(), -c3d.getY());

        Background bg = new Background(new ImageComponent2D(ImageComponent2D.FORMAT_RGB, subImage));
        BoundingSphere bounds = new BoundingSphere();
        bounds.setRadius(100.0);
        bg.setApplicationBounds(bounds);

        return bg;
    }

    public void createScene()
    {
        BranchGroup objRoot = new BranchGroup();
        objRoot.addChild(createBackground());

        TransformGroup objTg = new TransformGroup();
        objTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

        BoundingSphere bounds = new BoundingSphere();
        bounds.setRadius(100.0);

        Transform3D yAxis = new Transform3D();
        rotor1Alpha = new Alpha(1, 400);
        rotator1 = new RotationInterpolator(rotor1Alpha, objTg, yAxis, (float) Math.PI * 1.0f, (float) Math.PI * 2.0f);
        rotator1.setSchedulingBounds(bounds);

        textures.put("pages_top", createTexture("pages_top.jpg"));
        textures.put("pages",     createTexture("amazon.jpg"));
        textures.put("amazon",    createTexture("amazon.jpg"));
        textures.put("cover1",    createTexture("cover1.jpg"));
        textures.put("cover2",    createTexture("cover2.jpg"));
        textures.put("cover3",    createTexture("cover3.jpg"));

        book = new com.sun.j3d.utils.geometry.Box(0.5f, 0.7f, 0.15f, com.sun.j3d.utils.geometry.Box.GENERATE_TEXTURE_COORDS, new Appearance());
        book.getShape(book.TOP).setAppearance((Appearance) textures.get("pages_top"));
        book.getShape(book.RIGHT).setAppearance((Appearance) textures.get("pages"));
        book.getShape(book.LEFT).setAppearance((Appearance) textures.get("amazon"));
        book.getShape(book.FRONT).setAppearance((Appearance) textures.get("cover1"));

        book.getShape(book.BACK).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);
        book.getShape(book.FRONT).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);

        objTg.addChild(book);
        objTg.addChild(rotator1);

        Transform3D spin = new Transform3D();
        Transform3D tempspin = new Transform3D();

        spin.rotX(Math.PI / 8.0d);
        tempspin.rotY(Math.PI / 7.0d);
        spin.mul(tempspin);

        TransformGroup objTrans = new TransformGroup(spin);
        objTrans.addChild(objTg);

        objRoot.addChild(objTrans);

        SimpleUniverse u = new SimpleUniverse(c3d);
        u.getViewingPlatform().setNominalViewingTransform();
        u.addBranchGraph(objRoot);

        View view = u.getViewer().getView();
        view.setSceneAntialiasingEnable(true);
    }

    private Appearance createTexture(String fileName)
    {
        Image sourceImage = UIHelper.readImage(fileName);
        if (sourceImage == null)
          System.out.println("Image could not be loaded from " + fileName);

        TextureLoader loader = new TextureLoader(sourceImage, this);
        ImageComponent2D image = loader.getImage();

        if (image == null)
          System.out.println("Texture could not be loaded from " + fileName);

        Texture2D texture = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA, image.getWidth(), image.getHeight());
        texture.setImage(0, image);
        texture.setEnable(true);
        texture.setMagFilter(Texture.BASE_LEVEL_LINEAR);
        texture.setMinFilter(Texture.BASE_LEVEL_LINEAR);

        Appearance appearance = new Appearance();
        PolygonAttributes polyAttributes = new PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE, 0f);
        appearance.setPolygonAttributes(polyAttributes);
        appearance.setTexture(texture);

        TextureAttributes textureAttributes = new TextureAttributes();
        appearance.setTextureAttributes(textureAttributes);

        return appearance;
    }

    private static class GradientPanel extends JPanel
    {
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            if (!isOpaque())
            {
                return;
            }

            int width  = getWidth();
            int height = getHeight();

            Graphics2D g2 = (Graphics2D) g;

            Paint storedPaint = g2.getPaint();
            g2.setPaint(new GradientPaint(0, 0, Color.WHITE, width, height, new Color(200, 200, 200)));
            g2.fillRect(0, 0, width, height);
            g2.setPaint(storedPaint);
        }
    }

    public static void main(String argv[])
    {
        final BooksDemo xframe = new BooksDemo();
        xframe.setVisible(true);
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                xframe.createScene();
            }
        });
    }
}

/*   Swing Hacks
 *   Tips and Tools for Killer GUIs
 * By Joshua Marinacci, Chris Adamson
 *   First Edition June 2005
 *   Series: Hacks
 *   ISBN: 0-596-00907-0
 *   http://www.oreilly.com/catalog/swinghks/
 */

 
 



References.

The list of classes which were used on this page you can find below. The links to Java API contain official SUN documentation about all used classes.




[ Go Back ]



Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy