计算机网络作业客户端图形界面简易制作方法

因为我用的是NetBeans6.5中文版,所以只说用它怎么做。

1.到http://zh-cn.netbeans.org/download/6.5/ml/下载NetBeans6.5的Java SE版,37M大小,注意选择合适的语言及平台。

2.安装完毕后打开NetBeans6.5(加载时有点慢,请耐心等待)。

3.选择“文件”——》“新建项目”。

4.(类别为Java,项目为Java应用程序)点“下一步”。项目名称及项目位置随个人喜好,点“完成”。

5.选择“文件”——》“新建文件”。

6.类别选“Swing GUI 窗体”,文件类型选“JFrame 窗体”,点“下一步”。类名随个人喜好,点“完成”。此时NetBeans中间即为一个空白的窗体。点击“源(S)”可以看到它的源代码,点击“设计(D)”可以不管代码直接在空白窗体上设计外观。

NetBeans右边是“组件面板”,本例中的简单的图形界面只用到“组件面板”中“Swing 控件”的“标签”(用于显示文字)、“按钮”(作用很明显啦)、“文本字段”(用于用户输入网址)、“文本区域”(用于显示服务器的响应报文)。

7.将以上Swing 控件拖到空白的窗体中,按个人喜好设计外观。在这些控件上点击右键,选择“编辑文本”可以修改显示内容。在“源(S)”,“设计(D)”按钮的右边有3个按钮,第三个有个眼睛的按钮点击时可以预览完成后的外观。

8.窗口设计完成后就可以添加客户端代码了。

