最近刚学习javafx,上英语课的时候刚看见英语老师用复古界面的抽签软件(用C语言写的)点名让同学回答问题,UI界面美观值真的是让人汗颜- -,在网上好像也搜不到用javafx做的抽签软件,swing写的倒是挺多的,觉得好玩自己便做了一个类似的抽签软件,希望对javafx感兴趣的新手有点帮助。
网盘:https://pan.baidu.com/s/1W0_KgdJXId2__gth16UzEQ
jar包(源码):链接:https://pan.baidu.com/s/1tvscoLZkO4X7VQu4G5QD1g 提取码:99s5
软件所使用的知识点其实是大多都是UI组件和属性绑定 ,时间相应,监听 ,ArrayList 容器,Iterator迭代器等都是基础的东西,不涉及ODBC数据库和服务器,代码量在1300行左右。
动画的定义和绑定
`EventHandlercolors = e4->{
tf.setFill(Color.color((int)Math.random()*255,(int)Math.random()*255,(int)Math.random()*255));
};
Timeline colorPlay = new Timeline(new KeyFrame(Duration.millis(300),colors));
colorPlay.setCycleCount(Timeline.INDEFINITE);`.
//保存用户配置
public static String save(String URL,ArrayList waitInsertData,ArrayList waitInsertDataValue) {
String error_details ="保存成功!!";
URL = "save.properties";
Properties saveFile = new Properties();
try {
FileOutputStream cin = new FileOutputStream(URL);
for(int i = 0;i[] load(String URL){
Properties loadFile = new Properties();
Iterator it,value0;
ArrayList names[] = new ArrayList[2];
for(int y=0;y<2;y++) {
names[y] = new ArrayList();
}
try {
FileInputStream fis = new FileInputStream(URL);
BufferedInputStream bfis = new BufferedInputStream(fis);
InputStream is = bfis;
try {
loadFile.load(is);
it = loadFile.stringPropertyNames().iterator();
value0= loadFile.stringPropertyNames().iterator();
while(it.hasNext()) { //Get name
names[0].add(it.next());
}
while(value0.hasNext()) { // Get Key Value
names[1].add(loadFile.getProperty(value0.next()));
}
is.close();
bfis.close();
fis.close();
return names;
} catch (IOException e) {
//System.out.println("加载失败");
return null;
}
} catch (FileNotFoundException e) {
//System.out.println("打开文件失败");
}
return null;
}
//URLFile 是ChooseFile文件选择框选择的文件 ,code是读取的时候的编码 ,默认是UTF-8,我的设置成GBK才不会乱码。。
public ArrayList getFileDetails(File URLFile) { // to get student name;
ArrayList temp = new ArrayList();
FileInputStream cin;
try {
InputStreamReader fr = new InputStreamReader(new FileInputStream(URLFile),code);
BufferedReader bf = new BufferedReader(fr);
String s= null;
while((s = bf.readLine())!=null) {
temp.add(s); //读取每一行学生的名字
}
bf.close();
fr.close();
}catch(Exception e) {};
return temp; //返回所有学生的名字
}
//colorSelect 是颜色选择器实体化的对象
color_name_r = colorselect.getValue().getRed()*255; //R
color_name_g = colorselect.getValue().getGreen()*255; //G
color_name_b = colorselect.getValue().getBlue()*255; //B
color_name = "rgb("+color_name_r+","+color_name_g+","+color_name_b+");";
mainPane.setStyle("-fx-background-color:"+color_name);//css设置面板背景颜色
// we start new Thread
Thread ui = new Thread() {
public void run() {
ani2.play();
try {
for(int i = 0;i
clear.setOnAction(e->{ //清空文本按钮 点击时的处理事件
if(end.getText().length() == 0) {
dosclick.play();
tip_m.setText("已经空啦");
}
else
end.setText("");
});
//cinExtract 是TextFiled的具体化的实例化对象
cinExtract.textProperty().addListener((observation,oldValueLast,newValueNow)->{
try {
if(cinExtract.getText().length()>0)
for(int i = 0;i'9') {
tip_m.setText("只能输入数字哦");
cinExtract.setText("");
}
}
else {
cinExtract.setText("1");
}
if(cinExtract.getText().length()>0) //当学生人数为30人 ,但我们输入了35人,这时cinExtract就会取最大值30,自动改变
if(Integer.parseInt(cinExtract.getText())>stu.size()) {
tip_m.setText("错误 输入数据大于所具有的人数");
cinExtract.setText(String.format("%d",stu.size()));//排版 SDF
}
}catch(Exception error) {
tip.setContentText("输入有错误啦 请重新输入吧#_#");
tip.showAndWait();
};
});
//一个个
Button select = new Button("select");
Button reselect = new Button("extract");
Button clear = new Button("清空");
Button recover = new Button("recover");
Button color = new Button("color");
Button cancel =new Button("pause");
Button modify_code = new Button("code");
Button colorPicker_b = new Button("colorPickerSelect");
//数组
Button mainPane_button[] = new Button[8];
for(int i = 0;i<8;i++){
if(i == 0)
mainPane_button[i] = new Button(name);
else
mainPane_button[i] = new Button(otherName);
}