范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java运用jnavlcj实现音乐和视频的播放器1主界面设计

  白雨青工作站发文地址:Java运用jna、vlcj实现音乐和视频的播放器1-主界面设计-白雨青工作站
  一、播放器主框架  public class MainFrame { 	public JFrame frame; 	public int width = 100;     public int height = 350; 	public MainFrame(){ 		frame = new JFrame(); 		frame.setResizable(false);         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         frame.setSize(height,width);         frame.setLocationRelativeTo(null);         frame.setLayout(null);         // 去掉窗口的装饰          frame.setUndecorated(true);         //采用指定的窗口装饰风格         frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);  		//设置窗体圆角,最后两个参数分别为圆角的宽度、高度数值,一般这两个数值都是一样的 		AWTUtilities.setWindowShape(frame, 				new RoundRectangle2D.Double(0.0D, 0.0D, frame.getWidth(), frame.getHeight(), 20.0D, 20.0D)); 		//设置背景颜色,记住一定要修改frame.getContentPane()的颜色,因为我们看到的都是这个的颜色而并不是frame的颜色         frame.getContentPane().setBackground(Color.LIGHT_GRAY);                  frame.setVisible(true); 	} }
  效果:
  二、绘制自定义窗口,添加最小化和关闭按钮
  1、自定义一个button类继承JButton  import javax.swing.JButton;   public class DIYButton extends JButton{   	public DIYButton() { 		super(); 		// TODO Auto-generated constructor stub 		// 不绘制边框         setBorderPainted(false);         //按钮设置为透明,这样就不会挡着后面的背景         setContentAreaFilled(false); 	} }
  2、自定义一个panel,里面存放logo,窗口名称,最小化,关闭按钮  import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;   import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;   public class MainFrameBar extends JPanel implements ActionListener{ 	 	private JLabel titleLabel; 	private DIYButton win_btn_logo; 	private DIYButton win_btn_min; 	private DIYButton win_btn_close; 	 	public MainFrameBar(){ 		win_btn_logo = new DIYButton(); 		win_btn_logo.setBounds(10,5,16,16); 		win_btn_logo.setIcon(new ImageIcon("icon/win_btn_logo.png")); 		 		titleLabel = new JLabel(); 		titleLabel.setBounds(28,3,80,20); 			 		win_btn_min = new DIYButton(); 		win_btn_min.setBounds(300,5,16,16); 		win_btn_min.setIcon(new ImageIcon("icon/win_btn_min.png")); 		         win_btn_close = new DIYButton();         win_btn_close.setBounds(320,5,16,16);         win_btn_close.setIcon(new ImageIcon("icon/win_btn_close.png"));	          		setBackground(Color.gray); 	    setLayout(null); 	     	    add(titleLabel); 	    add(win_btn_logo); 	    add(win_btn_min); 	    add(win_btn_close); 	     	    win_btn_min.setActionCommand("min");  	    win_btn_close.setActionCommand("close");  	     	    win_btn_min.addActionListener(this); 	    win_btn_close.addActionListener(this); 	} 	public void actionPerformed(ActionEvent e) { 		if(e.getActionCommand() == "min")         {         	MainFrame.getFrame().setExtendedState(JFrame.ICONIFIED);          }             if(e.getActionCommand() == "close")         {             System.exit(0);         } 	} 	public JLabel getTitleLabel() { 		return titleLabel; 	} 	public void setTitleLabel(JLabel titleLabel) { 		this.titleLabel = titleLabel; 	} 	public DIYButton getWin_btn_logo() { 		return win_btn_logo; 	} 	public void setWin_btn_logo(DIYButton winBtnLogo) { 		win_btn_logo = winBtnLogo; 	} 	public DIYButton getWin_btn_min() { 		return win_btn_min; 	} 	public void setWin_btn_min(DIYButton winBtnMin) { 		win_btn_min = winBtnMin; 	} 	public DIYButton getWin_btn_close() { 		return win_btn_close; 	} 	public void setWin_btn_close(DIYButton winBtnClose) { 		win_btn_close = winBtnClose; 	} }
  效果:
  三、绘制中间区域
  1、自定义播放器进度条  import java.awt.Color; import java.awt.Font;   import javax.swing.JLabel; import javax.swing.JPanel;   /*  * 播放器进度条  * */ public class Rate extends JPanel { 	private JLabel rate;   	public Rate() { 		super(); 		// TODO Auto-generated constructor stub 		setLayout(null);         setBackground(new Color(255,255,255));         rate = new JLabel("", JLabel.CENTER);         rate.setForeground(new Color(255,255,255));         rate.setVisible(true);         rate.setFont(new Font(Font.DIALOG, 0, 25));         add(rate);         setVisible(true); 	} }
  2、进度条风格  import javax.swing.*; import javax.swing.plaf.basic.BasicSliderUI; import java.awt.*;   public class SliderStyle extends BasicSliderUI {       public SliderStyle(JSlider jSlider) {         super(jSlider);     }       // 重绘游标       public void paintThumb(Graphics g) {         Graphics2D g2d = (Graphics2D) g;         BasicStroke stroke = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);         g2d.setStroke(stroke);         g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);         GradientPaint gp = new GradientPaint(0, 0, new Color(255,255,255), 0, thumbRect.height, new Color(255,255,255));         g2d.setPaint(gp);         g2d.fillOval(thumbRect.x, thumbRect.y + 5, 10, 10);         BasicStroke stroke1 = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);         g2d.setStroke(stroke1);         g2d.drawLine(0, thumbRect.height / 2, thumbRect.x + 8, thumbRect.height / 2);     }       // 重绘进度条       public void paintTrack(Graphics g) {         Graphics2D g2d = (Graphics2D) g;         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);// 设定渐变         g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));         g2d.setPaint(new GradientPaint(0, 0, new Color(200, 200, 200), 0, trackRect.height, new Color(255, 255, 255), true));         g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));         g2d.drawLine(8, trackRect.height / 2 + 1, trackRect.width + 8, trackRect.height / 2 + 1);     } }
  3、自定义一个panel,存放上一首、下一首、播放暂停按钮、当前时间、总时间、进度条、歌曲名称  import java.awt.Color; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;   import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider;   import com.byq.player.ui.component.Rate; import com.byq.player.ui.style.SliderStyle;   public class MainFrameContain extends JPanel implements ActionListener{ 	 	private DIYButton win_btn_prev; 	private DIYButton win_btn_play; 	private DIYButton win_btn_next; 	private Rate rate; // 进度条 	private JLabel mediaName; 	private JLabel currentTime;     private JLabel totalTime;     private JSlider playProcessSlider; 	private int len = 10; 	 	public MainFrameContain(){ 		win_btn_prev = new DIYButton(); 		win_btn_prev.setBounds(len,3,40,40); 		win_btn_prev.setIcon(new ImageIcon("icon/win_btn_prev.png")); 		win_btn_prev.setActionCommand("prev");  		add(win_btn_prev); 		 		win_btn_play = new DIYButton(); 		win_btn_play.setBounds(len+50,3,40,40); 		win_btn_play.setIcon(new ImageIcon("icon/win_btn_play.png")); 		win_btn_play.setActionCommand("play");  		add(win_btn_play); 		 		win_btn_next = new DIYButton(); 		win_btn_next.setBounds(len+100,3,40,40); 		win_btn_next.setIcon(new ImageIcon("icon/win_btn_next.png")); 		win_btn_next.setActionCommand("next");  		add(win_btn_next); 		 		//歌名 		mediaName = new JLabel(); 		mediaName.setBounds(len+165,-5, 300, 30); //		mediaName.setForeground(new Color(255,255,255));         add(mediaName); 		 		rate = new Rate(); 		rate.setBounds(len+200,30,100,3); 		add(rate); 		setBackground(Color.gray); 	    setLayout(null); 	     	    // 当前时间 	    currentTime = new JLabel("00:00"); 	    currentTime.setBounds(len+165,15, 50, 30); 	    currentTime.setForeground(new Color(255,255,255));         add(currentTime); 	             // 结束时间         totalTime = new JLabel("00:00");         totalTime.setBounds(len+305,15, 50, 30);         totalTime.setForeground(new Color(255,255,255));         add(totalTime);                  playProcessSlider = new JSlider(0,100,0);         playProcessSlider.setBounds(len+200,20,100,24);         playProcessSlider.setUI(new SliderStyle(playProcessSlider));         playProcessSlider.setBackground(new Color(125,125,125));         playProcessSlider.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));         add(playProcessSlider); 	     	    win_btn_prev.addActionListener(this); 	    win_btn_play.addActionListener(this); 	    win_btn_next.addActionListener(this);   	}   	public void actionPerformed(ActionEvent e) { 		// TODO Auto-generated method stub 		if(e.getActionCommand() == "prev")         { 			System.out.println("prev");			         } 		if(e.getActionCommand() == "play")         { 			System.out.println("play"); 			win_btn_play.setIcon(new ImageIcon("icon/win_btn_pause.png")); 			win_btn_play.setActionCommand("pause");          } 		if(e.getActionCommand() == "next")         { 			System.out.println("next");         } 		if(e.getActionCommand() == "pause")         { 			System.out.println("pause"); 			win_btn_play.setIcon(new ImageIcon("icon/win_btn_play.png")); 			win_btn_play.setActionCommand("play");          } 	} }
  效果:
  四、绘制下面区域,菜单列表按钮,声音控制条
  1、自定义音量控制条  import java.awt.Color; import java.awt.Font;   import javax.swing.JLabel; import javax.swing.JPanel;   /*  * 声音进度条  * */ public class Volume extends JPanel { 	private JLabel volume;   	public Volume() { 		super(); 		// TODO Auto-generated constructor stub 		setLayout(null);         setBackground(new Color(255,255,255));         volume = new JLabel("", JLabel.CENTER);         volume.setForeground(new Color(255,255,255));         volume.setVisible(true);         volume.setFont(new Font(Font.DIALOG, 0, 25));         add(volume);         setVisible(true); 	} }
  2、自定义一个panel,存放音量控制条和菜单按钮  import java.awt.Color; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;   import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.JSlider;   import com.byq.player.ui.component.Volume; import com.byq.player.ui.style.SliderStyle;   public class MainFrameBottom extends JPanel implements ActionListener{   	private DIYButton win_btn_list; 	private DIYButton win_btn_volume; 	private Volume volume; 	private JSlider volumeSlider; 	private int len = 10; 	 	public MainFrameBottom() { 		// TODO Auto-generated constructor stub 		win_btn_list = new DIYButton(); 		win_btn_list.setBounds(len,5,16,16); 		win_btn_list.setIcon(new ImageIcon("icon/win_btn_list.png")); 		win_btn_list.setActionCommand("listOff");  		add(win_btn_list); 		 		win_btn_volume = new DIYButton(); 		win_btn_volume.setBounds(len+180,5,16,16); 		win_btn_volume.setIcon(new ImageIcon("icon/win_btn_volumeOn.png")); 		win_btn_volume.setActionCommand("volumeOn");  		add(win_btn_volume); 		 		volume = new Volume(); 		volume.setBounds(len+200,12,100,3); 		add(volume); 		 		volumeSlider = new JSlider(0,100,0); 		volumeSlider.setValue(20);//设置默认音量100 		volumeSlider.setBounds(len+200,3,100,24); 		volumeSlider.setUI(new SliderStyle(volumeSlider)); 		volumeSlider.setBackground(new Color(125,125,125)); 		volumeSlider.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));         add(volumeSlider); 		 		setBackground(Color.gray); 	    setLayout(null); 	}   	public void actionPerformed(ActionEvent e) { 		// TODO Auto-generated method stub 		 	}   }
  效果:

山东烟台的泸沽虾集体上岸,你知道是什么原因吗?头条创作挑战赛不要钱的泸沽虾来了!快点到烟台去赶海!大笑大笑10月6号下午,在山东烟台牟平区的海边出现了大量的活体泸沽虾。海滩上很快铺满了密密麻麻的泸沽虾。大风拍拍打着海浪,海浪把值得游玩的几个海边头条创作挑战赛大海出去旅游看海一定要去的地方舟山群岛是中国沿海最大的群岛。位于长江口以南杭州湾以东的浙江省北部海域。古称海中州,一望无际的蓝色海洋!舟山群岛一个很不错的旅游胜地,很被严重低估的中国元帅培养出四位高官,创造了我军18个第一有一位非常特别,他创造了解放军史上的18次第一,可为何他的故事鲜为人知,而且他还是被严重低估的那个?!2022年10月1日,我们迎来共和国华诞73周年,在这举国欢庆的时刻,有一些人朱元璋为何将祖坟建在湖底?中国的风水宝地三大龙脉又在哪里1963年,我国五大淡水湖之一的洪泽湖遭遇特大干旱,水位下降到了河床,露出一批大型石像,石像造型各异,躺在淤泥之中。这些石像中有的被雕成了麒麟雄狮骏马龟趺等各类瑞兽,还有文臣武将太如果郑州地铁延伸到新密登封的城区,则需6号线延长或新建K2线贾峪镇通地铁后,新密登封,到郑州市区越来越近。继郑登快速路,以贾峪镇为起点,迟早会规划郑州到新密登封的新的快速路吧?这条路应该是新密市密州大道在与郑少高速公路交叉口处向东北方向延伸今秋别穿运动裤,建议换成九分裤和膝下裙,露出足踝既显瘦又时髦秋天怎么穿既不费劲又时髦显瘦,这是很多人都关心的问题。女人不管是30岁,还是已经年过半百,若是穿衣想要兼顾显瘦和时髦,都建议你放弃运动裤。运动裤大多比较宽松,而且搭配效果单调枯燥,6种病听起来严重,实际问题不是很大,不要轻信盲信他人随着人们生活水平的提高,很多人的养生意识也越来越强,对于个人的身体健康状况也越来越关注。常言道有啥别有病,没啥别没钱!如今这个年头,天不怕地不怕,就怕生错病。一旦去医院体检,出了某海南八个第一名胜古迹,你去过几个?旅游风物志,揽四海胜景,博人间风华。海南省,风光秀丽,人文方面,虽不比中原大地,但琼崖文化,也有自己的独特性,下面盘点海南八个第一名胜古迹,看看你去过几个?1海南第一庙海南第一庙,安溪狮子岩灵泉石塔山间隐,奇石方竹林中寻早报记者许钹钹吴嘉晓实习生王雪晶通讯员洪金示文图车至山前,绿荫石阶,淙淙流水,盛夏的暑气忽然消失在山林。狮子岩隐于安溪县湖上乡飞亚村四子峰。据安溪县志记载狮子岩(感化里),旧名欧岩嗨玩国庆丨长沙看海三汊矶大桥三湘都市报全媒体记者郭文雯出镜康子璇视频王珏顾荣实习生谢佳燊你肯定听说过长沙看海这个话题,但哪里的海景最美?就是这儿,长沙最像海的地方三汊矶大桥。三汊矶大桥最美的时分应该就是日落,游客注意别跑空!广西药用植物园景区发布临时闭园通知来源南国早报客户端发布时间3小时前记者谭双梅文图10月3日晚,众多购票前往广西药用植物园旅游景区欣赏灯光秀的游客们扑了个空。据悉,因线路检修,景区从10月3日8时起临时闭园,恢复开
平潭岛旅游大练岛通天门平潭岛这几年一直在变化,每次回来都会发现惊喜,对于土生土长的本地人,很多景点我都没去过,也都是网络上看到才知道,我的家乡简直是宝藏海岛,今天就带大家逛逛大练岛的通天门大练岛是平潭岛有muX牧游侠陪伴的旅游现如今,我们更喜欢快捷的获取信息方式,如互联网。发达便利的互联网,让我们只要处于网络环境中,即可搜索到大部分事的相关信息,通过碎片化信息的整合,从而以自身角度出发,为一件事定义。不迷雾重重是谁修改了旅行者1号的程序,致其发回神秘乱码?旅行者1号数据恢复,但致其异常的原因依然不明。旅行者1号。NASANASA的旅行者1号探测器已经朝着遥远的深空飞行了45年,尽管已经老旧,但至今依然在星际空间中顽强地工作,并持续地喀纳斯之秋色,让人有重新定义秋天的冲动喀纳斯的秋天风也温馨,云也温婉天也蔚蓝,水也清新金色的白桦林金色的牧场田野金色的草地金色的村庄金色的晨曦夺目的金光闪闪无限铺陈开来喀纳斯的秋天有多美随手拍一张都是壁纸在这里,每一处又又又挖到了!牧野营地里藏着你向往的诗和远方!摄影刘银刚大自然总有种莫名的吸引力,身处其中,我们能够化繁为简,拥有最自在朴素的生活。天为罗帐地为毡,星斗虫鸣伴我眠。这样的诗意去哪里找?抓住暑假的小尾巴,去牧野营地,放下匆忙和疲董必武前往中南海见主席,得知来意后,主席这个陈赓,真有本事前言1953年的一天,毛主席周总理和董必武三人在中南海的办公室内眉头紧锁,似乎商谈着什么重要的事情。片刻之后,毛主席笑了出来这个陈赓,可真有本事,都打起死刑犯的主意了。主席为何要这首批三季报预告出炉55家公司披露35家预增,300亿锂盐龙头雅化集团预增超4倍金融界8月31日消息上市公司半年报披露火热进行中,三季度业绩预告陆续出炉,金融界巨灵数据显示,55家公司三季度业绩预告亮相,其中预期增长家数35家,占比63。64。截至今日,总计5对话广汽集团曾庆洪中国新能源汽车已进入市场推动阶段日前,2022世界新能源汽车大会正式在北京召开,作为新能源汽车发展二十年来重要的见证者,曾庆洪接受新京报贝壳财经记者采访。他提到,在全球新能源汽车的发展进程中,中国率先迈出了第一步水利建设支撑岁稔年丰水利建设支撑岁稔年丰(人民时评)数据里的中国活力王浩基础设施的发展水平,关系国民经济体系整体效能。扩大基础设施有效投资,不仅能拉动经济增长,还有助于解决发展中的难题,促进经济高质量亲测5款产品,真实感受告诉你哪款挂脖风扇才是纳凉首选大家好,我是生活调色师小小冰,花费两千元自购主流挂脖风扇测评,只为给你分享最真实的使用体验,如果对你有帮助,不要吝啬点赞收藏哦前言本文提到的品牌有锐舞几素素乐Benks冇心。为了这福建打工仔逆袭从卖啤酒到开超市,上市套现数十亿,今遇新麻烦创办永辉超市的那一刻起,福建打工仔张轩松的命运,便宣告了改变。从放弃学业搬砖攒钱,到3万元盘下啤酒批发店,再到进军超市业务,张轩松曾这样一步步前进,直至将永辉超市做到上市。上市后,