📄 transfiledialog.java
字号:
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import java.awt.event.*;
import java.io.PrintStream;
import java.net.Socket;
import javax.swing.JFileChooser;
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class TransFileDialog extends JDialog implements Runnable {
private JPanel jContentPane = null;
private JButton refuseButton = null;
private JLabel msgLabel = null;
private Thread t;
private int time;
private JLabel iconLabel = null;
private JFrame fFrame = null;
private JButton acceptButton = null;
private boolean hasSend = false;
private JButton getRefuseButton() {
if (refuseButton == null) {
refuseButton = new JButton();
refuseButton.setText("拒 绝");
refuseButton.setForeground(new java.awt.Color(255,102,102));
refuseButton.setFont(new java.awt.Font("黑体", java.awt.Font.BOLD, 14));
refuseButton.setBackground(new java.awt.Color(197,234,252));
refuseButton.setSize(new java.awt.Dimension(115,28));
refuseButton.setLocation(new java.awt.Point(31,47));
refuseButton.setSelected(true);
refuseButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
hasSend = true;
// 释放消息窗口
dispose();
// 发送拒收文件信息给服务器
sendMsgToServer("Refuse");
}
}
);
}
return refuseButton;
}
public TransFileDialog(JFrame fatherFrame,boolean model,String inMsg) {
super(fatherFrame,model);
initialize(inMsg,fatherFrame);
try
{
t=new Thread(this);
t.start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void initialize(String inMsg,JFrame inFrame) {
this.fFrame = inFrame;
this.setContentPane(getJContentPane());
msgLabel.setText(inMsg);
acceptButton.setToolTipText(inMsg);
this.setSize(331, 117);
this.setModal(false);
this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
this.setResizable(false);
this.setTitle("Fetion消息窗口");
this.setVisible(true);
this.setLocationRelativeTo(null);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
iconLabel = new JLabel();
iconLabel.setIcon(new ImageIcon(getClass().getResource("/pictures/msg.JPG")));
iconLabel.setLocation(new java.awt.Point(14,11));
iconLabel.setSize(new java.awt.Dimension(27,27));
iconLabel.setText("");
msgLabel = new JLabel();
msgLabel.setBounds(new java.awt.Rectangle(52,12,257,25));
msgLabel.setFont(new java.awt.Font("楷体_GB2312", java.awt.Font.BOLD, 14));
msgLabel.setForeground(java.awt.Color.blue);
msgLabel.setText("");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.setBackground(new java.awt.Color(245,255,255));
jContentPane.add(getRefuseButton(), null);
jContentPane.add(msgLabel, null);
jContentPane.add(iconLabel, null);
jContentPane.add(getAcceptButton(), null);
}
return jContentPane;
}
public void run()
{
for(time=15;time>0;time--)
{
refuseButton.setText("拒 绝(" + Integer.toString(time) + ")");
try
{
t.sleep(1000);
}
catch (Exception e)
{
System.out.println("倒计时异常:" + e);
e.printStackTrace();
}
}
// 释放消息窗口
dispose();
// 如果倒计时完毕,接收用户依然没有做出选择则默认拒绝接收
if(!hasSend)
{
// 发送拒收文件信息给服务器
sendMsgToServer("Refuse");
}
}
private JButton getAcceptButton() {
if (acceptButton == null) {
acceptButton = new JButton();
acceptButton.setLocation(new java.awt.Point(177,47));
acceptButton.setBackground(new java.awt.Color(197,234,252));
acceptButton.setText("接 收");
acceptButton.setFont(new java.awt.Font("黑体", java.awt.Font.BOLD, 14));
acceptButton.setForeground(new java.awt.Color(255,102,102));
acceptButton.setSelected(false);
acceptButton.setSize(new java.awt.Dimension(114,28));
acceptButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
hasSend = true;
// 释放消息窗口
dispose();
// 设置文件保存对话框
JFileChooser fileChooser = newFileChooser();
int returnVal = fileChooser.showSaveDialog(null);
if(returnVal == JFileChooser.CANCEL_OPTION)
{
// 发送拒收文件信息给服务器
sendMsgToServer("Refuse");
}
if(returnVal == JFileChooser.APPROVE_OPTION)
{
// 发送接收文件信息给服务器
//sendMsgToServer("Accept");
try
{
Socket toServer = new Socket(ServerIP.ADDRESS,ServerIP.TRANSE_FILE_PORT);
// 发送接收文件信号给服务器
PrintStream psToServer = new PrintStream(toServer.getOutputStream());
psToServer.println("Accept");
// 接收服务器发送的文件
String saveFileName = fileChooser.getSelectedFile().getName();
File file = new File(fileChooser.getCurrentDirectory(),saveFileName);
file.createNewFile();
RandomAccessFile raf = new RandomAccessFile(file,"rw");
InputStream fileStreamFromClient = new DataInputStream(new BufferedInputStream(toServer.getInputStream()));
byte[] buf = new byte[2048];
int num = fileStreamFromClient.read(buf);
while(num != (-1))
{
// 判断是否读完所有数据,如果没有读完则执行以下命令
// 将缓存buf的数据写往临时文件newFile.txt
raf.write(buf,0,num);
// 顺序写文件字节
raf.skipBytes(num);
// 继续从网络中读取文件
num = fileStreamFromClient.read(buf);
}
// 关闭数据流
psToServer.close();
fileStreamFromClient.close();
raf.close();
JOptionPane.showMessageDialog(null,"文件传输完毕!");
}
catch(Exception ex)
{
System.out.println("文件接收失败!");
ex.printStackTrace();
}
}
}
}
);
}
return acceptButton;
}
// 定义函数sendMsgToServer()
public void sendMsgToServer(String inMsg)
{
try
{
Socket toServer = new Socket(ServerIP.ADDRESS,ServerIP.TRANSE_FILE_PORT);
// 发送接收或拒收文件信息给服务器
PrintStream psToServer = new PrintStream(toServer.getOutputStream());
psToServer.println(inMsg);
psToServer.close();
toServer.close();
}
catch(IOException e)
{
System.out.println("发送接收或拒收文件信息失败!");
e.printStackTrace();
}
}
// 定制文件打开或保存对话框
public JFileChooser newFileChooser()
{
JFileChooser fileChooser = new JFileChooser();
ExamFileFilter jpgFilter = new ExamFileFilter("jpg", "JPEG Compressed Image Files");
ExamFileFilter gifFilter = new ExamFileFilter("gif", "GIF Image Files");
ExamFileFilter javaFilter = new ExamFileFilter(new String[] {"java", "class"}, "Java Files");
fileChooser.addChoosableFileFilter(gifFilter);
fileChooser.addChoosableFileFilter(javaFilter);
fileChooser.addChoosableFileFilter(jpgFilter);
fileChooser.setCurrentDirectory(new File("./TempFiles"));
return fileChooser;
}
public static void main(String[] args)
{
new TransFileDialog(new JFrame(),false,"renbo发送chatroom.jpg给你!");
}
} // @jve:decl-index=0:visual-constraint="10,10"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -