當前位置:首頁 » 編程語言 » 瘋狂java講義第6版

瘋狂java講義第6版

發布時間: 2023-09-20 03:13:52

⑴ 瘋狂java講義:使用MulticastSocket實現多點廣播(4)

該類主要實現底層的網路通信功能 在該類中提供了一個broadCast方法 該方法使用MulticastSocket將指定字元串廣播到所有客戶端 還提供了sendSingle方法 該方法使用DatagramSocket將指定字元串發送到指定SocketAddress 如程序中前兩行粗體字代碼所示 除此之外 該類里還提供了 個內部線程類 ReadSingle和ReadBroad 這兩個線程類採用循環不斷讀取DatagramSocket和MulticastSocket中的數據 如果讀到的信息是廣播來的在線信息 則保持該用戶在線 如果讀到的是用戶的聊天信息 則直接將該信息顯示出來

在該類中用到了本程序的一個主類 LanChat 該類使用DefaultListModel來維護用戶列表 該類里的每個列表項就是一個UserInfo 該類還提供了一個ImageCellRenderer 該類用於將列表項繪制出用戶圖標和用戶名字

程序清單 codes/ / /LanChat/LanChat java

public class LanChat extends JFrame

{

private DefaultListModel listModel = new DefaultListModel()

//定義一個JList對象

private JList friendsList = new JList(listModel)

//定義一個用於格式化日期的格式器

private DateFormat formatter = DateFormat getDateTimeInstance()

public LanChat()

{

super( 區域網聊天 )

//設置該JList使用ImageCellRenderer作為單元格繪制器

friendsList setCellRenderer(new ImageCellRenderer())

listModel addElement(new UserInfo( all 所有人 null ))

friendsList addMouseListener(new ChangeMusicListener())

add(new JScrollPane(friendsList))

setDefaultCloseOperation(JFrame EXIT_ON_CLOSE)

setBounds( )

}

//向用戶列表中添加用戶

public void addUser(UserInfo user)

{

listModel addElement(user)

}

//從用戶列表中刪除用戶

public void removeUser(int pos)

{

listModel removeElementAt(pos)

}

//根據地址來查詢用戶

public UserInfo getUserBySocketAddress(SocketAddress address)

{

for (int i = ; i < getUserNum() ; i++)

{

UserInfo user = getUser(i)

if (user getAddress() != null &&

user getAddress() equals(address))

{

return user;

}

}

return null;

}

// 下面兩個方法是對ListModel的包裝

//獲取該聊天窗口的用戶數量

public int getUserNum()

{

return listModel size()

}

//獲取指定位置的用戶

public UserInfo getUser(int pos)

{

return (UserInfo)listModel elementAt(pos)

}

//實現JList上的滑鼠雙擊監聽器

class ChangeMusicListener extends MouseAdapter

{

public void mouseClicked(MouseEvent e)

{

//如果滑鼠的擊鍵次數大於

if (e getClickCount() >= )

{

//取出滑鼠雙擊時選中的列表項

UserInfo user = (UserInfo)friendsList getSelectedValue()

//如果該列表項對應用戶的交談窗口為null

if (user getChatFrame() == null)

{

//為該用戶創建一個交談窗口 並讓該用戶引用該窗口

user setChatFrame(new ChatFrame(null user))

}

//如果該用戶的窗口沒有顯示 則讓該用戶的窗口顯示出來

if (!user getChatFrame() isShowing())

{

user getChatFrame() setVisible(true)

}

}

}

}

/**

* 處理網路數據報 該方法將根據聊天信息得到聊天者

* 並將信息顯示在聊天對話框中

* @param packet 需要處理的數據報

* @param single 該信息是否為私聊信息

*/

public void processMsg(DatagramPacket packet boolean single)

{

//獲取該發送該數據報的SocketAddress

InetSocketAddress srcAddress = (InetSocketAddress)packet getSocket

Address()

//如果是私聊信息 則該Packet獲取的是DatagramSocket的地址 將埠減 才是

//對應的MulticastSocket的地址

if (single)

{

srcAddress = new InetSocketAddress(srcAddress getHostName()

srcAddress getPort() )

}

UserInfo srcUser = getUserBySocketAddress(srcAddress)

if (srcUser != null)

{

//確定消息將要顯示到哪個用戶對應窗口上

UserInfo alertUser = single ? srcUser : getUser( )

//如果該用戶對應的窗口為空 顯示該窗口

if (alertUser getChatFrame() == null)

{

alertUser setChatFrame(new ChatFrame(null alertUser))

}

//定義添加的提示信息

String tipMsg = single ? 對您說 : 對大家說 ;

//顯示提示信息

alertUser getChatFrame() addString(srcUser getName() + tipMsg

+ ……( + formatter format(new Date()) + )

+ new String(packet getData() packet getLength()) + )

if (!alertUser getChatFrame() isShowing())

{

alertUser getChatFrame() setVisible(true)

}

}

}

//主方法 程序的入口

public static void main(String[] args)

{

LanChat lc = new LanChat()

new LoginFrame(lc 請輸入用戶名 頭像後登錄 )

}

}

//定義用於改變JList列表項外觀的類

class ImageCellRenderer extends JPanel implements ListCellRenderer

