如图,这是笔者第40天居家办公,40天如一日 = 一本Mac + 一台显示器 + 一个手机 + 一杯枸杞茶 + Zoom + Hue + Excel + IDEA + Wechat,愿阴霾早日散去,god bless!
你好,我是方向盘(YourBatman)
📚前言
今天是2022年的6月3日,端午节,祝大家端午安康。
端午节(也叫粽子节)与春节、清明节、中秋节并称为中国民间四大传统节日,一直延续至今。 作为一枚程序员,本文用Java代码这种“趣味的”方式写出笔者对大家的祝福语,还请笑纳。
?正文
Java大都用来作为服务器开发,殊不知它也可以用作客户端开发,并且能做出“漂亮的UI”,比如Javaer最最最常用的IDE:IntelliJ IDEA,以及Eclipse,它们都是用Java语言绘制而成的UI。
🌈Java图形化界面编程
首先需要明确:Java开发UI的技术,是很少使用的技术,所以这里只稍微介绍一下。
前端页面三剑客(CSS + JS + Html)牢牢占据UI的主导地位,无可撼动
AWT和Swing都可以完成图形化界面编程。前者较老,后者较新用于替代前者。
🚀AWT
AWT(Abstract Window Toolkit)意思是:抽象窗口具集,它是Sun公司最早提供的GUI库,在JDK 1.0版本就有提供。
GUI(Graphical User Interface):图形用户界面,是指采用图形方式显示的计算机操作用户界面
AWT是通过调用操作系统的native方法实现的,所以在Windows系统上的AWT窗口就是Windows的风格,而在Unix系统上的则是XWindow风格,做到了“自适应”。因为AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。
🚀Swing
Swing是Java设计的新一代GUI工具包,它的出现旨在解决AWT组件的移植性问题,同时提供更多的企业级应用程序所需要的界面功能。Swing类库被包含在JDK 1.2及以后版本中,类主要在javax.swing包里。
Swing不仅提供的AWT的所有功能,还用纯粹的Java代码(并非native调用)对AWT的功能进行了大幅度的扩充,例如:树形控件不是所有操作系统都支持,但使用Swing就可以无视操作系统。
- 由于Swing是用Java实现而非native方法实现,因此具有完美的跨平台特性
- 由于Swing不适用native方法,所以相较于AWT也被称作“轻量级控件”
🌈祝:端午安康
你开发了祝福的程序, 你安装了虚拟的系统, 你设置了幸福的密码, 你下载了流畅的软件, 端午节到了, 愿你有个快乐的心情。
你从智慧中开发财富, 你从勤奋中耕耘成就, 你从耐心中创造艺术, 你从工作中寻找生活, 端午节到了, 愿你编出精彩的人生。
你用命令开启了精彩, 你用效率创造了价值, 你用冷静判断了是非, 你用可观展示了结果, 端午节到了, 愿你码出高效的代码。
🚀效果图
🚀资源下载
资源已上传至CSDN,免费下载。下载后直接执行java -jar codeRainApp.jar 即可看到效果。
下载地址:https://download.csdn.net/download/f641385712/85537537
🚀源代码获取
其实就两个类,笔者都贴出来了哈,有需要的自取
CodeRainMain:
public class CodeRainMain {
public static void main(String[] args) throws IOException {
List<String> lines = IOUtils.readLines(new ClassPathResource("duanwujie.txt").getInputStream(), UTF_8);
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
int width = (int) (screensize.getWidth() * 0.85);
int height = (int) (screensize.getHeight() * 0.85);
System.out.println(format("屏幕大小为:width:%s height:%s", width, height));
JFrame frame = new JFrame("YourBatman祝:端午安康");
CodeRainJPanel panel = new CodeRainJPanel(lines);
frame.add(panel);
frame.setSize(width, height);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
panel.start();
panel.requestFocus();
}
}
CodeRainJPanel:
public class CodeRainJPanel extends JPanel {
private static final int FONT_SIZE = 33;
private static final int SPACE = 40;
private static final int SLEEP_TIME = 130;
private String[][] charsetArray;
private int[] pos;
private Color[] colors = new Color[10];
private List<String> surceLines;
public CodeRainJPanel(List<String> surceLines) {
this.surceLines = surceLines;
}
private void randomFromSourceLines(String[] charset) {
int lineCount = this.surceLines.size();
int length = 0;
int destPos = 0;
while (true) {
int index = ThreadLocalRandom.current().nextInt(lineCount);
String line = surceLines.get(index);
String[] lineArray = line.split("");
boolean breakFlag;
if (lineArray.length + destPos >= charset.length) {
length = charset.length - destPos;
breakFlag = true;
} else {
length = lineArray.length;
breakFlag = false;
}
System.arraycopy(lineArray, 0, charset, destPos, length);
destPos += length;
if (breakFlag) {
break;
}
}
}
public void init() {
int width = getWidth();
int height = getHeight();
charsetArray = new String[width / SPACE][height / SPACE];
for (int i = 0; i < charsetArray.length; i++) {
randomFromSourceLines(charsetArray[i]);
}
pos = new int[charsetArray.length];
for (int i = 0; i < pos.length; i++) {
pos[i] = ThreadLocalRandom.current().nextInt(1000);
}
for (int i = 0; i < colors.length - 1; i++) {
colors[i] = new Color(0, 180 / colors.length * (i + 1), 0);
}
setBackground(Color.BLACK);
}
public void start() {
init();
new Thread(() -> {
while (true) {
try {
repaint();
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setFont(new Font("华文行楷", Font.BOLD, FONT_SIZE));
for (int i = 0; i < charsetArray.length; i++) {
for (int j = 0; j < colors.length; j++) {
int index = (pos[i] + j) % charsetArray[i].length;
g2.setColor(colors[j]);
g2.drawString(charsetArray[i][index], i * SPACE, (index + 1) * SPACE);
}
pos[i] = (pos[i] + 1) % charsetArray[i].length;
}
}
}
🍞总结
端午节是咱中国四大传统节日之一,重要性“仅次于”春节。在互联网领域大环境不好的情况下,程序员越来越卷,下班时间越来越晚,赚钱的同时也要保重身体,YourBatman在此祝你端午安康。
|