Javafx图形界面开发

简介: Javafx图形界面开发

目录

一、实验目的

二、实验代码

1. 编写一个应用程序,有一个标题为“登录”的窗口,能实现用户名和密码的输入。

2. 编写一个应用程序,有一个标题为“注册学生信息”的窗口,窗口的布局和组件请自行设计,能实现学生信息的注册功能。

3.设计如图5-4所示的聊天窗口

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所示的聊天窗口

image.png

单击“发送”按钮,文本区域中的信息发送到聊天区,并清空其中的内容;

窗口启动时,加载历史聊天记录;

单击关闭按钮,保存聊天记录到文件,并关闭窗口。

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个数字。

image.png

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();
  }
}
相关文章
|
11月前
|
移动开发 前端开发 JavaScript
HTML5实现好看的端午节网页源码
HTML5实现好看的端午节网页源码,包含十个页面:网站首页、端午节介绍、由来、习俗、文化、美食、故事、民谣、联系我们及登录/注册。页面设计简洁美观,内容丰富,兼容手机端,代码规范且注释完整,易于扩展和修改。提供完整的源码下载和视频演示,方便学习和使用。
308 3
|
关系型数据库 MySQL 数据安全/隐私保护
在 Docker 中部署 Mysql 并挂载配置文件
在 Docker 中部署 Mysql 并挂载配置文件
|
8月前
|
供应链 安全 物联网
5G遇上区块链:速度与信任的完美结合,未来世界的基石
5G遇上区块链:速度与信任的完美结合,未来世界的基石
197 9
|
存储 SQL Java
Spring Boot使用slf4j进行日志记录
本节课主要对 slf4j 做了一个简单的介绍,并且对 Spring Boot 中如何使用 slf4j 输出日志做了详细的说明,着重分析了 logback.xml 文件中对日志相关信息的配置,包括日志的不同级别...
|
IDE Java Linux
Java一分钟之-JavaFX:构建桌面GUI应用
JavaFX是Java用于构建桌面应用的强大力量,提供丰富的UI组件、动画、媒体播放和跨平台能力。本文简要介绍JavaFX,讨论环境配置、布局混乱和事件处理等常见问题及其解决方案。通过学习官方文档、实践和使用IDE辅助,开发者能避免这些问题。示例代码展示了一个简单的JavaFX应用,展示如何创建UI、处理事件和构建布局。
898 1
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
人工智能 自然语言处理 网络协议
ps beta ai显示高峰需求进不去怎么办? psai高峰期需求用不了解决办法
PSBetaAI2023加入了AI的功能,在使用过程中,有时会遇到一个令人烦恼的问题,那就是PhotoshopBetaAI提示我们正在面临高峰需求,请稍候再试,针对这个问题,本文为大家整理了几个可行的解决方法,可以根据自己的实际情况来尝试解决
373 12
|
弹性计算 网络协议 API
原生Claude3免魔法本地轻松上手,这3步你必须要知道
本文详细介绍了如何在阿里云ECS上部署LobeChat,并通过Cloudflare实现Claude3 API的代理访问。首先准备ECS、Claude3 API密钥及域名,接着通过Docker部署LobeChat,并配置相关环境变量。然后,在Cloudflare上创建站点并部署API代理,最后通过SSH端口映射在本地访问LobeChat。文中提供了具体步骤与示例代码,帮助读者顺利完成部署,体验高效便捷的AI聊天功能。
1903 2
|
负载均衡 关系型数据库 数据管理
关系型数据库的横向扩展
【5月更文挑战第2天】关系型数据库的横向扩展
456 6
关系型数据库的横向扩展
|
存储 安全 网络安全
如何注册UGREENLink服务?
【7月更文挑战第1天】如何注册UGREENLink服务?
2097 3