protected void do_button_actionPerformed(MouseEvent e) {
JList<Object> lt = (JList<Object>) e.getSource();
int clickCount = e.getClickCount();
if (clickCount == 2) {
@SuppressWarnings("deprecation")
Object[] ob =lt.getSelectedValues();
String s4 = (String) ob[0];
if(s4.equals("服務器")) {
new network();//這是我的客戶端類
}
接下來是我的客戶端,單獨運行客戶端無問題,監聽呼叫組件無法顯示,服務器顯示已連接,也可以通信
public class network {
/**
* @author zhuxiaobu
* 創建局域網通信主界面
*/
private static final long serialVersionUID = -699L;
private JPanel j1;
private JTextArea jt1;
private JTextArea jt2;
protected Socket client = null;
private File sendImageFile = null;
private Image receiveImage = null;
private background back2;
private background back3;
protected DataOutputStream out1;
protected DataInputStream in1;
private File fe1 = null;
private File fe2 = null;
private Image backImage =null;
private JFrame fm1;
public network() {
init();
jt1.append("嘗試連接.........\n");
try {
client = new Socket("127.0.0.1",1609); // 實體化Socket物件
jt1.append("連接成功\n"); // 輸出資訊
while (true) { // 如果套接字是連接狀態
if (client != null && !client.isClosed()) {
out1 = new DataOutputStream(client.getOutputStream());// 獲得輸出流物件
in1 = new DataInputStream(client.getInputStream());// 獲得輸入流物件
getServerInfo();
}
else {
client = new Socket("127.0.0.1",1609);
}
}
} catch (Exception e) {
e.printStackTrace(); // 輸出例外資訊
}
}
private void getServerInfo() {
try {
String name = in1.readUTF();
long length = in1.readLong();
byte[] b1 = new byte[(int)length];// 創建位元組陣列
for(int i=0;i<length;i++) {
b1[i]=in1.readByte();
}
if(name.equals("String")) {
String s1 = new String(b1);
jt1.append("服務器:"+s1+"\n");
}
else if(name.equals("Image")) {
receiveImage =new ImageIcon(b1).getImage();
back2.setImage(receiveImage);
back2.repaint();
}
else {
FileDialog dialog = new FileDialog(fm1, "保存");// 創建對話框
dialog.setMode(FileDialog.SAVE);// 設定對話框為保存對話框
dialog.setFile(name);
dialog.setVisible(true);// 顯示保存對話框
String path = dialog.getDirectory();// 獲得檔案的保存路徑
String newFileName = dialog.getFile();// 獲得保存的檔案名
if (path == null || newFileName == null) {
return;
}
String pathAndName = path + "\\" + newFileName;// 檔案的完整路徑
FileOutputStream fOut = new FileOutputStream(pathAndName);
fOut.write(b1);
fOut.flush();
fOut.close();
jt1.append("檔案接收完畢。");
}
} catch (Exception e) {
} finally {
try {
if (in1 != null) {
in1.close();// 關閉流
}
if (client != null) {
client.close(); // 關閉套接字
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void init() {
fm1 = new JFrame();
fm1.setTitle("客戶端");
fm1.setResizable(false);
fm1.setBounds(200,200,610,510);
j1 = new JPanel();
j1.setLayout(new BorderLayout(0,0));
j1.setBorder(new EmptyBorder(5, 5, 5, 5));
Container c1 = fm1.getContentPane();
c1.add(j1,BorderLayout.CENTER);
JPanel j2 = new JPanel();
Dimension di1 = new Dimension(600,60);
j2.setPreferredSize(di1);
j1.add(j2,BorderLayout.NORTH);
background back1 = new background();
back1.setImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/background1.jpg")));
j2.setLayout(new BorderLayout(0,0));
j2.add(back1,BorderLayout.CENTER);
JPanel j3 = new JPanel();
Dimension di2 = new Dimension(480,260);
j3.setPreferredSize(di2);
j3.setLayout(new BorderLayout(0,0));
j1.add(j3,BorderLayout.CENTER);
jt1 = new JTextArea();
JScrollPane js1 = new JScrollPane(jt1);
jt1.setLineWrap(true);
j3.add(js1,BorderLayout.CENTER);
JPanel j4 = new JPanel();
Dimension di3 = new Dimension(480,150);
j4.setPreferredSize(di3);
j4.setLayout(new BorderLayout(0,0));
j1.add(j4,BorderLayout.SOUTH);
JPanel j5 = new JPanel();
Dimension di4 = new Dimension(480,30);
j5.setPreferredSize(di4);
j5.setBorder( new LineBorder(Color.black));
j5.setLayout(new FlowLayout(FlowLayout.LEFT));
j4.add(j5,BorderLayout.NORTH);
JButton btn2 = new JButton("字體");
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 顯示顏色選擇對話框
JFontChooser one = new JFontChooser(new Font("方正舒體", Font.BOLD, 18), new Color(204,102,255));
// JFontChooser one = new JFontChooser(); //無參
one.showDialog(null,500,200);
//獲取選擇的字體
Font font=one.getSelectedfont();
//獲取選擇的顏色
Color color=one.getSelectedcolor();
if(font!=null&&color!=null){
jt2.setFont(font);
jt2.setForeground(color);
}}
});
j5.add(btn2);
JButton btn3 = new JButton("形象選擇");
j5.add(btn3);
btn3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jc1 = new JFileChooser();
FileFilter ff1 = new FileNameExtensionFilter("圖片","JPG","JPEG","PNG","BMP") ;
jc1.setFileFilter(ff1);
int flag = jc1.showOpenDialog(null);// 顯示打開對話框
if (flag == JFileChooser.APPROVE_OPTION) {//批準選擇
fe1 = jc1.getSelectedFile(); // 獲取選中圖片的File物件
}
if (fe1 != null) {
try {
backImage = ImageIO.read(fe1);// 構造BufferedImage物件
if(backImage !=null) {
back3.setImage(backImage);
back3.repaint();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
JButton btn4 = new JButton("發送圖片");
btn4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
selectImage frame = new selectImage();
frame.setVisible(true);
}
});
j5.add(btn4);
JButton btn5 = new JButton("發送檔案");
btn5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileFrame f5 = new FileFrame();
f5.setVisible(true);
}
});
j5.add(btn5);
jt2 = new JTextArea();
Dimension di5 = new Dimension(480,90);
jt2.setLineWrap(true);
JScrollPane js2 = new JScrollPane(jt2);
js2.setPreferredSize(di5);
j4.add(js2,BorderLayout.CENTER);
JPanel j7 = new JPanel();
Dimension di7 = new Dimension(480,30);
j7.setPreferredSize(di7);
j4.add(j7,BorderLayout.SOUTH);
j7.setLayout(null);
JButton btn1 = new JButton("發送");
btn1.setBounds(400, 0, 80, 30);
j7.add(btn1);
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String s1 = jt2.getText();
out1.writeUTF("String");
byte b2[] = s1.getBytes();
long length = b2.length;
out1.writeLong(length);
out1.write(b2);// 將位元組陣列寫入輸出流
jt2.setText("");
jt1.append("客戶端:"+s1+"\n");
out1.flush();
out1.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
JPanel j6 = new JPanel();
Dimension di6 = new Dimension(120,440);
j6.setPreferredSize(di6);
j6.setLayout(new GridLayout(2,1,0,0));
j1.add(j6,BorderLayout.EAST);
JPanel j8 = new JPanel();
j8.setLayout(new BorderLayout());
j6.add(j8);
back2 = new background();
back2.setImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/background2.png")));
JLabel l3 = new JLabel("服務器發來的圖片");
j8.add(l3,BorderLayout.NORTH);
j8.add(back2,BorderLayout.CENTER);
JPanel j9 = new JPanel();
j9.setLayout(new BorderLayout());
j6.add(j9);
back3 = new background();
back3.setImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/background3.jpg")));
JLabel l4 = new JLabel("背景");
j9.add(l4,BorderLayout.NORTH);
j9.add(back3,BorderLayout.CENTER);
fm1.setVisible(true);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/80294.html
標籤:Java SE
