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();
  }
}
相关文章
|
6月前
|
IDE Java Linux
Java一分钟之-JavaFX:构建桌面GUI应用
JavaFX是Java用于构建桌面应用的强大力量,提供丰富的UI组件、动画、媒体播放和跨平台能力。本文简要介绍JavaFX,讨论环境配置、布局混乱和事件处理等常见问题及其解决方案。通过学习官方文档、实践和使用IDE辅助,开发者能避免这些问题。示例代码展示了一个简单的JavaFX应用,展示如何创建UI、处理事件和构建布局。
307 1
|
存储 安全 算法
[ web基础篇 ] session,cookie,token 那些事儿 ?
session ?cookie ?token ? 相信大家对这几个词并不陌生,不管是面试还是工作都会有涉及的,可想而知它的重要性。 网上关于 session、cookie、token 的文章有很多,每篇文章都有一些独特的见解。 在写文章之前,我看了很多篇 session、cookie、token 的文章,感觉很多都没有讲的很清楚,泛泛而谈。 在看了这么多的文章之后,我对这几次词又有了不一样的理解,在这里和大家分享一下。
346 0
[ web基础篇 ] session,cookie,token 那些事儿 ?
|
SQL 安全 小程序
javaFx 工具开发
javaFx 工具开发
|
IDE Java 开发工具
|
Java
Java: JavaFX桌面GUI开发
Java: JavaFX桌面GUI开发
158 0
Java: JavaFX桌面GUI开发
|
数据可视化 Java Android开发
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
159 0
JavaGUI:eclipse+e(fx)clipse+JavaFX Scene Builder搭建JavaFX可视化开发环境
|
存储 IDE Java
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
172 1
|
XML 设计模式 前端开发
JavaFx-桌面应用开发利器(三)FXML和Scene Builder
本文首先简单介绍了Fxml和Scene Builder的基本知识,同时以eclipse为例,通过代码的形式说明如何进行Fxml的开发,最后使用SceneBuilder进行​应用快速开发。同时说明在使用eclipse中可能会遇到的一些问题以及解决办法​。
1033 0
JavaFx-桌面应用开发利器(三)FXML和Scene Builder
|
机器学习/深度学习 JSON 人工智能
IntelliJ IDEA中的神仙插件(写代码必备)(下)
IntelliJ IDEA中的神仙插件(写代码必备)(下)
665 0
IntelliJ IDEA中的神仙插件(写代码必备)(下)
|
数据可视化
JavaFx - 史上最直观的 JavaFx 布局讲解(超多图)BorderPane、StackPane、GridPane、FlowPane、SplitPane、TabPane、AnchorPane等
JavaFx - 史上最直观的 JavaFx 布局讲解(超多图)BorderPane、StackPane、GridPane、FlowPane、SplitPane、TabPane、AnchorPane等
1029 0
JavaFx - 史上最直观的 JavaFx 布局讲解(超多图)BorderPane、StackPane、GridPane、FlowPane、SplitPane、TabPane、AnchorPane等