目录
1. 编写一个应用程序,有一个标题为“登录”的窗口,能实现用户名和密码的输入。
2. 编写一个应用程序,有一个标题为“注册学生信息”的窗口,窗口的布局和组件请自行设计,能实现学生信息的注册功能。
4. (选做)编写一个简易计算器程序,界面如图5-5,实现简单的加、减、乘、除等功能。最多显示12个数字。
一、实验目的
1. 掌握JavaFX的基本概念舞台、场景、节点、面板、控件等。
2. 掌握JavaFX的窗体结构;
3. 掌握JavaFX常用的布局面板类,如栈面板StackPane类、流式面板FlowPane类、边界面板BorderPane类、GridPane网格面板类、Hbox单行面板类、Vbox单列面板类等的使用;
4. 掌握常用的控件,如Button、TextField、Label、PasswordField等的使用;
5. 掌握JavaFx事件处理机制;
二、实验代码
1. 编写一个应用程序,有一个标题为“登录”的窗口,能实现用户名和密码的输入。
(1)如果用户名和密码输入正确,则单击“登录”按钮弹出“用户登录成功”的消息框;
(2)如果用户名和密码输入错误,则单击“登录”按钮弹出“用户登录失败”的消息框。
import java.util.ArrayList; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.PasswordField; import javafx.scene.control.TextArea; import javafx.scene.layout.GridPane; import javafx.scene.control.ScrollPane; public class App15_7 extends Application { private TextField tf=new TextField(); private PasswordField pf=new PasswordField(); private TextArea ta=new TextArea("未登录"); @Override public void start(Stage Stage) { GridPane rootGP=new GridPane(); final Label lab1=new Label("用户名:"); final Label lab2=new Label("密 码:"); tf.setPromptText("输入用户名"); pf.setPromptText("输入密码"); rootGP.add(lab1,0,0); rootGP.add(tf,1,0); rootGP.add(lab2,0,1); rootGP.add(pf,1,1); final ScrollPane scro=new ScrollPane(ta); ta.setPrefColumnCount(15); ta.setEditable(false); pf.setOnAction(e-> { ArrayList databases = new ArrayList(); user user1 = new user("tim","123"); databases.add(user1); user user2 = new user("mary","121"); databases.add(user2); user user3 = new user("bill","321"); databases.add(user3); user user4 = new user("carl","110"); databases.add(user4); for(int i=0;i<=databases.size()-1;i++) { if(tf.getText().equals(((user) databases.get(i)).getname()) && pf.getText().equals(((user) databases.get(i)).getpsw())) { ta.setEditable(true); ta.setWrapText(true); ta.setStyle("-fx-text-fill:red"); ta.setText("恭喜你!!\n登录成功"); } } } ); rootGP.add(scro,0,3,4,3); Scene scene=new Scene(rootGP,190,120); Stage.setTitle("登录"); Stage.setScene(scene); Stage.show(); } public static void main(String[] args) { launch(args); } }
2. 编写一个应用程序,有一个标题为“注册学生信息”的窗口,窗口的布局和组件请自行设计,能实现学生信息的注册功能。
(1)其中学生信息包括:学号、姓名、出生日期等;
(2)单击注册按钮,如果未注册过则弹出“学生信息注册成功”的对话框,并把学生添加到List集合中;
(3)单击注册按钮,如果学生已经注册过,则弹出“学生信息已存在,注册失败”的对话框;
(4)单击取消按钮,结束本次注册并关闭窗口。
(5)采用面向对象程序设计思想
package Javatest; import java.util.ArrayList; import java.util.Iterator; import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.stage.Stage; @SuppressWarnings("unused") public class Lab5 extends Application{ final Label lab1=new Label("姓名:"); final Label lab2=new Label("学号:"); final Label lab3=new Label("出生日期:"); final TextField tf1=new TextField(); final TextField tf2=new TextField(); final TextField tf3=new TextField(); public Button bt1; public Button bt2; @Override public void start(Stage primaryStage ) throws Exception { GridPane rootGP=new GridPane(); rootGP.setPadding(new Insets(15,15,15,15)); rootGP.setHgap(5); rootGP.setVgap(5); tf1.setPromptText("请输入学生姓名"); rootGP.add(lab1, 0, 0); rootGP.add(tf1, 1, 0); tf2.setPromptText("请输入学生号"); rootGP.add(lab2, 0, 1); rootGP.add(tf2, 1, 1); tf3.setPromptText("请输入出生日期"); rootGP.add(lab3, 0, 2); rootGP.add(tf3, 1, 2); Button bt1=new Button("注册"); rootGP.add(bt1, 0, 3); Button bt2=new Button("取消"); rootGP.add(bt2, 1, 3); Scene scene=new Scene(rootGP,400,120); primaryStage.setScene(scene); primaryStage.setTitle("登录"); primaryStage.show(); bt1.setOnAction(e->{ Stage stage=new Stage(); stage.setTitle("消息框"); final TextArea ta=new TextArea("请输入内容...."); ta.setText("成功界面"); stage.setScene(new Scene (ta,180,180)); stage.show(); if ((tf1.getText().equals("周彦志")) && (tf2.getText().equals("2019443709")) && tf3.getText().equals("2001-07-06")) { ta.setWrapText(true); ta.setStyle("-fx-text-fill:blue"); ta.setText("注册成功!"); ArrayList<String> list1=new ArrayList<String>(); list1.add("杨洪 2019443747 2000年12月11日"); /*遍历 数组*/ @SuppressWarnings("rawtypes") Iterator i =list1.iterator(); while (i.hasNext()) { String str=(String)i.next(); System.out.println(str); } }else { ta.setWrapText(true);//文本区可换行 ta.setStyle("-fx-text-fill:red");//将文本区中的文字设置为红色 ta.setText("该学生信息已存在,注册失败!"); }}); } }
3.设计如图5-4所示的聊天窗口
单击“发送”按钮,文本区域中的信息发送到聊天区,并清空其中的内容;
窗口启动时,加载历史聊天记录;
单击关闭按钮,保存聊天记录到文件,并关闭窗口。
package homework5; import java.awt.Button; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Q4 extends Frame { TextArea ta; TextField tf; public Q4() {//用构造函数初始化 ta = new TextArea(""); ta.setBounds(50, 50, 350, 200); tf = new TextField(""); tf.setBounds(50, 300, 350, 50); Button b1 = new Button("发送"); b1.setBounds(400, 300, 50, 50); Button b2 = new Button("关闭"); b2.setBounds(460, 300, 50, 50); add(ta); add(tf); add(b1); add(b2); b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ta.append(tf.getText()+"\n"); tf.setText(""); } }); jie er = new jie(); b2.addActionListener(er); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ee) { System.exit(0); } }); } public static void main(String[] args) { Q4 f = new Q4(); f.setLayout(null); f.setTitle("消息窗口"); f.setSize(600, 600); f.setVisible(true); } class jie implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(0);//不是1 } } } }
4. (选做)编写一个简易计算器程序,界面如图5-5,实现简单的加、减、乘、除等功能。最多显示12个数字。
package demo05; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Calculator implements ActionListener{ GridLayout layout; JButton button1,button2,button3,button4,button5,button6,button7,button8,button9,button10,button11,button12,button13,button14,button15,button16; JSplitPane jsp; JFrame frame; // JTextArea area; JPanel pane1,pane2; JTextField jtf; public Calculator(){ frame=new JFrame("计算器"); frame.setSize(new Dimension(400,600)); layout=new GridLayout(4,4); pane1=new JPanel(layout); jtf=new JTextField(); jtf.setBounds(0, 0, 400, 200); button1=new JButton("7"); button2=new JButton("8"); button3=new JButton("9"); button4=new JButton("/"); button5=new JButton("4"); button6=new JButton("5"); button7=new JButton("6"); button8=new JButton("*"); button9=new JButton("1"); button10=new JButton("2"); button11=new JButton("3"); button12=new JButton("+"); button13=new JButton("."); button14=new JButton("0"); button15=new JButton("="); button16=new JButton("-"); pane1.add(button1); pane1.add(button2); pane1.add(button3); pane1.add(button4); pane1.add(button5); pane1.add(button6); pane1.add(button7); pane1.add(button8); pane1.add(button9); pane1.add(button10); pane1.add(button11); pane1.add(button12); pane1.add(button13); pane1.add(button14); pane1.add(button15); pane1.add(button16); jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jtf,pane1); frame.add(jsp); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); button6.addActionListener(this); button7.addActionListener(this); button8.addActionListener(this); button9.addActionListener(this); button10.addActionListener(this); button11.addActionListener(this); button12.addActionListener(this); button13.addActionListener(this); button14.addActionListener(this); button15.addActionListener(this); button16.addActionListener(this); jtf.addActionListener(this); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent event) { Object obj=event.getSource(); if(obj instanceof JButton){ JButton button=(JButton)obj; if(button14==button){ if(jtf.getText().equals("0")){ jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"0"); } } if(button9==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("1"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"1"); } } if(button10==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("2"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"2"); } } if(button11==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("3"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"3"); } } if(button5==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("4"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"4"); } } if(button6==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("5"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"5"); } } if(button7==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("6"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"6"); } } if(button1==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("7"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"7"); } } if(button2==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("8"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"8"); } } if(button3==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("9"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"9"); } } if(button13==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText(""); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+""); } } if(button12==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("+"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"+"); } } if(button16==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("-"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"-"); } } if(button8==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("*"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"*"); } } if(button4==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("/"); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"/"); } } if(button13==button){ if(jtf.getText().equals("0")){ jtf.setText(""); jtf.setText("."); jtf.requestFocus(); } else{ String str=jtf.getText(); jtf.setText(str+"."); } } //等号实现加减乘除功能 if(button15==button){ if(jtf.getText().indexOf("+")!=-1){ String str=jtf.getText(); int i=str.indexOf("+"); String s=str.substring(0, i); String s1=str.substring(i+1,str.length()); Double d1=Double.parseDouble(s); Double d2=Double.parseDouble(s1); double result=d1+d2; String str1=String.valueOf(result); jtf.setText(str1); } //减法运算 else if(jtf.getText().indexOf("-")!=-1){ String str=jtf.getText(); int i=str.indexOf("-"); String s=str.substring(0, i); String s1=str.substring(i+1,str.length()); Double d1=Double.parseDouble(s.trim()); Double d2=Double.parseDouble(s1); double result=d1-d2; String str1=String.valueOf(result); jtf.setText(str1); } //乘法运算 else if(jtf.getText().indexOf("*")!=-1){ String str=jtf.getText(); int i=str.indexOf("*"); String s=str.substring(0, i); String s1=str.substring(i+1,str.length()); Double d1=Double.parseDouble(s.trim()); Double d2=Double.parseDouble(s1); double result=d1*d2; String str1=String.valueOf(result); jtf.setText(str1); } else if(jtf.getText().indexOf("/")!=-1){ String str=jtf.getText(); int i=str.indexOf("/"); String s=str.substring(0, i); String s1=str.substring(i+1,str.length()); Double d1=Double.parseDouble(s.trim()); Double d2=Double.parseDouble(s1); double result=d1/d2; String str1=String.valueOf(result); jtf.setText(str1); } else{ jtf.setText("请选择要输入的运算符"); } } } } public static void main(String[] args){ new Calculator(); } }