⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booksdemo.java

📁 oraily的Swing hacks code
💻 JAVA
字号:
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();            }        });    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -