?? qq.java
字號:
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.*;
import java.io.*;
import java.net.*;
////client
public class QQ {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
MyFrame frame=new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
}
class MyFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public MyFrame(){
setSize(600,400);
Toolkit tk=Toolkit.getDefaultToolkit();
Image img=tk.getImage("D:\\duke.gif");
setIconImage(img);
setTitle("我的實時通信作品");
//添加菜單:保存聊天記錄,下載功能
JMenuBar menubar=new JMenuBar();
this.setJMenuBar(menubar);
JMenu file=new JMenu("File");
file.setMnemonic('F');
save=new JMenuItem("SaveTheMsg",'S');
save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
save.addActionListener(new SaveListener());
file.add(save);
download=new JMenuItem("Download",'D');
download.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));
download.addActionListener(new DownloadListener());
file.add(download);
menubar.add(file);
jl_ip=new JLabel("IP:");
jl_port=new JLabel("PORT:");
jtf_ip=new JTextField("127.0.0.1",20);
jtf_port=new JTextField("6000",20);
jbt_connect=new JButton("Connect");
JPanel jp1=new JPanel();
jp1.add(jl_ip);
jp1.add(jtf_ip);
jp1.add(jl_port);
jp1.add(jtf_port);
jp1.add(jbt_connect);
getContentPane().add(jp1,BorderLayout.NORTH);
jta_msg=new JTextArea("",10,30);
JScrollPane jsc1=new JScrollPane(jta_msg);
jtf_text=new JTextField("",10);
JPanel jp2=new JPanel(new BorderLayout());
jp2.add(jsc1,BorderLayout.NORTH);
jp2.add(jtf_text,BorderLayout.SOUTH);
getContentPane().add(jp2,BorderLayout.CENTER);
jbt_send=new JButton("Send");
jbt_close=new JButton("Close");
jbt_server =new JButton("Server");
JPanel jp3=new JPanel();
jp3.add(jbt_send);
jp3.add(jbt_close);
jp3.add(jbt_server);
getContentPane().add(jp3,BorderLayout.SOUTH);
//添加事件響應
jbt_connect.addActionListener(new ConnectListener());
jbt_server.addActionListener(new ServerListener());
jbt_send.addActionListener(new SendListener());
key=true;
}
class ConnectListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
//jbt_server.setEnabled(false);
JOptionPane.showMessageDialog(null, "Connect start!");
String ip=jtf_ip.getText();
int port=Integer.parseInt(jtf_port.getText());
sock=new Socket(ip,port);
out=new PrintWriter(sock.getOutputStream());
in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
out.println("Hi!");
out.flush();
new RecvThread().start();
}catch(Exception e1){
JOptionPane.showMessageDialog(null,e1.getMessage());
}
}
}
class SendListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String s=jtf_text.getText();
try{
if(s!=null){
out.println(s);
out.flush();
jta_msg.append("me: "+s+"\n");
jtf_text.setText("");
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "send error!");
}
}
}
class CloseListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
key=false;
in.close();
out.close();
sersock.close();
sock.close();
}catch(Exception e1){
JOptionPane.showMessageDialog(null,e1.getMessage());
}
}
}
class ServerListener implements ActionListener{
public void actionPerformed(ActionEvent e){
new ServerThread().start();
}
}
////downloadListener
class DownloadListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
DownloadFrame dl=new DownloadFrame();
dl.pack();
dl.show();
}
}
////saveListener
class SaveListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
FileDialog filedlg=new FileDialog(MyFrame.this,"choose the directory",FileDialog.SAVE);
filedlg.setVisible(true);
String fname=filedlg.getDirectory()+filedlg.getFile();
File file=new File(fname);
PrintWriter out=new PrintWriter(new FileOutputStream(file));
String text=jta_msg.getText();
out.println(text);
out.close();
}catch(Exception e1){
System.out.println(e1.getMessage());
}
//JOptionPane.showMessageDialog(null, "Test");
}
}
class RecvThread extends Thread{
public void run(){
try{
while(key){
String s=in.readLine();
jta_msg.append("freind: "+s+"\n");
}
} catch(Exception e1){
JOptionPane.showMessageDialog(null,"已無法偵聽!");
return;
}
}
}
class ServerThread extends Thread{
public void run(){
try{
JOptionPane.showMessageDialog(null, "Sever start!");
//jbt_connect.setEnabled(false);
sersock=new ServerSocket(6000);
sock=sersock.accept();
out=new PrintWriter(sock.getOutputStream());
in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
out.println("Hello!");
out.flush();
new RecvThread().start();
}catch(IOException e1){
JOptionPane.showMessageDialog(null,e1.getMessage());
}
}
}
///download frame
private JMenuItem save;
private JMenuItem download;
private JLabel jl_ip;
private JLabel jl_port;
private JTextField jtf_port;
private JTextField jtf_ip;
private JTextField jtf_text;
private JTextArea jta_msg;
private JButton jbt_connect;
private JButton jbt_send;
private JButton jbt_server;
private JButton jbt_close;
Socket sock;
ServerSocket sersock;
BufferedReader in;
PrintWriter out;
boolean key=false;
}
class DownloadFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public DownloadFrame(){
getContentPane().setLayout(new BorderLayout());
setTitle("Download the file!");
setSize(400,300);
JPanel jp1=new JPanel();
jp1.add(label);
jp1.add(url);
jp1.add(download1);
JPanel jp2=new JPanel();
jp2.add(new JLabel("please wait......"));
jp2.add(jpb);
getContentPane().add(jp1,BorderLayout.NORTH);
getContentPane().add(jp2,BorderLayout.CENTER);
download1.addActionListener(new DownListener());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
DownloadFrame.this.setVisible(false);
}
});
}
class DownListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
try{
String s=url.getText();
if(s.length()>0)
{
URL src=new URL(s);
URLConnection connect=src.openConnection();
int len=connect.getContentLength();
InputStream in=connect.getInputStream();
FileDialog fdlg=new FileDialog(DownloadFrame.this,"Choose where you what to save",
FileDialog.SAVE);
fdlg.setVisible(true);
String name=fdlg.getDirectory()+fdlg.getFile();
File file=new File(name);
FileOutputStream fout=new FileOutputStream(file);
jpb.setMaximum(len);
int data;
while((data=in.read())!=-1){
fout.write(data);
long m=file.length();
repaint();
jpb.setValue((int)m);
}
fout.close();
in.close();
}
}catch(Exception e1){
JOptionPane.showMessageDialog(null, e1.getMessage());
}
}
}
JLabel label=new JLabel("please input the url: ");
JTextField url=new JTextField(30);
JButton download1=new JButton("DOWNLOAD");
JProgressBar jpb=new JProgressBar();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -