大三下tcp ip技術(shù)chat這是一個布置容器的邊框布局它可以對組件進(jìn)行安排并調(diào)整其大_第1頁
大三下tcp ip技術(shù)chat這是一個布置容器的邊框布局它可以對組件進(jìn)行安排并調(diào)整其大_第2頁
大三下tcp ip技術(shù)chat這是一個布置容器的邊框布局它可以對組件進(jìn)行安排并調(diào)整其大_第3頁
大三下tcp ip技術(shù)chat這是一個布置容器的邊框布局它可以對組件進(jìn)行安排并調(diào)整其大_第4頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Class: ChatFrameimport java.awt.BorderLayout;/這是一個布置容器的邊框布局,它可以對容器組件進(jìn)行安排,并調(diào)整其大小,使其符合下列五個區(qū)域:北、南、東、西、中。import import/Dimenimportjava.awt.Container;java.awt.Dimen;類封裝單個對象中組件的寬度和高度(精確到整數(shù))。java.awt.GridBagConstras;/每個由 GridBagLayout 管理的組件都與 GridBagConstras 的實例相關(guān)聯(lián)。 Constras 對象指定組件的顯示區(qū)域在網(wǎng)格中的具體放置位置,以及組件在其顯示

2、區(qū)域中的放置方式。import java.awt.GridBagLayout;/GridBagLayout 類是一個靈活的布局管理器,它不要求組件的大小相同便可以將組件垂直、水平或沿它們的基線對齊。import java.awt.Insets;/Insets 對象是容器邊界的表示形式。它指定容器必須在其各個邊緣留出的空間。這個空間可以是邊界、空白空間或標(biāo)題。import import import import import import import import importimportjava.awt.event.ActionEvent; java.awt.event.ActionLis

3、tener; .InetSocketAddress; .SocketAddress;.SocketException;javax.swing.DefaultListM javax.swing.JButton; javax.swing.JFrame; javax.swing.JList;javax.swing.JOptionPane;/JOptionPane 有助于方便地彈出要求用戶提供值或向其發(fā)出通知的標(biāo)準(zhǔn)import javax.swing.JPanel;import javax.swing.JScrollPane;框。/JScrollPane 管理視口、可選的垂直和水平滾動條以及可選的行和

4、列標(biāo)題視口。import import importimportjavax.swing.JTextArea;javax.swing.ListSelectionM;javax.swing.event.ListSelectionEvent;javax.swing.event.ListSelectionListener;publicclass ChatFrame implements MessageHandler private private private private privateprivateJFrame frame; JTextArea recvMsg; JTextArea enter

5、Msg; JList userList; JButton addUserBtn;JButton sendBtn;private private private privateprivateDefaultListM String name;port;userListM;Messenger messenger;sic final String ECHO_STRING = echo;public ChatFrame() buildGUI();init();private void buildGUI() frame = new JFrame(); frame.setSize(600, 380);fra

6、me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ChatUtils.locateFrameCenter(frame);recvMsg = new JTextArea(); recvMsg.setRows(1); recvMsg.setColumns(10);JScrollPane scrollRecv = new JScrollPane(recvMsg); recvMsg.setEditable(false);enterMsg = new JTextArea();JScrollPane scrollEnter = new JScrollPa

