Java图形设计和多媒体基础

jopen 9年前

本文主要介绍了Java的图形设计以及多媒体处理,源码作者也做了详细的注释,对于初学者应该不难。详细请看下文。

同心圆效果图:

Java图形设计和多媒体基础

/**     *程序要求:新建一个600*600像素的应用程序窗口,并在窗口中绘制5个不同颜色的同心圆,     *所有圆心都是屏幕的中心点,相邻两个圆直接的半径相差50像素     *效果图如下图所示(颜色随机设置),源程序保存为Ex7_1.java。     *作者:wwj     *日期:2012/4/25     *功能:显示一个有5个不同颜色的同心圆     **/      import javax.swing.*;     import java.awt.*;     import java.awt.Color;     public class Ex7_1 extends JFrame     {         int red,green,blue;         Color color;           public Ex7_1()         {             super("一个有5个不同颜色的同心圆");    //显示窗口名称             setSize(600,600);                      //设置窗口大小             setVisible(true);                      //设置为可见             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭动作           }           public void paint(Graphics g)         {             //第一个圆            red=(int)(Math.random()*255);            green=(int)(Math.random()*255);            blue=(int)(Math.random()*255);            color=new Color(red,green,blue);            g.setColor(color);            g.fillOval(175,175,250,250);            //第二个圆            red=(int)(Math.random()*255);            green=(int)(Math.random()*255);            blue=(int)(Math.random()*255);            color=new Color(red,green,blue);            g.setColor(color);            g.fillOval(200,200,200,200);            //第三个圆            red=(int)(Math.random()*255);            green=(int)(Math.random()*255);            blue=(int)(Math.random()*255);            color=new Color(red,green,blue);            g.setColor(color);            g.fillOval(225,225,150,150);            //第四个圆            red=(int)(Math.random()*255);            green=(int)(Math.random()*255);            blue=(int)(Math.random()*255);            color=new Color(red,green,blue);            g.setColor(color);            g.fillOval(250,250,100,100);            //第五个圆            red=(int)(Math.random()*255);            green=(int)(Math.random()*255);            blue=(int)(Math.random()*255);            color=new Color(red,green,blue);            g.setColor(color);            g.fillOval(275,275,50,50);           }                  public static void main(String[] args)         {             Ex7_1 e = new Ex7_1();              }       }

播放音乐和切换图片的小程序效果图:

Java图形设计和多媒体基础

/**     *程序要求:编写一个Applet的小程序,准备5幅图片和三个音乐文件,绘制到Applet中,     *并增加几个按钮,控制图片的切换、放大、缩小和音乐文件的播放。     *作者:wwj     *日期:2012/4/29     *参考:neicole     *功能:能进行图片和歌曲的选择变换的applet小程序     **/      import javax.swing.*;     import java.awt.*;     import java.awt.event.*;     import java.applet.Applet;     import java.applet.AudioClip;       public class Ex7_2 extends Applet implements ActionListener,ItemListener     {           //创建两个面板         JPanel p1=new JPanel();         JPanel p2=new JPanel();         JPanel p3=new JPanel();         //声音对象         AudioClip[] sound=new AudioClip[3];         int playingSong=0;         //切换图片的按钮         JButton lastPic=new JButton("上一张");         JButton setLarge=new JButton("放大");         JButton setLittle=new JButton("缩小");         JButton nextPic=new JButton("下一张");         //切换歌曲的按钮         JButton lastSound=new JButton("上一首");         JButton play=new JButton("播放");         JButton loop=new JButton("连续");         JButton stop=new JButton("停止");         JButton nextSound=new JButton("下一首");         //曲目下拉列表         JComboBox xx;         String names[]={ "曲目1.wav","曲目2.wav","曲目3.wav"};          //创建画布对象        MyCanvasl showPhotos;           public void init()         {             //窗口布局             this.setLayout(new BorderLayout());               //为图片控制按钮注册监听器             lastPic.addActionListener(this);             setLarge.addActionListener(this);             setLittle.addActionListener(this);             nextPic.addActionListener(this);               //向面板p1添加组件             p1.add(lastPic);             p1.add(setLarge);             p1.add(setLittle);             p1.add(nextPic);             p1.repaint();              //实例化下拉列表对象            xx = new JComboBox(names);            xx.addItemListener(this);              //为控制播放音乐按钮注册监听器            lastSound.addActionListener(this);            play.addActionListener(this);            loop.addActionListener(this);            stop.addActionListener(this);            nextSound.addActionListener(this);              for(int i=0;i<3;i++)             {                sound[i]=getAudioClip(getCodeBase(),"music/"+"曲目"                       +Integer.toString(i+1)+".wav");             }              //向面板p2添加组件             p2.add(xx);             p2.add(lastSound);             p2.add(play);             p2.add(loop);             p2.add(stop);             p2.add(nextSound);             p2.repaint();              showPhotos = new MyCanvasl();            p3.add(showPhotos);             p3.repaint();              //把面板p1和p2分别布置到窗口的北部和南部              add(p1,BorderLayout.NORTH);             add(p2,BorderLayout.SOUTH);             add(p3,BorderLayout.CENTER);               this.repaint();           }           //按钮的事件处理         public void actionPerformed(ActionEvent e)         {              if(e.getSource() == lastPic){                showPhotos.changePhotoShow('P');            }            else if(e.getSource() == nextPic){                showPhotos.changePhotoShow('N');            }            else if(e.getSource() == setLarge){                showPhotos.changePhotoSize('B');            }            else if(e.getSource() == setLittle){                showPhotos.changePhotoSize('S');            }              else if(e.getSource()==lastSound){  //上一首                sound[playingSong].stop();                playingSong=(playingSong-1+3)%3;                xx.setSelectedIndex(playingSong);                sound[playingSong].play();              }            else if(e.getSource()==play){       //按下播放按钮                sound[playingSong].play();            }            else if(e.getSource()==loop){       //按下循环按钮                sound[playingSong].loop();            }            else if(e.getSource()==stop){       //按下停止按钮                sound[playingSong].stop();            }            else{                               //下一首                sound[playingSong].stop();                playingSong=(playingSong+1)%3;                xx.setSelectedIndex(playingSong);                sound[playingSong].play();              }            }           //下拉列表的事件处理         public void itemStateChanged(ItemEvent e)         {               sound[playingSong].stop();             sound[playingSong]=getAudioClip(getCodeBase(),"music/"+xx.getSelectedItem());         }          class MyCanvasl extends Canvas        {              public Image[] img=new Image[5];              int MaxWidth = 600;            int MaxHeight = 500;            int nowImageIndex = 0;            int coordinateX = 0;            int coordinateY = 0;            int currentWidth = MaxWidth;            int currentHeight = MaxHeight;              MyCanvasl(){             setSize(MaxWidth,MaxHeight);             //获取当前目录下的图片             for(int i=0;i<5;i++){                 img[i]=getImage(getCodeBase(),"image/"+Integer.toString(i+1)+".jpg");             }            }              private void changePhotoIndex(int index){                nowImageIndex = index;                changePhotoSize('M');            }              public void changePhotoShow(char command){                if('P' == command){                    changePhotoIndex((nowImageIndex + 5 - 1 ) % 5);                }                else if('N' == command){                    changePhotoIndex((nowImageIndex + 1) % 5);                }            }               public void changePhotoSize(char command){                if ('M' == command){                    currentWidth = MaxWidth;                    currentHeight = MaxHeight;                }                else if ('B' == command){                    if(MaxWidth >= (currentWidth + 100) && MaxHeight >= (currentHeight + 100)){                        currentWidth += 100;                        currentHeight += 100;                    }                }                else if('S' == command){                    if((0 < (currentWidth - 100)) && (0 < (currentHeight - 100))){                        currentWidth = currentWidth - 100;                        currentHeight = currentHeight - 100;                    }                }                coordinateX = (MaxWidth - currentWidth) / 2;                coordinateY = (MaxHeight - currentHeight) / 2;                repaint();            }                //paint方法用来在窗口显示图片         public void paint(Graphics g){               g.drawImage(img[nowImageIndex],coordinateX,coordinateY,currentWidth,currentHeight,this);           }        }     }

来源:巫_1曲待续