{

private ImageIcon icon;

private String name;

//定義繪制單元格時的背景色

private Color background;

//定義繪制單元格時的前景色

private Color foreground;

public Component getListCellRendererComponent(JList list Object value int

index boolean isSelected boolean cellHasFocus)

{

UserInfo userInfo = (UserInfo)value;

icon = new ImageIcon( ico/ + userInfo getIcon() + gif )

name = userInfo getName()

background = isSelected ? list getSelectionBackground() : list getBack

ground()

foreground = isSelected ? list getSelectionForeground() : list

getForeground()

//返回該JPanel對象作為單元格繪制器

return this;

}

//重寫paintComponent方法 改變JPanel的外觀

public void paintComponent(Graphics g)

{

int imageWidth = icon getImage() getWidth(null)

int imageHeight = icon getImage() getHeight(null)

g setColor(background)

g fillRect( getWidth() getHeight())

g setColor(foreground)

//繪制好友圖標

g drawImage(icon getImage() getWidth() / imageWidth / null)

g setFont(new Font( SansSerif Font BOLD ))

//繪制好友用戶名

g drawString(name getWidth() / name length() * imageHeight + )

}

//通過該方法來設置該ImageCellRenderer的最佳大小

public Dimension getPreferredSize()

{

return new Dimension( )

}

}

上面類中提供的addUser和removeUser方法用於暴露給通信類ComUtil使用 用於向用戶列表中添加 刪除用戶 除此之外 該類還提供了一個processMsg方法 該方法用於處理網路中讀取的數據報 將數據報中的內容取出 並顯示在特定的窗口中

上面講解的只是本程序的關鍵類 本程序還涉及YeekuProtocol ChatFrame LoginFrame等類 由於篇幅關系 此處不再給出這些類的源代碼 讀者可以參考codes/ / /LanTalk路徑下的源代碼

返回目錄 瘋狂Java講義

編輯推薦

Java程序性能優化 讓你的Java程序更快 更穩定

新手學Java 編程

lishixin/Article/program/Java/hx/201311/27255

⑵ 推薦幾本安卓開發的書籍,我學過一點點java,也算有點java基礎的

最好的java學習,最全的java學習
《瘋狂Java講義》---本書並不是一本簡單的Java入門教材,也不是一門「閉門造車」式的Java讀物。本書來自於筆者6年多的Java培訓經歷,凝結了筆者近6000個小時的授課經驗,總結了上千個Java學員學習過程中的典型錯誤。
《瘋狂Android講義》---本書全面地介紹了Android應用開發的相關知識。
《輕量級Java EE企業應用實戰--Struts 2+Spring+Hibernate整合開發》---本書是《輕量級Java EE企業應用實戰》的第3版,第3版保持了第2版內容全面、深入的特點,主要完成全部知識的升級。
《 瘋狂Java 突破程序員基本功16課》、《瘋狂XML講義》、《瘋狂Ajax講義Prototype/jQuery+DWR+Spring+Hibernate整合開發》、《Struts 2.1權威指南--基於WebWork核心的MVC開發》、《經典Java EE企業應用實戰》
《瘋狂HTML 5/CSS 3/JavaScript講義》 --- 本書是一本全面介紹HTML5、CSS 3和JavaScript前端開發技術的圖書,本書系統地介紹了HTML 5常用的元素和屬性,HTML 5的表單元素和屬性,HTML 5的繪圖支持,HTML 5的多媒體支持,CSS 3的功能和用法、包括最前沿的變形與動畫功能等。配合『瘋狂java』官網上的視頻學習。「李剛老師視頻」、「肖文吉老師視頻」「李韓飛老師視頻」

⑶ 關於java的入門類書籍

樓上說的太有才了,這么多書我保證他自己都沒有全看過。書三本,先看李剛的瘋狂java講義,再看瘋狂java輕量級框架,再看經典框架,或者孫玉琴的java系列都可以。關鍵是第一本,是java的基礎。視頻呢,就看馬士兵的全套,或者張孝祥的就可以了。樓上說的三本書都是在新華書店上找的。《Java大學簡明教程――實常式序設計》這本書如果新手看了,我保證新手如天書般,甚至失去對java的興趣~~
對了還有,你自己去淘寶買完北大青鳥的accp系列書,並且認真看完,並且所有的例子都自己一個一個敲過,那麼也可以算是java入門了~~

⑷ 零基礎的人學java,看哪些書。。求推薦幾本書籍

《瘋狂java講義》 對於這本書,相信大家不陌生,《瘋狂講義》這本書深入介紹了java編程的相關方面,這本書的內容有Java基本語法結構、面向對象特徵、集合框架體系、 泛型、異常處理、GUI編程、JDBC資料庫編程、注釋、的IO流體系、多線程編程、網路通信編程、反射機制和java開發中需要的jar包、類和介面。

熱點內容
存儲甘油違法 發布:2025-02-02 02:35:36 瀏覽:988
壓縮譜寫法 發布:2025-02-02 02:26:33 瀏覽:932
ipad電子書上傳 發布:2025-02-02 02:22:14 瀏覽:400
堅果郵件怎麼配置 發布:2025-02-02 02:15:14 瀏覽:332
安卓跟h5哪個好 發布:2025-02-02 02:07:56 瀏覽:851
vcjava 發布:2025-02-02 02:06:27 瀏覽:338
航海世紀55區是什麼伺服器 發布:2025-02-02 02:01:22 瀏覽:835
php獲取當前年 發布:2025-02-02 01:50:41 瀏覽:159
sqlbrowser服務 發布:2025-02-02 01:32:14 瀏覽:732
jeecg源碼下載 發布:2025-02-02 01:08:47 瀏覽:366