7、ne(enterMsg);scrollEnter.setMinimumSize(new Dimen(100, 80);(100, 80);scrollEnter.setPreferredSize(newDimen(););userListM userList =addUserBtn= new DefaultListMnew JList(userListM= new JButton(添加好友);sendBtn = new JButton(發(fā)送消息); JPanel sendPanel = new JPanel(); sendPanel.setLayout(new BorderLayout(7,s

8、endPanel.add(scrollEnter, BorderLayo0);ENTER);sendPanel.add(sendBtn, BorderLayout.EAST); JPanel userListPanel = new JPanel();JScrollPane scrollUserList = new JScrollPane(userList);scrollUserList.setMinimumSize(new DimenscrollUserList.setPreferredSize(new Dimen(80, 80);(80, 80);userListPanel.setLayou

9、t(new BorderLayout(0, 3);userListPanel.add(scrollUserList, BorderLayoENTER);userListPanel.add(addUserBtn, BorderLayout.SOUTH);Container container = frame.getContentPane(); container.setLayout(new GridBagLayout();GridBagConstra gbc.gridx = 0;gbc.gridy = 0;gbc.gridwidth =s gbc = new GridBagConstras();

10、1;gbc.gridheight = 1;gbc.weightx = 1.0;gbc.weighty = 1.0;gbc.fill = GridBagConstras.BOTH; gbc.insets = new Insets(7, 7, 7, 7); container.add(scrollRecv, gbc); gbc.gridx = 1;gbc.gridy = 0;gbc.gridwidth = 1;gbc.gridheight = 1;gbc.weightx = 0;gbc.weighty = 0;gbc.fill = GridBagConstras.BOTH; gbc.insets

11、= new Insets(7, 0, 7, 7); container.add(userListPanel, gbc); gbc.gridx = 0;gbc.gridy = 1;gbc.gridwidth = 2;gbc.gridheight = 1;gbc.weightx = 1.0;gbc.insets = new Insets(0, 7, 7, 7);gbc.fill = GridBagConstras.BOTH;container.add(sendPanel, gbc);private void init() while (true) String initValue = new St

12、ring 端口:, 7777 ; 用戶名:, Alex ,InputMessageDialog initDialog = new InputMessageDialog(frame, 請輸入用戶名和端口, true, initValue); initDialog.setVisible(true);String nameAndPort = initDialog.getValue();if (nameAndPort = null) continue; = nameAndPort0;if (name.indexOf(ChatUtils.SEPARATOR) != -1) String

13、 errMsg = 用戶名中不能包含: + ChatUtils.SEPARATOR; JOptionPane.showMessageDialog(frame, errMsg, 錯誤的用戶名, JOptionPane.ERROR_MESSAGE);continue;try this.port =eger.valueOf(nameAndPort1);if (port 65536) String errMsg = 錯誤的端 + nameAndPort1+ 。端必須在0和65536之間;JOptionPane.showMessageDialog(frame, errMsg, 錯誤的端 JOptionP

14、ane.ERROR_MESSAGE);continue; catch (NumberFormatException ex) ,JOptionPane.showMessageDialog(frame, 輸入的端不是數(shù)字。, 錯誤的端,JOptionPane.ERROR_MESSAGE);continue;break;try messenger = new UDPMessagort);messenger.setMessageHandler(this); messenger.startMessenger(); catch (SocketException e) JOptionPane.showMes

15、sageDialog(frame, 端已被占用。程序?qū)⑼顺? 端已被占用,JOptionPane.ERROR_MESSAGE); System.exit(1);addUserBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) addUser(););sendBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) sendChatMessage(););userL

16、ist.setSelectionM;istSelectionM.SINGLE_SELECTION)userList.addListSelectionListener(new ListSelectionListener() public void valueChanged(ListSelectionEvent e) Object selection if (selection = return;= userList.getSelectedValue();null | !(selection instanceof UserM) UserMuser =(UserM) selection;recvMs

17、g.setText(user.getMessageHistory().toString(); updateTitle(););updateTitle();private void updateTitle() String title = name + 的聊天窗口,通訊端口為 + port; Object selection = userList.getSelectedValue();if (selection != null & (selection instanceof UserM) title = title + 。對方為 + (UserMthis.frame.setTitle(title

18、);private void sendChatMessage() ) selection).getName();Object selection = userList.getSelectedValue();if (selection = null | !(selection instanceof UserM) JOptionPane.showMessageDialog(frame, 請先選擇好友,再發(fā)送消息, 請選擇好友, JOptionPane.ERROR_MESSAGE); return;UserMuser = (UserM) selection;String content = ente

19、rMsg.getText(); sendMessage(content, user.getAddr(); if (content.length() = 0) return;enterMsg.setText();user.getMessageHistory().append(name + 說:rn + content + rn); recvMsg.setText(user.getMessageHistory().toString();private void addUser() String defaultUser = new String IP地址:, , 端:, 7777

20、 ;InputMessageDialog us輸入好友信息,true, defaultUser);rop = new InputMessageDialog(frame,請usrop.setVisible(true);String value = us if (value = null) return;rop.getValue();InetSocketAddress socketAddr = ChatUtils.createSocketAddrFromStr( value0, value1);if (socketAddr = null) JOptionPane.showMessageDialog

21、(frame, 輸入的信息錯誤,無法識別的IP地址和端,信息錯誤, JOptionPane.ERROR_MESSAGE);return;sendMessage(ECHO_STRING, socketAddr);private void sendMessage(String content, SocketAddress addr) byte data = ChatUtils.buildMessage(name, content); messenger.sendData(data, addr);public void showFrame() this.frame.setVisible(true);

22、Overridepublic void handleMessage(byte data, SocketAddressString content = ChatUtils.parseMessage(data);addr)String String UserMUserMuserName = content0; message = content1;newUser = new UserM(userName, addr);user = findUser(newUser);= null) if (useruserListM.addElement(newUser);user = newUser;if (m

23、essage.equals(ECHO_STRING) this.sendMessage(, addr); return;if (message.length() 0) user.getMessageHistory().append(userName + 說:rn + message + rn);userList.setSelectedValue(user, true); updateChatHistory(user.getMessageHistory().toString();private void updateChatHistory(String history) recvMsg.setT

24、ext(history);lastLineStart if (lastLineStart return;recvMsg.setCaretprivate UserMn = userListM= history.lastIndexOf(n);= -1) ition(lastLineStart);findUser(UserM.getSize();m) for (UserMi = 0; i n; i+) user = (UserM) userListM.get(i);if (user.equals(m) returnreturnclauser;null;serMprivate privatepriva

25、teString name; SocketAddress addr;StringBuffer messageHistory;public UserM(String name, SocketAddressaddr) = name;this.addr = addr;messageHistory = new StringBuffer();public returnpublicStringBuffer getMessageHistory() messageHistory;void setMessageHistory(StringBuffer messageHistory)this.

26、messageHistory = messageHistory;public returnpublicString getName() name;void setName(String name) = name;public returnpublicSocketAddress getAddr() addr;void setAddr(SocketAddress addr) this.addr = addr;Override public finalhashCode() prime = 31;result = 1;resultreturnpublic return= prime

27、 * result + (addr = null)result;?0:addr.hashCode();String toString() name;Overridepublicequals(Object obj) if (this = obj)return true;if (obj = null) return false;if (getClass() !=return false;obj.getClass()UserMother =(UserMnull) obj;if (addr = null)if (other.addr !=return else return returnfalse;i

28、f (!addr.equals(other.addr)false; true;Class: ChatFrameMainpublic class ChatFrameMain public sic void main(String args) ChatFrame chat = new ChatFrame(); chat.showFrame();Class: InputMessageDialogimport import import import import import import import import import import importpublicjava.awt.Contai

29、ner; java.awt.Frame; java.awt.GridBagConstra java.awt.GridBagLayout;java.awt.Insets;s;java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.JButton; javax.swing.JDialog; javax.swing.JLabel; javax.swing.JSeparator; javax.swing.JTextField;class InputMessageDialog extends JDialog priva

30、te privateprivateString items; JTextField values;String retValues;public InputMessageDialog(Frame owner, String title,String items) modal,super(owner, this.items = init();private voidtitle,items;modal);init()= this.getContentPane();Container containercontainer.setLayout(new GridBagLayout();GridBagConstras gbc = new GridBagConstras();count = items.length; gbc.gridx = 0;gbc.gridwidth = 1;gbc.gridheight = 1;gbc.fill =gbc.insetsGridBagConstra= new Insets(3,= 0; i count;s.NONE; 3, 3, 3);i+) for (igbc.gridy = i;container.add(new JLabel(itemsi0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論