亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mediaplayer.java

?? JAVA項目開發實踐-網上范例4: 1:要完成本程序
?? JAVA
字號:
//程序所用到的各種程序包
import java.awt.BorderLayout;
import java.awt.CheckboxMenuItem;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.GainControl;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFrame;

//本程序對應的類;
class MediaPlayer
	extends JFrame
	implements ActionListener, ControllerListener, ItemListener {

	//MediaPlayer類的變量成員的聲明;
	//JMF提供的播放器對象;
	Player player;
	Component vc, cc, gcc;
	GainControl gc;
	//first值用來控制在剛開始程序時顯示一幅歡迎界面;loop用以標記是否循環播放;
	boolean first = true, loop = false;
	//設立一個字符串記錄當前打開文件的路徑
	String currentDirectory;

	MediaPlayer(String title) {
		super(title);

		// 利用一個adapter實現對用戶點擊窗口系統菜單的關閉按鈕 
		// 時的響應; 
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				//調用dispose以執行windowClosed
				dispose();
			}
			public void windowClosed(WindowEvent e) {
				if (player != null)
					player.close();
				System.exit(0);
			}
		});

		//調用設置程序菜單欄的方法成員完成菜單的布置
		setupMenu();

		setSize(400, 400);
		setVisible(true);

	}

	//本方法用以設置程序菜單欄
	public void setupMenu() {

		//設置一個菜單
		Menu f = new Menu("文件");

		//往設置的菜單種添加菜單項
		MenuItem mi = new MenuItem("打開");
		mi.addActionListener(this);
		f.add(mi);
		f.addSeparator();

		CheckboxMenuItem cbmi = new CheckboxMenuItem("循環", false);
		cbmi.addItemListener(this);
		f.add(cbmi);
		f.addSeparator();

		mi = new MenuItem("退出");
		mi.addActionListener(this);
		f.add(mi);

		Menu l = new Menu("播放列表");

		Menu c = new Menu("播放控制");

		MenuItem move = new MenuItem("播放");
		move.addActionListener(this);
		c.add(move);
		c.addSeparator();

		MenuItem pause = new MenuItem("暫停");
		pause.addActionListener(this);
		c.add(pause);
		c.addSeparator();

		MenuItem stop = new MenuItem("停止");
		stop.addActionListener(this);
		c.add(stop);
		c.addSeparator();

		//設置一個菜單欄
		MenuBar mb = new MenuBar();

		//將設置的菜單依次加入程序的菜單欄中去
		mb.add(f);
		mb.add(c);
		mb.add(l);

		//將構造完成的菜單欄交給當前程序的窗口;
		setMenuBar(mb);
	}

	//事件響應成員;捕捉發送到本對象的各種事件;
	public void actionPerformed(ActionEvent e) {

		//設一個字符串用于暫存打開的媒體文件的路徑;
		String cufile , selcectfile;

		if (e.getActionCommand().equals("退出")) {
			// 調用dispose以便執行windowClosed 
			dispose();
			return;
		}

		//次事件表明用戶選擇了"播放"菜單命令;
		//如果當前有一個文件可以播放則執行播放命令;
		if (e.getActionCommand().equals("播放")) {
			if (player != null) {
				player.start();
			}
			return;
		}

		//如果當前正在播放某一文件,則執行暫停;
		if (e.getActionCommand().equals("暫停")) {

			if (player != null) {
				player.stop();
			}
			return;
		}

		//次事件表明用戶選擇了"播放"菜單命令;
		//如果當前有一個文件可以播放則執行播放命令;
		if (e.getActionCommand().equals("停止")) {
			if (player != null) {
				player.stop();
				player.setMediaTime(new Time(0));
			}
			return;
		}

		//用戶選擇要播放的媒體文件
		if (e.getActionCommand().equals("打開")) {

			FileDialog fd = new FileDialog(this, "打開媒體文件", FileDialog.LOAD);
			fd.setDirectory(currentDirectory);
			fd.show();

			// 如果用戶放棄選擇文件,則返回 
			if (fd.getFile() == null)
				return;

			//保存了所選文件的名稱及其全路徑名稱已被稍后使用
			//同時設置當前文件夾路徑
			selcectfile = fd.getFile();
			currentDirectory = fd.getDirectory();
			cufile = currentDirectory + selcectfile;

			//將用戶選擇的文件作為一個菜單項加入播放列表該菜單項"名為"該文件名;
			//被點擊后給出的命令串是該文件的全路徑名
			MenuItem mi = new MenuItem(selcectfile);
			mi.setActionCommand(cufile);
			MenuBar mb = getMenuBar();
			Menu m = mb.getMenu(2);
			mi.addActionListener(this);
			m.add(mi);

		} else {
			//程序邏輯運行到此表示用戶選擇了一個"播放列表"中的媒體文件
			//此時可以通過如下動作獲得該文件的全路徑名;
			cufile = e.getActionCommand();
			selcectfile = cufile;
		}

		//如果已存在一個播放器,則先將其關閉,稍后重新創建
		//創建播放器時需要捕捉一些異常;
		if (player != null)
			player.close();
		try {
			player = Manager.createPlayer(new MediaLocator("file:" + cufile));

		} catch (java.io.IOException e2) {
			System.out.println(e2);
			return;
		} catch (NoPlayerException e2) {
			System.out.println("不能找到播放器.");
			return;
		}
		if (player == null) {
			System.out.println("無法創建播放器.");
			return;
		}

		first = false;
		setTitle(selcectfile);
		//設置處理播放控制器實際的對象;
		player.addControllerListener(this);
		player.prefetch();
	}

	//因為實現了"ControllerListener"接口,本方法用于處理媒體播放器傳來的事件;
	public void controllerUpdate(ControllerEvent e) {

		Container tainer = getContentPane();

		// 調用player.close()時ControllerClosedEvent事件出現。 
		// 如果存在視覺部件,則該部件應該拆除(為一致起見, 
		// 我們對控制面板部件也執行同樣的操作下一次需要時再構造)
		if (e instanceof ControllerClosedEvent) {
			if (vc != null) {
				remove(vc);
				vc = null;
			}
			if (cc != null) {
				remove(cc);
				cc = null;
			}
			return;
		}

		//在播放結束時,將播放指針置為文件之首,如果設定了循環播放,則再次啟動播放器;
		if (e instanceof EndOfMediaEvent) {
			player.setMediaTime(new Time(0));
			if (loop) {
				player.start();
			}
			return;
		}

		//PrefetchCompleteEvent事件發生后調用start,正式啟動播放
		if (e instanceof PrefetchCompleteEvent) {
			player.start();
			return;
		}

		//本事件表示由于用于播放的資源已經確定;此時要將媒體的圖形conmopnent
		//(如果有)顯示出來,同時將播放器player的控制器顯示到窗口里;
		if (e instanceof RealizeCompleteEvent) {
			//如果媒體中有圖像,將對應圖像component載入窗體;
			vc = player.getVisualComponent();
			if (vc != null)
				tainer.add(vc, BorderLayout.CENTER);

			//將對應控制器component載入窗體;
			cc = player.getControlPanelComponent();
			cc.setBackground(Color.BLUE);
			if (cc != null)
				tainer.add(cc, BorderLayout.SOUTH);

			//有一些特殊媒體在播放時提供另外的控制手段,將該控制器一并加入窗口;
			gc = player.getGainControl();
			gcc = gc.getControlComponent();
			if (gcc != null)
				tainer.add(gcc, BorderLayout.NORTH);

			//根據媒體文件中是否有圖像,設定相應的窗口大小	
			if (vc != null) {
				pack();
				return;
			} else {

				setSize(300, 75);
				setVisible(true);
				return;
			}

		}

	}

	//菜單狀態改變事件的響應函數;
	public void itemStateChanged(ItemEvent e) {
		loop = !loop;
	}

	//不執行背景清除操作,以免控制面板部件閃爍 
	//同時使得本程序在用鼠標拖動窗口時存在一些沒有及時重繪的情況,有待改進
	public void update(Graphics g) {
		paint(g);
	}

	//本類的main函數,其中構造了本類的一個實例;
	public static void main(String[] args) {
		new MediaPlayer("簡單媒體播放器");
	}

	public void paint(Graphics g) {
		// 調用超類Frame的paint()方法,該paint()方法將調用Frame包含的各個容器 
		// 和部件(包括控制面板部件)的paint()方法。 
		super.paint(g);

		//以下代碼實現了在開啟程序之初顯示歡迎界面	
		if (first) {
			int w = getSize().width;
			int h = getSize().height;
			g.setColor(Color.magenta);
			g.fillRect(0, 0, w, h);
			Font f = new Font("DialogInput", Font.BOLD, 18);
			g.setFont(f);
			FontMetrics fm = g.getFontMetrics();
			int swidth = fm.stringWidth(" 簡單媒體播放器 ");
			g.setColor(Color.white);
			g.drawString(
				" 簡單媒體播放器 ",
				(w - swidth) / 2,
				(h + getInsets().top) / 2);
		}
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美亚洲国产另类| 亚洲欧洲一区二区三区| 国产欧美va欧美不卡在线| 亚洲精品成人天堂一二三| 美女网站视频久久| 欧美日韩精品久久久| 亚洲欧洲日产国产综合网| 九色综合狠狠综合久久| 精品视频在线免费观看| 国产精品成人免费| 激情文学综合插| 欧美精品少妇一区二区三区| 亚洲欧美一区二区久久| 国v精品久久久网| 精品国产一区二区三区av性色| 亚洲小少妇裸体bbw| 99久久免费视频.com| 国产欧美日韩精品a在线观看| 看片的网站亚洲| 在线电影一区二区三区| 亚洲精品免费在线观看| 成人免费毛片嘿嘿连载视频| 久久青草欧美一区二区三区| 男人的j进女人的j一区| 51精品视频一区二区三区| 一级做a爱片久久| 色婷婷综合久久久久中文一区二区| 欧美国产综合一区二区| 国产91高潮流白浆在线麻豆| 久久蜜桃av一区精品变态类天堂| 久久超级碰视频| 精品国产精品一区二区夜夜嗨 | 久久久久久久久久美女| 久久国产尿小便嘘嘘| 精品久久久久香蕉网| 国内一区二区在线| 久久久久高清精品| 丰满少妇在线播放bd日韩电影| 久久久久久日产精品| 国产成人精品免费一区二区| 亚洲国产经典视频| 99久久婷婷国产综合精品| 一区二区三区中文字幕| 欧美性猛交xxxx乱大交退制版| 亚洲一二三区不卡| 欧美精品免费视频| 久久99国产精品久久99果冻传媒| 精品欧美一区二区久久| 国产麻豆欧美日韩一区| 国产精品的网站| 欧美色窝79yyyycom| 蜜臀精品一区二区三区在线观看 | 麻豆精品视频在线| 国产三级三级三级精品8ⅰ区| 国产成人午夜视频| 有码一区二区三区| 欧美一区二区女人| 国产999精品久久| 一区二区三区久久久| 欧美一区二区日韩| 99久久精品情趣| 奇米综合一区二区三区精品视频| 久久一二三国产| 色综合久久久久久久久久久| 琪琪一区二区三区| 亚洲欧美在线视频| 欧美一区二区视频在线观看2020| 国产原创一区二区三区| 一区二区激情视频| 久久久欧美精品sm网站| 色综合天天综合色综合av| 精品在线播放午夜| 亚洲福利视频一区| 欧美高清在线一区| 日韩亚洲欧美一区二区三区| 91日韩精品一区| 久草这里只有精品视频| 一区二区国产盗摄色噜噜| 国产午夜精品久久| 91精品国产手机| 一本色道亚洲精品aⅴ| 国产在线一区观看| 午夜免费久久看| 亚洲欧洲综合另类| 欧美国产精品一区二区三区| 欧美一卡二卡在线观看| 欧美在线观看禁18| 成人精品免费网站| 国产在线一区观看| 日韩精品91亚洲二区在线观看 | 91丝袜国产在线播放| 美女脱光内衣内裤视频久久影院| 亚洲美女一区二区三区| 国产欧美综合在线| 精品日韩在线观看| 日韩丝袜情趣美女图片| 欧美丝袜丝交足nylons| 91久久精品日日躁夜夜躁欧美| 国产精品一色哟哟哟| 蜜桃视频第一区免费观看| 丝袜美腿亚洲一区二区图片| 亚洲乱码国产乱码精品精小说| 国产免费久久精品| 精品国产一二三区| 欧美tickling挠脚心丨vk| 91精品久久久久久蜜臀| 欧美日韩mp4| 欧美日韩国产一级| 欧美老肥妇做.爰bbww| 欧美性大战久久| 欧美性猛交xxxx黑人交| 欧美在线视频日韩| 欧美系列在线观看| 欧美日韩中字一区| 欧美一区二区女人| www久久精品| 亚洲精品一区二区三区蜜桃下载| 欧美电影免费提供在线观看| 欧美一区二区三区免费大片| 精品日韩一区二区| 国产视频一区在线播放| 中文字幕精品—区二区四季| 久久精品欧美一区二区三区不卡 | 国产suv精品一区二区883| 成人综合在线视频| 99久久综合国产精品| jizz一区二区| 欧美日韩一区小说| 日韩欧美国产精品| 久久精品视频网| 亚洲精选一二三| 日韩中文字幕区一区有砖一区 | 看电影不卡的网站| 国产精品自产自拍| aa级大片欧美| 欧美日韩1234| 久久夜色精品国产噜噜av| 国产精品美女www爽爽爽| 亚洲影院在线观看| 久久精品国产999大香线蕉| 成人在线综合网| 欧美视频日韩视频在线观看| 欧美电影免费观看高清完整版在| 精品处破学生在线二十三| 国产精品电影院| 日本系列欧美系列| 成人中文字幕电影| 在线综合亚洲欧美在线视频| 久久久久久黄色| 亚洲最新在线观看| 国产美女主播视频一区| 色综合一区二区| 欧美精品一区二区三区在线| 亚洲免费观看在线观看| 麻豆精品一区二区综合av| 91丨九色porny丨蝌蚪| 精品日韩欧美一区二区| 亚洲综合小说图片| 国产大陆精品国产| 欧美日本高清视频在线观看| 国产亚洲精品资源在线26u| 亚洲国产欧美日韩另类综合| 国产成人夜色高潮福利影视| 欧美乱熟臀69xxxxxx| 国产精品久久久久婷婷| 蜜臀久久99精品久久久画质超高清| www.亚洲色图.com| 久久久精品一品道一区| 丝袜亚洲另类丝袜在线| 色欧美乱欧美15图片| 日本一区二区动态图| 久久精品国产99国产| 欧美日韩一区在线| 亚洲欧美激情在线| 豆国产96在线|亚洲| 日韩精品一区二区在线| 亚洲午夜在线观看视频在线| av在线播放一区二区三区| 精品对白一区国产伦| 蜜臀av一区二区| 欧美丰满高潮xxxx喷水动漫| 伊人一区二区三区| 99视频精品在线| 亚洲国产精品成人综合| 国产一区二区影院| 日韩三级av在线播放| 奇米影视一区二区三区| 欧美日韩一区二区三区在线看 | 国产日本欧美一区二区| 免费在线观看精品| 欧美日本一区二区在线观看| 亚洲精品视频在线观看网站| 成人免费观看视频| 国产丝袜美腿一区二区三区| 国产一区二区三区黄视频| 欧美精品一区二区三区一线天视频| 毛片一区二区三区| 精品卡一卡二卡三卡四在线| 精品一区二区三区影院在线午夜 | 免费欧美在线视频|