本人菜鸟一枚,最近毕设要做一个桌面弹幕的功能,于是想着能不能用swing做一个。
首先,要实现弹幕,需要一块画布,我们写一个类继承自Jframe 。而且为了不遮挡桌面的其他部分,画布的背景应该是透明。这时我们需要用到
AWTUtilities.setWindowOpaque(this, false);//this 是你的Jframe窗口 把窗口设为透明
这个函数,首先要知道这个函数java默认工程的lib里面是没有加入的,需要额外导入rt.jar包,这个包不需要下载,在你的Jdk安装目录下lib/文件夹就可以找到,找到后直接导入你的工程就行了。
然后就是要把窗口最大化
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取桌面的大小
Rectangle bounds = new Rectangle(screenSize);
this.setBounds(bounds); //把窗口设为桌面大小
this.setExtendedState(Frame.MAXIMIZED_BOTH);
弹幕的窗口应该是在桌面的最上面的,所以你还需要设置
this.setAlwaysOnTop(true);
java默认的jframe 是带有边框的,所以要把边框禁用
this.setUndecorated(true);
这样弹幕的背景就算是完成了,接下了就是在背景上吧弹幕画出来。
画弹幕就要重写jframe的paint方法。
@Override
public void paint(Graphics gg) {
super.paint(gg);}
这个方法有一个参数Graphics。Jframe每次加载一个控件是都会调用paint方法去绘制。当需要重新绘制时,调用repaint()方法。
后面我们就是通过不断调用repaint方法来让弹幕动起来的。参数Graphics可以理解为画笔,画笔可以设置相关的属性
。比如setColor(Color.RED) 方法把画笔设为红色,setFont()方法设置画笔的字体。先在桌面上画上你个你想要的字符串把。
String hello="Hello" ;
int x=300,y=300;//弹幕的坐标
@Override
public void paint(Graphics gg) {
super.paint(gg);
gg.setColor(Color.BLUE); //把画笔设为蓝色
gg.setFront(new
Front("Dialog",Font.BOLD,40); //设置字体和样式,大小40
gg.drawString(hello,x,y); //在桌面坐标300,300的地方画出 Hello字符串
}
结果就是这样了