因为我用的是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文件的内容(要配合相应的服务器端,可看《计算机网络作业(修改完)》)。
1
import java.io.*;
2
import java.net.*;
3
import javax.swing.*;
4
5
public 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) {
}
}