互联网程序设计第一讲

第一讲 JAVA图形窗口程序设计

完成日期:2018.9.17
GitHub:https://github.com/fyinh/network_programming_course/tree/master/ch01


一、程序设计第一步

  在指定的区域录入信息,到指定的区域显示该信息。图形界面如下图所示。
在这里插入图片描述

知识点:

基于界面的Java字符串读写技术。

程序技术:

用一个Java窗体类来实现,并完成上述的任务。

制作过程:

(1)启动NetBeans平台,新建一个项目,选“JVAVA应用程序”,并命名该项目,如JavaApp,并完成项目创建所需的其它工作(建议项目位置设定为自己的U盘,以便后续的课堂学习)。然后在项目名下新建一个java包,如basicIO,在该包名目下新建一个JFrame窗体程序,命名为IOJFrame;

(2)在IOJFrame的设计界面上分别选右边“组件面板”中的“标签”“文本区域”“文本字段”“按钮”拖放到IOJFrame的设计界面上,并按图1命名各组件。

先试运行IOJFrame.java程序,成功后进行下面的工作。若出现“没有主类”等不能运行的信息,则删除原有项目,重新创建新项目,创建过程中,除了命名和位置信息外,不要改动其他的默认配置信息。

(3)鼠标右击“发送”按钮,如图2,进入源程序代码设计区,设置事件响应动作。
在这里插入图片描述

按钮动作响应代码:
String msg = jTextField1.getText();//从信息录入区中取出字符串
jTextField1.setText(null);  //信息录入区置空 
jTextArea1.append("echo:"+msg +"\n"); //将获取的字符串显示在信息显示区。
说明:

  其中‘\n’为换行显示字符。在运行中若出现响应动作不如期望的,观察组件的变量名(如jTextField1)是否一致。

(4)在“退出”按钮中,添加程序结束运行代码:

System.exit(0);

(5)让字段录入框jTextField1支持回车键和ALT键。
  在界面设计模式下,选中jTextField1框,右击鼠标选中事件下的Action,进入代码设计区,调用发送按钮的功能:

this.jButton1ActionPerformed(evt);

  在界面设计模式下,选中jTextField1框,右击鼠标选中事件下的Key进入代码设计区,调用发送按钮的功能:

if(evt.isAltDown())//在evt事件类中判断Alt按键事件。
	 this.jButton1ActionPerformed(null);

二、程序设计第二步

  将聊天信息同步保存到磁盘文件。

设计思想:

  新增一个文件操作类,完成文件在磁盘方面的读写功能,并对外提供保存给定字符串的功能。

知识点:

  字符流磁盘文件保存技术和多程序文件技术。
重点学习:FileOutputStream类,PrintWriter类。

过程:

(1)新增一个文件保存类FileWrite,负责文件操作有关功能:
基本功能:用来保存给定的字符串内容,见FileWrite代码。
(2)在IOFrame类中定义并实例化FileWrite类,在发送按钮中添加:

FileWrite.append(new Date()+msg);//保存聊天信息到磁盘文件.

(3)在退出按钮中添加:

FileWrite.close();

实践序列图:
在这里插入图片描述

附FileWrite类代码段:

public class FileWriter {
    private PrintWriter pw = null;
    
    public FileWriter() {
        // 使用SAVE AS文件对话框命名文件.
//        JFileChooser jfc = new JFileChooser();
//        jfc.setCurrentDirectory(new File("G:\\"));
//        jfc.showSaveDialog(null);
//        File fileName = jfc.getSelectedFile();
        
        // 或直接指定文件名及保存位置.
        File fileName = new File("G:\\talk1.txt");
        try{
        	//新建并打开一个输出文件. 
            FileOutputStream fw = new FileOutputStream(fileName, true);
            pw = new PrintWriter(fw);  //装饰成字符型输出流.
        }catch(FileNotFoundException ex){
            ex.printStackTrace();
        }    
    }
    
    //定义2个对外的方法. 
    public void append(String msg){ //保存给定的字符串.
        pw.println(msg); //输出msg到磁盘文件末尾,并添加行结束符.
    }
    
    public void close(){
        pw.close(); //关闭该磁盘文件,清空缓冲区
    }
}

多程序中的调用问题:
  在适当的地方定义某个类,在另一个类适当的地方实例化这个类,在要用的地方调用这个类的方法。

三、程序设计进阶之一:文字编辑工具软件

  Netbeans平台提供3种文本编辑窗口组件:
  仅支持纯文本编辑的jTextArea、支持图文的jTextPane和支持各种组件编辑的jEditorPane。
  现以 jTextArea为例,自己动手做一个简单的可文字编辑的办公平台,如下图所示:
在这里插入图片描述

过程:

(1)新建一个窗口,命名WordJFrame,并拖放面板组件jTextArea入窗口中;
(2)拖放面板中的菜单栏jMenuBar到框顶位置;
(3)鼠标右击菜单栏中“文件”,选择分别添加菜单项,并分别命名为“另存为”和“退出”
(4)为“另存为”添加动作:

JFileChooser jfc = new JFileChooser();
jfc.setCurrentDirectory(new File("G:\\"));
jfc.showSaveDialog(null);
File fileName=jfc.getSelectedFile();
PrintWriter pw = null;

try {
 	//新建并打开一个输出文件.   
	FileOutputStream fw=new FileOutputStream(fileName,true);
	pw=new PrintWriter(fw);//装饰成字符型输出流.
} catch (FileNotFoundException ex) {  }

 String msg=jTextArea1.getText();

if(pw!=null){
	pw.print(msg);//保存文件
	pw.close();

(5)在“编辑”中添加“粘贴”菜单项,并设计粘贴动作:

//定义一个裁剪板对象
Clipboard cb=Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable tr=cb.getContents(this);//取系统裁剪板的内容
String msg=null;
if(tr!=null)
try {
  msg=(String)tr.getTransferData(DataFlavor.stringFlavor);//转换成文本数据
 } catch (UnsupportedFlavorException ex) {
 } catch (IOException ex) { }
        
jTextArea1.insert(msg, jTextArea1.getCaretPosition());//在当前光标位置插入文本

四、JAVA知识延伸阅读

1.字节流:8比特一个单元,如键盘输入流、文件输入流、网络输入流,文件输出流、网络输出流等。
支持字节流操作的类有:
OutputStream, FileOutputStream;
InputStream, FileInputStream;

2.字符流:8/16/32比特一个单元,其长度取决采用何种编码算法,如ISO为32位,GB2312/GBK,utf-8等为16位,ASCII为8位。
支持字符和字符串操作的类有:
InputStreamReader,BufferedReader可读字符类,
OutputStreamWriter,PrintWriter可写字符类,

BufferedReader类中有一个常用的readLine()方法,从输入流中读一行字符。
PrintWriter类中有一个常用的println(msg)方法,向输出流中输出一行字符,并自动添加一个行结束符:\n。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值