活动地址:CSDN21天学习挑战赛
*学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
可以创建一个简易的可视化窗口,我们再写写后端代码的时候可以通过这些简易的可视化窗口帮助运维人员方便快速的进行操作。
Swing 是一个为Java设计的GUI工具包,是JAVA基础类的一部分。
Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。
器件 | 含义 |
---|---|
JFrame | java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。 |
JPanel | Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。 |
JLabel | JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。 |
JTextField | 一个轻量级组件,它允许编辑单行文本。 |
JPasswordField | 允许我们输入了一行字像输入框,但隐藏星号(*) 或点创建密码(密码) |
JButton | JButton 类的实例。用于创建按钮类似实例中的 “Login”。 |
这是一个多线程抢红包的实例
import java.util.Random;
public class RedBag {
public static void main(String[] args) {
Bao bao = new Bao(100, 5);
User user = new User(bao);
for(int i=0;i<5;i++) {
new Thread(user).start();
}
}
}
// 每一个用户都是一个线程
class User implements Runnable{
private Bao bao;
public User(Bao bao) {
this.bao = bao;
}
@Override
public void run() {
double money = bao.getRandomMoney();
if(money == 0) {
System.out.println(Thread.currentThread().getName() + "不好意思,您手慢了!");
}else {
System.out.println(Thread.currentThread().getName() + "抢到 " + money + "元");
}
}
}
class Bao{
private double total; // 总钱数
private int totalVal; // 随机生成整数,将钱数化为整数
private int count; // 红包总数
public Bao(double total, int count) {
this.total = total;
this.count = count;
this.totalVal = (int)(total * 1000);
}
public synchronized double getRandomMoney() {
int val;
// 当前剩余钱数 0.04 4人
if(count !=0 && totalVal / count == 1) {
val = 1;
totalVal = totalVal - val;
count--;
return val/1000.0;
}
if(count <= 0) {
val = 0;
}else if(count == 1) {
val = totalVal;
}else {
int temp; //剩下的金额
while(true) {
try {
Thread.sleep(1000);
} catch ( InterruptedException e) {
e.printStackTrace();
}
// 随机生成当前金额的随机数 [0,totalVal/count),尽量平均一点
val = new Random().nextInt(totalVal/count);
temp = totalVal - val;
// 判断生成的金额大于0,且剩余的钱数够剩下人平分到0.01元
if(temp*1.0/(count-1) >= 1 && val > 0) {
//System.out.println("生成金额 :" + val + "剩余金额 :" + temp + "剩余人数 :" + (count-1));
break;
}
}
totalVal = totalVal - val;
}
count--;
return val/1000.0;
}
}