本学期选修了互联网程序设计,因此博客开始分享关于互联网程序设计的内容。本篇为基础篇,先来复习巩固javaFX的内容,往后将使用java实现简单的网络通信和包抓取以及分析。

先来说一下本次要实现的目标:实现一个静态窗口界面,要求有一个输入的文本框和一个显示内容的文本框,输入文本框可以实现按Enter发送信息到内容文本框,文本框不可编辑。同时要设计几个按钮,包括存储,加载和退出等。大概样式如下图:

先来展示一下界面的简单代码:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDateTime;public class SimpleFx extends Application {//全局定义button按钮private Button btnExit = new Button("退出");private Button btnSend = new Button("发送");private Button btnOpen = new Button("加载");private Button btnSave = new Button("保存");private Button btnClear = new Button("清空");private TextField tfSend = new TextField();//显示信息的文本区域,注意展示对话的框使用的是TextArea,因为TextArea能非常简单实现只读private TextArea taDisplay = new TextArea();public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {BorderPane mainPane = new BorderPane();//内容显示区域VBox vBox = new VBox();vBox.setSpacing(10);//各个控件之间的间距//设置对话框的最大变化范围,这里统一设置为最大double,即0x3f3f3f3f,这样当我们将窗口拖长时,对话框也可以自适应的变大或变小taDisplay.setMaxSize(Double.MAX_VALUE,Double.MAX_VALUE);//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面板中内容距离四周的留空区域hBox.setAlignment(Pos.CENTER_RIGHT);//靠右对齐hBox.getChildren().addAll(btnSend,btnSave,btnOpen,btnExit,btnClear);mainPane.setBottom(hBox);Scene scene = new Scene(mainPane,700 , 400);primaryStage.setScene(scene);primaryStage.setTitle("阿柴的简单对话小程序");primaryStage.show();

界面的代码其实比较简单,接下来解决对话框只读和自动换行。

 //自动换行只读taDisplay.setWrapText(true);taDisplay.setEditable(false);

至此,界面基本设置完毕,接下来就是实现功能的环节。首先是对我们按钮赋予功能,即setAction

 //推出按钮动作设置,这里非常好理解,一般程序正常推出即是返回0,所以直接System.exit(0)就完事btnExit.setOnAction(event -> { System.exit(0);});//发送按钮的动作设置btnSend.setOnAction(event -> {String msg = tfSend.getText();taDisplay.appendText(msg + "\n");//将tfSend中的字符加到taDisplay中并加上换行符号tfSend.clear();//清空tfSend});//实现按回车发送和 Shift+回车,则在信息前加上 echo: 的信息头再发送,这里我们就要用到键盘的监听器KeyPressedtfSend.setOnKeyPressed(event -> {if(event.getCode() == KeyCode.ENTER){ //判断是否按下回车event.consume(); if(event.isShiftDown()){  //判断按下回车的同时按下shiftString msg = tfSend.getText();taDisplay.appendText("echo:" + msg + "\n");//将tfSend中的字符加到taDisplay中并自动换行tfSend.clear();//清空tfSend}else{ //当只输入回车时,就直接发送String msg = tfSend.getText();taDisplay.appendText(msg + "\n");//将tfSend中的字符加到taDisplay中并自动换行tfSend.clear();//清空tfSend}}});btnSave.setOnAction(event -> {//这里新建一个TextFileIO类实例化为textFileIOTextFileIO textFileIO = new TextFileIO();//添加当地时间信息进行保存textFileIO.append(LocalDateTime.now().withNano(0) +"\n"+ taDisplay.getText());});btnOpen.setOnAction(event -> {//新建一个TextFileIO类实例化为textFileIOTextFileIO textFileIO = new TextFileIO();String msg = textFileIO.load();if(msg != null){taDisplay.clear();taDisplay.setText(msg);}});btnClear.setOnAction(event -> {taDisplay.clear();  //清除对话框中的内容});

上述加载和保存的事件设置中,我们要用到TextFileIO这个自定义类以及该类的方法,因此我们要自己写这个类。由于该类中涉及一些文本读取缓存和存入的操作,本人不是特别清除,因此注释会没那么详细。

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 TextFileIO {private PrintWriter pw;//写private Scanner sc;//扫描public TextFileIO(){}//内容添加到文件中,文件通过对话框来确定public void append(String msg) {FileChooser fileChooser = new FileChooser(); //选择文件的窗口File file = fileChooser.showSaveDialog(null); //默认选择的文件路径为空if(file == null) //用户放弃操作则返回return;//以追加模式utf-8的编码模式写到文件中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();   //将字符缓冲区变成string类型}
}

先说明一下FileChooser fileChooser = new FileChooser();该窗口如下:

最后补充一下一些文件流,输出流的内容。



使用javaFX的TextField实现简单对话框设计——互联网程序设计基础(1)相关推荐

  1. CCF爬梯第二期(简单题 · C语言程序设计基础)

    这期的题目比第一期偏难一些,还是自己打的,没有标准答案,这些简单的题目和答案应该可以看得懂,而且解释起来有些特别麻烦,就不解释了. 2017-03-2学生排队 问题描述 体育老师小明要将自己班上的学生 ...

  2. 【Inkscape】简单logo设计(详细)

    目录 [Inkscape]简单logo设计 一.打开Inkscape 二.过程步骤 三.修饰 [Inkscape]简单logo设计 使用Inkscape设计一款简单的logo.效果图如下: 一.打开I ...

  3. Qt5.9.1 简单字体设计(UI设计)

    最近自学了下Qt,本节讲一下如何进行些简单的字体设计,有什么问题互相交流. 步骤如下: 一:创建一个Widget Application项目samp1,在创建窗体时选择基类QDialog,生成的类命名 ...

  4. 海龟编辑器怎么运行html,使用海龟编辑器编写一个GUI简单对话框

    海龟编辑器是一款专为青少年提供的编程学习软件,海龟编辑器可以帮助青少年快速的理解和记忆PAthon这门语言,了解GUI的世界,该软件集合了多项库功能,第一类,识别功能,该功能可以识别图像.人脸.声音等 ...

  5. 简单网页设计之表格版

    简单网页设计之表格版 <html> <meta http-equiv=Content-Type content="text/html; charset=UTF-8" ...

  6. WindowsPhone7开发简单豆瓣网应用程序之界面设计

    WindowsPhone7开发简单豆瓣网应用程序之界面设计 最近自学了一点WindowsPhone7的知识,自己就利用豆瓣网API开发了一个小的搜索程序.好了!先看看程序运行效果吧! (启动界面) ( ...

  7. leetcode 《简单》 设计问题 Python实现

    leetcode <简单> 设计问题 Python实现''' Shuffle an Array 打乱一个没有重复元素的数组.示例: // 以数字集合 1, 2 和 3 初始化数组. int ...

  8. 色彩丰富的水彩纹理背景,配合排版和简单的设计元素,给任何设计带来乐趣。

    使用水彩背景和纹理,水彩绘画效果,是一种设计趋势,并将在2021年继续这种趋势. 这些独特的色彩丰富的背景可以很好地配合排版和简单的设计元素,给任何设计带来乐趣. 背景是任何设计项目的重要组成部分. ...

  9. AutoCADDCL对话框设计示例八

    AutoCADDCL对话框设计示例八,代码如下. dcl:dialog {     label = "第八个DCL设计" ;     :row {         :boxed_c ...

最新文章

  1. R对因子变量的等级进行重新排序(Reorder Factor Levels)
  2. sqlite3 增删更改查询 callback使用
  3. 经典C语言程序100例之二四
  4. day3----python变量与常量
  5. 【LeetCode】24. Swap Nodes in Pairs
  6. 【Java】Java中的在Linux和Mac以及Windows上使用File.separator的坑
  7. C语言和设计模式(工厂模式)
  8. ASP.NET MVC RedirectToRoute类[转]
  9. Python爬虫实战01:Requests+正则表达式爬取猫眼电影
  10. 为什么现在的手机不像以前一样可以换电池?
  11. 年终盘点:2010年半导体产业的十大进展-转自老杳
  12. 一、传统应用带来的问题
  13. 数学与计算机学院女生节标语,3.7女生节标语
  14. JAVA中this三种方法详解
  15. 怎么设置日历隔一天提醒
  16. 【matlab】拟合直线的方法
  17. 浙大计算机学院辅导员,浙大博士应聘辅导员被指丢脸 月薪仅1000元
  18. elasticsearch安装和配置,elasticsearch启动报错:can not run elasticsearch as root
  19. ERROR: ExpansionError during parsing
  20. 一个使用javafx编写电子相片管理程序

热门文章

  1. Java面试题集锦(含答案)
  2. 时代催生枭雄——XFS应运而生
  3. Sandcastle----强大的C#文档生成工具
  4. 东哥:你的书咋样了?
  5. PDF.js对打印、下载按钮做限制,pdf文件加水印
  6. 4G通信模块在嵌入式ARM Linux下的应用
  7. 外汇占款激增究竟是谁惹的祸
  8. Ascending Rating(单调队列)
  9. Splunk系列:Splunk搜索分析篇(四)
  10. JSP Cookies处理