Java设计图形与多媒体处理

 更新时间:2015年09月23日 14:26:34   投稿:lijiao  
本文主要介绍了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();    
   } 
 
 } 

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

/** 
 *程序要求:编写一个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); 
 
   } 
  } 
 } 

 以上就是关于Java的图形设计以及多媒体处理的全部内容,希望对大家的学习有所帮助。

相关文章

  • 解决mybatis #{}无法自动添加引号的错误

    解决mybatis #{}无法自动添加引号的错误

    这篇文章主要介绍了解决mybatis #{}无法自动添加引号的错误,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 使用@Validated和@Valid 解决list校验的问题

    使用@Validated和@Valid 解决list校验的问题

    这篇文章主要介绍了使用@Validated和@Valid 解决list校验的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • JDK12的新特性之teeing collectors

    JDK12的新特性之teeing collectors

    这篇文章主要介绍了JDK12的新特性之teeing collectors的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 微服务架构设计RocketMQ基础及环境整合

    微服务架构设计RocketMQ基础及环境整合

    这篇文章主要介绍了微服务架构设计入门RocketMQ的基础及环境整合实现步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 全面解释java中StringBuilder、StringBuffer、String类之间的关系

    全面解释java中StringBuilder、StringBuffer、String类之间的关系

    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似
    2013-01-01
  • IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    本文使用的开发工具是idea,使用的是springboot框架开发的项目,配置热部署,可以提高开发效率,文中通过图文介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • idea2020.2卡死在reading maven projects

    idea2020.2卡死在reading maven projects

    这篇文章主要介绍了idea2020.2卡死在reading maven projects,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java杂谈之类和对象 封装 构造方法以及代码块详解

    Java杂谈之类和对象 封装 构造方法以及代码块详解

    在现实世界中,真实存在的东西,比如吉普车,卡丁车,货车。我们在认识它的时候就会在脑海中将它抽象为一种类别叫做车。 好了,那再计算机世界中,它同样的也会这样做
    2021-09-09
  • Jenkins安装以及邮件配置详解

    Jenkins安装以及邮件配置详解

    这篇文章主要介绍了Jenkins安装以及邮件配置相关问题,并通过图文给大家做了详细讲解步骤,需要的朋友参考下吧。
    2017-12-12
  • android中判断服务或者进程是否存在实例

    android中判断服务或者进程是否存在实例

    本篇文章主要介绍了android中判断服务或者进程是否存在实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论