以下是一个没有用这个窗口的客户端代码,功能是返回本机的一个String.txt文件的内容(要配合相应的服务器端,可看《计算机网络作业(修改完)》)。

 1import java.io.*;
 2import java.net.*;
 3import javax.swing.*;
 4
 5public class Client {
 6
 7    public static void main(String[] args) throws Exception {
 8        String hostName = JOptionPane.showInputDialog(null"输入目标IP或网址(默认为本机IP)""127.0.0.1");
 9        String portS = JOptionPane.showInputDialog(null"输入目标端口(默认为8080)""8080");
10        int port = Integer.parseInt(portS);
11        Socket clientSocket = new Socket(hostName, port);
12
13        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
14
15        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
16
17        String get = "GET /string.txt HTTP/1.0\r\n";
18        outToServer.writeBytes(get);
19        outToServer.writeBytes("\r\n");
20
21        String result = inFromServer.readLine();
22        String output = "";
23        while (result != null{
24            output += result + "\r\n";
25            result = inFromServer.readLine();
26        }

27        clientSocket.close();
28
29        JOptionPane.showMessageDialog(null, output);
30    }

31}

如何将它与窗口结合呢?

此时要点“源(S)”编辑源代码。

首先import3个包:

import java.io.*;
import java.net.*;
import java.awt.event.*;

然后在public class NewJFrame extends javax.swing.JFrame后面加上implements MouseListener//即实现鼠标监听器接口

此时该行左侧出现一个提示图标,单击该图标,选择“实现所有抽象方法”

此时代码最下方新增如下代码

 

    public void mouseClicked(MouseEvent e) {
        
throw new UnsupportedOperationException("Not supported yet.");
    }


    
public void mousePressed(MouseEvent e) {
        
throw new UnsupportedOperationException("Not supported yet.");
    }


    
public void mouseReleased(MouseEvent e) {
        
throw new UnsupportedOperationException("Not supported yet.");
    }


    
public void mouseEntered(MouseEvent e) {
        
throw new UnsupportedOperationException("Not supported yet.");
    }


    
public void mouseExited(MouseEvent e) {
        
throw new UnsupportedOperationException("Not supported yet.");
    }

 

删掉全部“throw new UnsupportedOperationException("Not supported yet.");”

把刚刚的客户端类的main方法中的语句复制到mouseClicked方法中,并作修改如下:

 

 1    public void mouseClicked(MouseEvent e) {
 2        try {
 3
 4//            以下语句删除
 5//        String hostName = JOptionPane.showInputDialog(null,
 6//                "输入目标IP或网址(默认为本机IP)", "127.0.0.1");
 7//        String portS = JOptionPane.showInputDialog(null,
 8//                "输入目标端口(默认为8080)", "8080");
 9//        int port = Integer.parseInt(portS);
10
11            String hostName = jTextField1.getText(); //新增语句,作用为得到文本字段的字符串
12            Socket clientSocket = new Socket(hostName, 80); //把port改为80
13            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
14            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
15            String get = "GET / HTTP/1.0\r\n"//把“String.txt”删掉
16            outToServer.writeBytes(get);
17            outToServer.writeBytes("\r\n");
18            String result = inFromServer.readLine();
19            String output = "";
20            while (result != null{
21                output += result + "\r\n";
22                result = inFromServer.readLine();
23            }

24            clientSocket.close();
25
26//            以下语句删除
27//        JOptionPane.showMessageDialog(null, output);
28
29            jTextArea1.setText(output); //新增语句,作用为把服务器的响应显示在文本区域中
30        }

31        catch (Exception ex) {
32            jTextArea1.setText(ex.getMessage());//若出错,将错误信息显示在文本区域中
33            System.exit(0);
34        }

35    }

36
37


因为以上代码可能抛出异常,所以要用try-catch语句围绕,写好以上代码后按Shift+Alt+F,NetBeans将代码自动缩进成默认格式。

例如输入代码时没对齐好:
   

String hostName = jTextField1.getText(); //新增语句,作用为得到文本字段的字符串
         Socket clientSocket = new Socket(hostName, 80); //把port改为80
            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer 
= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
      String get 
= "GET / HTTP/1.0\r\n"//把“String.txt”删掉
outToServer.writeBytes(get);
     outToServer.writeBytes(
"\r\n");
String result 
= inFromServer.readLine();


按Shift+Alt+F,代码会自动对齐。

然后将窗口构造方法改为:

    public NewJFrame() {
        initComponents();//窗口初始化方法,由NetBeans自动生成,不要修改
        jButton1.addMouseListener(this);//新增语句,为按钮添加鼠标监听器
    }

最后将main方法改为:

    public static void main(String args[]) {
//        以下语句删除
//        java.awt.EventQueue.invokeLater(new Runnable() {
//
//            public void run() {
//                new NewJFrame().setVisible(true);
//            }
//        });
        NewJFrame frame = new NewJFrame();//新增语句,创建窗口
        frame.setVisible(true);//新增语句, 令窗口可见
    }

现在的窗口已经有客户端的功能了。

按Shift+F6可以运行,试试链接到百度(在文本字段输入“www.baidu.com”)。

以下是本例的全部代码,编译后可运行。

import java.io.*;
import java.net.*;
import java.awt.event.*;

public class NewJFrame extends javax.swing.JFrame implements MouseListener {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();//窗口初始化方法,由NetBeans自动生成,不要修改
        jButton1.addMouseListener(this);//新增语句,为按钮添加鼠标监听器
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("网址");

        jButton1.setText("链接");

        jTextField1.setText("www.baidu.com");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 289, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 247, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
//        以下语句删除
//        java.awt.EventQueue.invokeLater(new Runnable() {
//
//            public void run() {
//                new NewJFrame().setVisible(true);
//            }
//        });
        NewJFrame frame = new NewJFrame();//新增语句,创建窗口
        frame.setVisible(true);//新增语句, 令窗口可见
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration

    public void mouseClicked(MouseEvent e) {
        try {
//            以下语句删除
//        String hostName = JOptionPane.showInputDialog(null,
//                "输入目标IP或网址(默认为本机IP)", "127.0.0.1");
//        String portS = JOptionPane.showInputDialog(null,
//                "输入目标端口(默认为8080)", "8080");
//        int port = Integer.parseInt(portS);
            String hostName = jTextField1.getText(); //新增语句,作用为得到文本字段的字符串
            Socket clientSocket = new Socket(hostName, 80); //把port改为80
            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String get = "GET / HTTP/1.0\r\n"; //把“String.txt”删掉
            outToServer.writeBytes(get);
            outToServer.writeBytes("\r\n");
            String result = inFromServer.readLine();
            String output = "";
            while (result != null) {
                output += result + "\r\n";
                result = inFromServer.readLine();
            }
            clientSocket.close();
//            以下语句删除
//        JOptionPane.showMessageDialog(null, output);
            jTextArea1.setText(output); //新增语句,作用为把服务器的响应显示在文本区域中
        }
        catch (Exception ex) {
            jTextArea1.setText(ex.getMessage());//若出错,将错误信息显示在文本区域中
            System.exit(0);
        }
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }
}

posted on 2009-01-17 18:33 物一 阅读(251) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

留言簿

文章档案

搜索

最新评论