2021-09-06

这是一个使用JavaFX编写的简单聊天应用程序,包括退出、发送、加载和保存功能。用户可以在文本框中输入信息,按下发送按钮将信息显示在文本区域。程序还支持通过键盘快捷键发送信息,并能加载和保存聊天记录到文件。
摘要由CSDN通过智能技术生成
package chapter01;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Label;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.control.Button;
import chapter01.test2;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.util.Scanner;


public class test1 extends Application {

  private Button btnExit = new Button("退出");
  private Button btnSend = new Button("发送");
  private Button btnOpen = new Button("加载");
  private Button btnSave = new Button("保存");
  //待发送信息的文本框
  private TextField tfSend = new TextField();
  //显示信息的文本区域
  private TextArea taDisplay = new TextArea();



  @Override
  public void start(Stage primaryStage) {
    BorderPane mainPane = new BorderPane();
    //内容显示区域
    VBox vBox = new VBox();
    vBox.setSpacing(10);//各控件之间的间隔
    //VBox面板中的内容距离四周的留空区域
    vBox.setPadding(new Insets(10,20,10,20));
    vBox.getChildren().addAll(new Label("信息显示区:"),
      taDisplay,new Label("信息输入区:"), tfSend);
    //设置显示信息区的文本区域可以纵向自动扩充范围
    VBox.setVgrow(taDisplay, Priority.ALWAYS);
    mainPane.setCenter(vBox);
    //底部按钮区域
    HBox hBox = new HBox();
    hBox.setSpacing(10);
    hBox.setPadding(new Insets(10,20,10,20));
    hBox.setAlignment(Pos.CENTER_RIGHT);
    hBox.getChildren().addAll(btnSend,btnSave,btnOpen,btnExit);
    mainPane.setBottom(hBox);
    Scene scene = new Scene(mainPane,700,400);
    primaryStage.setScene(scene);
    primaryStage.show();


//--------事件处理代码部分--------
    Platform.runLater(new Runnable() {
      @Override
      public void run() {
        tfSend.requestFocus();
        taDisplay.setEditable(false);
        taDisplay.setWrapText(true);
      }
    });


//tuichu
    btnExit.setOnAction(event -> {System.exit(0);});

    //fason
    btnSend.setOnAction(event -> {
      String msg = tfSend.getText();
      taDisplay.appendText(msg + "\n");
      tfSend.clear();
    });

    //huichexiangying
    tfSend.setOnKeyPressed(new EventHandler<KeyEvent>() {
      @Override
      public void handle(KeyEvent event) {
        if (event.isShiftDown() && event.getCode() == KeyCode.ENTER){
          String msg = tfSend.getText();
          taDisplay.appendText("echo: "+msg + "\n");
          tfSend.clear();
        }
        else if (event.getCode() == KeyCode.ENTER){
          String msg = tfSend.getText();
          taDisplay.appendText(msg + "\n");
          tfSend.clear();
        }
      }
    });

    test2 textFileIO = new test2();

    btnSave.setOnAction(event -> {
      textFileIO.append(
        LocalDateTime.now().withNano(0) +" "+ taDisplay.getText());

    });


    btnOpen.setOnAction(event -> {
      String msg = textFileIO.load();
      if(msg != null){
        taDisplay.clear();
        taDisplay.setText(msg);
      }
    });



  }





  public static void main(String[] args) {
    launch(args);
  }



}

package chapter01;

import javafx.stage.FileChooser;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class test2 {

    private PrintWriter pw;
    private Scanner sc;


    public test2() {

    }

    public void append(String msg){
      FileChooser fileChooser = new FileChooser();
      File file = fileChooser.showSaveDialog(null);
      if (file == null)
        return;
      try{
        pw = new PrintWriter(
          new OutputStreamWriter(
            new FileOutputStream(file,true),"utf-8"));
        pw.println(msg);
      }catch(Exception e){
        e.printStackTrace();
      }finally {
        pw.close();
      }
    }



    public String load(){
      FileChooser fileChooser = new FileChooser();
      File file = fileChooser.showOpenDialog(null);
      if(file == null) //用户放弃操作则返回
        return null;
      StringBuilder sb = new StringBuilder();
      try {
        //读和写的编码要注意保持一致
        sc = new Scanner(file,"utf-8");
        while (sc.hasNext()) {
          sb.append(sc.nextLine() + "\n"); //补上行读取的行末尾回车
        }
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        sc.close();
      }
      return sb.toString();
    }

}




使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值