?? mainframe.java
字號:
package multiclientnew;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.border.EtchedBorder;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import javax.swing.JTextArea;
import java.net.*;
import java.io.*;
import java.util.Vector;
import java.util.StringTokenizer;
import javax.swing.JList;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class MainFrame extends JFrame {
String nameRequest;
String ipRequest;
String iplocal;
Socket socket = null;
BufferedReader cin = null;
PrintStream cout = null;
String clientName = "";
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JMenu jMenuHelp = new JMenu();
JMenuItem jMenuHelpAbout = new JMenuItem();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JPanel jPanel1 = new JPanel();
Border border1 = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,
Color.white, new Color(148, 145, 140));
Border border2 = new TitledBorder(border1, "MESSAGE");
BorderLayout borderLayout1 = new BorderLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
JPanel jPanel2 = new JPanel();
JScrollPane jScrollPane2 = new JScrollPane();
JTextArea jTextArea2 = new JTextArea();
JButton jButton2 = new JButton();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JPanel jPanel3 = new JPanel();
BorderLayout borderLayout3 = new BorderLayout();
JList jList1 = new JList();
JButton jButton1 = new JButton();
public MainFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
border1 = new TitledBorder(BorderFactory.createEtchedBorder(
EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)),
"people");
border2 = new TitledBorder(BorderFactory.createEtchedBorder(
EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)),
"message");
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(460, 420));
setTitle("Frame Title");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(new
MainFrame_jMenuFileExit_ActionAdapter(this));
jMenuHelp.setText("Help");
jMenuHelpAbout.setText("About");
jMenuHelpAbout.addActionListener(new
MainFrame_jMenuHelpAbout_ActionAdapter(this));
jLabel1.setBorder(null);
jLabel1.setText("服務器ip");
jLabel1.setBounds(new Rectangle(15, 12, 55, 31));
jTextField1.setBounds(new Rectangle(76, 17, 97, 22));
jPanel1.setBackground(new Color(219, 229, 246));
jPanel1.setBorder(border2);
jPanel1.setBounds(new Rectangle(15, 44, 312, 177));
jPanel1.setLayout(borderLayout1);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jPanel2.setBackground(new Color(219, 229, 246));
jPanel2.setBorder(border2);
jPanel2.setBounds(new Rectangle(15, 239, 312, 122));
jPanel2.setLayout(null);
jButton2.setBackground(new Color(218, 227, 245));
jButton2.setBounds(new Rectangle(226, 93, 80, 23));
jButton2.setForeground(new Color(146, 161, 198));
jButton2.setText("發送");
jButton2.addActionListener(new MainFrame_jButton2_actionAdapter(this));
jLabel3.setText("客戶名稱");
jLabel3.setBounds(new Rectangle(187, 14, 57, 28));
jTextField3.setBounds(new Rectangle(264, 18, 75, 22));
jPanel3.setBackground(new Color(219, 229, 246));
jPanel3.setBorder(border1);
jPanel3.setBounds(new Rectangle(330, 47, 121, 313));
jPanel3.setLayout(borderLayout3);
jTextArea1.setEditable(false);
jList1.addMouseListener(new MainFrame_jList1_mouseAdapter(this));
contentPane.setBackground(new Color(235, 241, 250));
jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane2.setBounds(new Rectangle(6, 19, 300, 74));
jButton1.setBounds(new Rectangle(361, 16, 77, 26));
jButton1.setText("連接");
jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
jMenuBar1.add(jMenuHelp);
jMenuHelp.add(jMenuHelpAbout);
contentPane.add(jLabel1);
contentPane.add(jPanel1);
contentPane.add(jPanel2);
contentPane.add(jTextField1);
contentPane.add(jLabel3);
contentPane.add(jTextField3);
contentPane.add(jPanel3);
contentPane.add(jButton1);
jPanel3.add(jList1, java.awt.BorderLayout.CENTER);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTextArea1);
jScrollPane2.getViewport().add(jTextArea2);
jPanel2.add(jScrollPane2, null);
jPanel2.add(jButton2, null);
setJMenuBar(jMenuBar1);
}
/**
* File | Exit action performed.
*
* @param actionEvent ActionEvent
*/
void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
String str="QUIT";
cout.println(str);
jTextArea1.append("客戶請求斷開連接\n");
System.exit(0);
}
/**
* Help | About action performed.
*
* @param actionEvent ActionEvent
*/
void jMenuHelpAbout_actionPerformed(ActionEvent actionEvent) {
MainFrame_AboutBox dlg = new MainFrame_AboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.pack();
dlg.setVisible(true);
}
public void jButton2_actionPerformed(ActionEvent e) {
String str = jTextArea2.getText();
str = "MSG:"+clientName+":"+str;
jTextArea2.setText("");
cout.println(str);
}
public void jButton3_actionPerformed(ActionEvent e) {
String str="QUIT";
cout.println(str);
jTextArea1.append("客戶請求斷開連接\n");
}
public void jList1_mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
String str=new String();
str= jList1.getSelectedValue().toString();
String namef = str.substring(0,str.indexOf("/"));
String ip = str.substring(str.indexOf("/")+1);
String names = jTextField3.getText();
jTextArea1.append("向"+namef+"提出私聊請求\n");
cout.println("ConnectionRequest:"+namef+":"+ip+":"+names+":"+iplocal);
}
}
public void jButton1_actionPerformed(ActionEvent e) {
try{
InetAddress ip = InetAddress.getByName(jTextField1.getText());
int port = 6666;
socket = new Socket(ip,port);
jTextArea1.append("系統提示:與服務器連接成功...........\n");
String str2 = this.socket.getLocalAddress().toString();
iplocal = str2.substring(1);
System.out.println(iplocal);
}catch(IOException e1){
jTextArea1.append("服務器端口打開出錯\n");
}
if(socket!=null){
jTextArea1.append("系統提示與服務器連接成功............\n");
clientName = jTextField3.getText().trim();
try{
cin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
cout = new PrintStream(socket.getOutputStream());
String str = "PEOPLE:"+clientName;
cout.println(str);
ReadMessageThread readThread = new ReadMessageThread();
readThread.start();
}catch(IOException e3){
jTextArea1.append("輸入輸出異常\n");
}
}
}
class ReadMessageThread extends Thread{
public void run(){
String line = "";
while(true){
try{
line = cin.readLine();
}catch(IOException e){
jTextArea1.append("輸入輸出異常\n");
}
StringTokenizer st = new StringTokenizer(line,":");
String keyword = st.nextToken();
if(keyword.equalsIgnoreCase("QUIT")){
try{
socket.close();
jTextArea1.append("接收到服務器同意斷開信息,套接字關閉\n");
}catch(IOException e){
jTextArea1.append("套接字關閉異常\n");
}
this.stop();
}else if(keyword.equalsIgnoreCase("PEOPLE")){
Vector imessage = new Vector();
while(st.hasMoreTokens())
imessage.addElement(st.nextToken());
jList1.setListData(imessage);
}else if(keyword.equalsIgnoreCase("ConnectionRequest")){
String nameConnection = st.nextToken();
String ipConnection = st.nextToken();
nameRequest = st.nextToken();
ipRequest = st.nextToken();
if(nameConnection.equalsIgnoreCase(jTextField3.getText())){
JDialogConnection dgc = new JDialogConnection(nameConnection,nameRequest,ipRequest,cout,iplocal);
}
}else if(keyword.equalsIgnoreCase("ConnectionYes")){
String ip1;
ip1 = st.nextToken();
String ip2;
ip2 = st.nextToken();
String dk = st.nextToken();
int portget = Integer.parseInt(dk);
if(ip1.equalsIgnoreCase(iplocal)){
jTextArea1.append("同意連接\n");
PtoPChat first = new PtoPChat(ip2,portget);
}
if(ip2.equalsIgnoreCase(iplocal)){
jTextArea1.append("同意連接\n");
PtoPChat second = new PtoPChat(ip1,portget);
}
}else if(keyword.equalsIgnoreCase("ConnectionNo")){
String ip1;
ip1 = st.nextToken();
String ip2;
ip2 = st.nextToken();
if(ip1.equalsIgnoreCase(iplocal)){
jTextArea1.append("拒絕連接\n");
}
if(ip2.equalsIgnoreCase(iplocal)){
jTextArea1.append("拒絕連接\n");
}
}else{
String message = st.nextToken("\0");
message = message.substring(1);
jTextArea1.append(message+"\n");
}
}
}
}
}
class MainFrame_jButton1_actionAdapter implements ActionListener {
private MainFrame adaptee;
MainFrame_jButton1_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class MainFrame_jList1_mouseAdapter extends MouseAdapter {
private MainFrame adaptee;
MainFrame_jList1_mouseAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.jList1_mouseClicked(e);
}
}
class MainFrame_jButton2_actionAdapter implements ActionListener {
private MainFrame adaptee;
MainFrame_jButton2_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class MainFrame_jMenuFileExit_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuFileExit_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuFileExit_actionPerformed(actionEvent);
}
}
class MainFrame_jMenuHelpAbout_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuHelpAbout_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuHelpAbout_actionPerformed(actionEvent);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -