📄 clientframe.java
字号:
//2008/2/8,计算机网络课程设计
// 程序:ICQ聊天室窗口界面
// 范例文件:ClientFrame.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class ClientFrame extends JFrame
{
JButton loginBtn,sentButton,closeButton,ptpChatBtn;
JTextArea TAChat,TAOnLine;
JTextField TFAddress,ptpAddress, TFSent;
JPanel panel0,panel1,panel2,panel3;
JLabel label0=new JLabel("当前在线:");
clientskt client0; // 客户端联机处理线程0(用于发送聊天信息)
clientskt1 client1; // 客户端联机处理线程1(用于发送当前在线信息)
private JMenu fileMenu,aboutMenu;
private JMenuBar menuBar;
private JMenuItem exitMenuItem,registMenuItem,aboutMenuItem;
AboutDialog aboutDialog;
static ClientFrame frm;
PtpChatFrame PtpCF;
InetAddress serverAddress; //对方IP地址
int ScreenWidth,ScreenHeight;
RegistFrame registFrame;
String serAddress ;
private ImageIcon copyrightImage = new ImageIcon();
public ClientFrame()
{
loginBtn = new JButton("登陆"); //JButton
ptpChatBtn = new JButton("私聊");
ptpChatBtn.setEnabled(false); //setEnabled
copyrightImage = new ImageIcon(AboutDialog.class.getResource("images\\info_enter .png"));//image
sentButton= new JButton("发送", copyrightImage) ;//JButton with image
sentButton.setDisabledIcon(copyrightImage);
closeButton= new JButton("关闭");
closeButton.setEnabled(false);
TAChat = new JTextArea("", 10, 50); //JTextArea , TAChat for chat info
TAOnLine = new JTextArea("", 10, 8); //JTextArea TAOnLine for OnLine info
JScrollPane scrollpane = new JScrollPane(TAChat);
scrollpane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollpane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JScrollPane scrollpane1 = new JScrollPane(TAOnLine);
scrollpane1.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollpane1.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
TFSent = new JTextField(50); // 文字输入字段
TFAddress = new JTextField("输入IP地址", 11); // IP字段
ptpAddress= new JTextField("输入对方IP地址", 11);
ptpAddress.setEnabled(false);
// copyrightImage = new ImageIcon(AboutDialog.class.getResource("images\\hand.png"));
// setIconImage( );
fileMenu = new JMenu("文件");
registMenuItem = new JMenuItem("注册");
registMenuItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0); //退出系统
}
}
);
// fileMenu.setMnemonic('F');
exitMenuItem = new JMenuItem("退出");
// exitMenuItem.setMnemonic('E');
exitMenuItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0); //退出系统
}
}
);
fileMenu.add(registMenuItem);
fileMenu.add(exitMenuItem);
aboutMenu = new JMenu("帮助");
//aboutMenu.setMnemonic('H');
aboutMenuItem = new JMenuItem("关于");
aboutMenuItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
aboutDialog=new AboutDialog(); //生成Dialog对象
}
}
);
aboutMenu.add(aboutMenuItem);
menuBar = new JMenuBar();
menuBar.add(fileMenu);
menuBar.add(aboutMenu);
setJMenuBar(menuBar);
// label = new JLabel("请点击按钮或执行菜单操作");
// label.setFont(new Font("Serif", Font.ITALIC , 18));
TFSent.addKeyListener(new TFListener()); // 注册事件
// TAChat.setEditable(false); //TAChat 不可写
// TAOnLine.setEditable(false); //TAOnLine 不可写
setLayout(new BorderLayout()); // 设定版面配置
panel0 = new JPanel();
panel0.setLayout(new FlowLayout());
panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
panel3 = new JPanel();
panel3.setLayout(new GridLayout(1,2));
add(BorderLayout.NORTH,panel0 ); //登陆板块
add(BorderLayout.CENTER,scrollpane ); //聊天信息显示板块
add(BorderLayout.EAST,panel1 ); //在线提示板块
add(BorderLayout.SOUTH,panel2); //发送信息,与关闭板块
panel0.add(TFAddress);
panel0.add(loginBtn);
panel0.add(ptpAddress);
panel0.add(ptpChatBtn);
panel1.add(label0,BorderLayout.NORTH);
panel1.add(scrollpane1,BorderLayout.CENTER);
panel2.add(TFSent,BorderLayout.NORTH);
panel2.add(panel3,BorderLayout.CENTER); //底端按钮
panel3.add(sentButton);
panel3.add(closeButton);
setSize(400, 300); //设置初始大小
ScreenWidth = getToolkit().getScreenSize().width;//将窗口置于屏幕中央,宽度与高度皆为屏幕一半
ScreenHeight = getToolkit().getScreenSize().height;
setLocation((ScreenWidth - getWidth()) / 2,(ScreenHeight - getHeight()) / 2);
setResizable(false); //窗口大小不可变
setTitle("欢迎来到ICQ聊天室"); //设置Title
setVisible(true); //窗口为可见
// 按下“客户端”按钮的事件处理
loginBtn.addActionListener( //登陆按钮
new ActionListener() {
String strs;
public void actionPerformed(ActionEvent e) {
try{ serverAddress = InetAddress.getLocalHost() ;
serAddress = InetAddress.getLocalHost( ).toString() ; //获取计算机名与地址
strs =InetAddress.getLocalHost().getHostAddress().toString();//获取计算机地址
// strs =InetAddress.getLocalHost().getHostName() .toString();
}
catch (Exception e2) {
System.out.println ("Exception occurred with socket.");
System.out.println (e2);
System.exit (1);
}
// TAChat.append( "getLocalHost:"+serverAddress.toString() +"\n" );
// TAChat.append( strs+"\n" );
// client0 = new clientskt(strs, 8000, frm); // 建立客户端联机线程
// client1 = new clientskt1(strs, 8001, frm);
client0 = new clientskt(TFAddress.getText(), 8000, frm); // 建立客户端联机线程
client1 = new clientskt1(TFAddress.getText(), 8001, frm);
client0.start(); // 启动线程进行联机
client1.start();
TFAddress.setEnabled(false); // 设定按钮与上面文字字段失效与否
loginBtn.setEnabled(false);
closeButton.setEnabled(true);
ptpAddress.setEnabled(true);
ptpChatBtn.setEnabled(true);
}
}
);
registMenuItem.addActionListener( //注册按钮(登陆前先注册)
new ActionListener() {
public void actionPerformed(ActionEvent e) {
registFrame = new RegistFrame();
}
}
);
ptpChatBtn.addActionListener( //私聊按钮(一对一聊天)
new ActionListener() {
public void actionPerformed(ActionEvent e) {
PtpCF=new PtpChatFrame(frm);
}
}
);
sentButton.addActionListener( //发送按钮事件(发送消息)
new ActionListener() {
public void actionPerformed(ActionEvent e) {
client0.dataout(TFSent.getText());
TFSent.setText("");
}
}
);
closeButton.addActionListener( //关闭按钮事件 (退出)
new ActionListener() {
public void actionPerformed(ActionEvent e) {
client0.dataout("bye");
System.exit(0);
}
}
);
addWindowListener( // 按下关闭钮时结束程序
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
}
public static void main(String args[])
{
frm = new ClientFrame();
}
private class TFListener implements KeyListener// 下方输入字段的键盘事件处理
{
public void keyPressed(KeyEvent e)
{
// 如果按下的是Enter键
if(e.getKeyCode() == KeyEvent.VK_ENTER)
{
client0.dataout(TFSent.getText());
// 清除下方文字字段内容
TFSent.setText("");
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -