تشترك الأمثلة في هذه المقالة في رمز غرفة الدردشة Java للرجوع إليه. المحتوى المحدد كما يلي
تشارك بشكل رئيسي في المعرفة
・ كتابة برامج واجهة المستخدم الرسومية في Java ، بما في ذلك آلية الاستماع في الأحداث.
programming برمجة اتصالات شبكة Java و Serversocket و Socket.
・ استخدام البرمجة متعددة الخيوط ، فئة مؤشرات الترابط ، والواجهة القابلة للتشغيل في Java.
رمز المصدر
عميل
Package Project1 ؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد java.io.*؛ استيراد java.net.*؛ استيراد javax.swing.*؛ عميل الفئة العامة {private JFrame ClientFrame ؛ خاص Jlabel iplabel ؛ خاص Jlabel Portlabel ؛ خاص jlabel saylabel ؛ خاص Jlabel Nicknamelabel ؛ خاص jtextfield iptext ؛ خاص JTextfield Porttext ؛ خاص Jtextfield Nicknametext ؛ خاص JTextfield Saystext ؛ خاص Jbutton ConnectButton ؛ خاص Jbutton NetameButton ؛ خاص jbutton saybutton ؛ الخاص jpanel jpanelnorth ؛ الخاص jpanel jpanelsouth0 ؛ الخاص jpanel jpanelsouth1 ؛ الخاص jpanel jpanelsouth2 ؛ خاص JTextarea ClientTextarea ؛ Scroller JScrollpane الخاص ؛ قارئ Bufferrederer الخاص ؛ كاتب printwriter الخاص لقب السلسلة الخاصة public static void main (String args []) {client aclient = new client () ؛ aclient.startup () ؛ } // تهيئة العميل العام المكون () {namname = "client" ؛ clientFrame = new JFrame () ؛ jpanelnorth = new jpanel () ؛ iplabel = new JLabel ("Server IP" ، Jlabel.left) ؛ iptext = new JTextfield (10) ؛ portlabel = new JLabel ("Server Port" ، Jlabel.left) ؛ porttext = new JTextField (10) ؛ ConnectButton = New JButton ("Connection") ؛ ClientTextArea = new JTextarea () ؛ Scroller = New JScrollPane (ClientTextarea) ؛ jpanelsouth0 = new jpanel () ؛ jpanelsouth1 = new jpanel () ؛ jpanelsouth2 = new jpanel () ؛ Nicknamelabel = New Jlabel ("nableame" ، jlabel.left) ؛ Nicknametext = New JTextField (لقب ، 30) ؛ namnameButton = New JButton ("تأكيد") ؛ Saylabel = New JLabel ("Message" ، Jlabel.left) ؛ Saytext = New JTextfield (30) ؛ Saybutton = new jbutton ("تأكيد") ؛ }. clientframe.setDefaultCloseOperation (jframe.exit_on_close) ؛ clientframe.setsize (550 ، 550) ؛ // مكون jpanelnorth.add (iplabel) ؛ jpanelnorth.add (iptext) ؛ jpanelnorth.add (Portlabel) ؛ jpanelnorth.add (porttext) ؛ jpanelnorth.add (ConnectButton) ؛ clientframe.getContentPane (). Add (BorderLayout.north ، jpanelnorth) ؛ // المكون المتوسط clientTextarea.setFocusable (false) ؛ scroller.setverticalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always) ؛ scroller.SethorizontalScrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never) ؛ clientframe.getContentPane (). Add (BorderLayout.Center ، Scroller) ؛ // مكونات المنطقة الجنوبية jpanelsouth1.add (Nicknamelabel) ؛ JPanelsouth1.Add (Nicknametext) ؛ jpanelsouth1.add (namnameButton) ؛ jpanelsouth2.add (Saylabel) ؛ jpanelsouth2.add (Saytext) ؛ jpanelsouth2.add (Saybutton) ؛ jpanelsouth0.setLayout (new boxlayout (jpanelsouth0 ، boxlayout.y_axis)) ؛ jpanelsouth0.Add (jpanelsouth1) ؛ jpanelsouth0.Add (jpanelsouth2) ؛ clientframe.getContentPane (). add (BorderLayout.south ، jpanelsouth0) ؛ // قم بتعيين النافذة لرؤية clientframe.setVisible (true) ؛ } // يقوم العميل بتشغيل startup public void () {buildGui () ؛ . جرب {بينما ((message = reader.ReadLine ())! = null) {clientTextarea.append (message + "/n") ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ }}}} ؛ // استمع إلى زر الاتصال لتحقيق اتصال الخادم ConnectButton.AddActionListener (new ActionListener () {Override public void ActionPerformed (Actionevent e) {string aserverip = iptext.gettext () joptionpane.showmessagedialog (clientframe ، "يرجى إدخال IP والمنفذ!") ؛ BufferReader (StreamReader) ؛ إدخال IP و PORT صحيحين. ") ؛}}}}}) ؛ . if (! atext.equals ("")) {lamname = atext ؛ }}}} ؛ NamnameButton.AddActionListener (Nicknamelistener) ؛ nicknametext.addActionListener (Nicknamelistener) ؛ nicknametext.addfocusListener (New FocusListener () {Override public void FocusGained (Focusevent E) {} Override public void focusLost (focusevent e) {String atext = nicknametext.getText () ؛ if (! atext.equals ("")) {nicname = atext ؛ // أرسل رسالة إلى server ActionListener saylistener = new ActionListener () {Override public void actionPerformed (ActionEvent e) {String atext = saytext.getText () ؛ if (atext.equals ("")) {joptionpane.showmessagedialog (clientframe ، "لا يمكن أن يكون المحتوى فارغًا!") ؛ } آخر {try {constr.println (لقب + ":" + atext) ؛ الكاتب. flush () ؛ } catch (استثناء ex) {ex.printStackTrace () ؛ } saytext.settext ("") ؛ }}}} ؛ saybutton.addActionListener (saylistener) ؛ Saytext.addActionListener (saylistener) ؛ }} الخادم
Package Project1 ؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد java.io.*؛ استيراد java.net.*؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد javax.swing.*؛ خادم الفئة العامة {private jframe serverframe ؛ خاص Jlabel Portlabel ؛ خاص jlabel saylabel ؛ خاص Jlabel Nicknamelabel ؛ خاص JTextfield Porttext ؛ خاص JTextfield Saystext ؛ خاص Jtextfield Nicknametext ؛ الخاص jbutton startbutton ؛ خاص jbutton saybutton ؛ خاص Jbutton NetameButton ؛ الخاص jpanel jpanelnorth ؛ الخاص jpanel jpanelsouth0 ؛ الخاص jpanel jpanelsouth1 ؛ الخاص jpanel jpanelsouth2 ؛ Scroller JScrollpane الخاص ؛ jtextarea servertextarea الخاص ؛ arraylist الخاص <BrintWriter> clientOutputStreams ؛ لقب السلسلة الخاصة public static void main (string [] args) {server aserver = new server () ؛ aserver.startup () ؛ } // تهيئة الخادم العام المكون () {namname = "server" ؛ serverFrame = new JFrame () ؛ jpanelnorth = new jpanel () ؛ portlabel = new Jlabel ("Port" ، Jlabel.left) ؛ portText = New JTextField (30) ؛ StartButton = New JButton ("start") ؛ ServerTextArea = new JTextarea () ؛ Scroller = New JScrollPane (ServerTextarea) ؛ Nicknamelabel = New Jlabel ("nableame" ، jlabel.left) ؛ Nicknametext = New JTextField (لقب ، 30) ؛ namnameButton = New JButton ("تأكيد") ؛ jpanelsouth0 = new jpanel () ؛ jpanelsouth1 = new jpanel () ؛ jpanelsouth2 = new jpanel () ؛ Saylabel = New JLabel ("Message" ، Jlabel.left) ؛ Saytext = New JTextfield (30) ؛ Saybutton = new jbutton ("تأكيد") ؛ }. serverframe.setDefaultCloseOperation (jframe.exit_on_close) ؛ serverframe.setsize (550 ، 550) ؛ // مكونات المنطقة الشمالية jpanelnorth.add (Portlabel) ؛ jpanelnorth.add (porttext) ؛ jpanelnorth.add (startbutton) ؛ serverframe.getContentPane (). Add (BorderLayout.north ، jpanelnorth) ؛ // component component servertextarea.setFocusable (false) ؛ scroller.setverticalscrollbarpolicy (scrollpaneconstants.vertical_scrollbar_always) ؛ scroller.SethorizontalScrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never) ؛ serverframe.getContentPane (). Add (BorderLayout.Center ، Scroller) ؛ // مكونات المقاطعة الجنوبية jpanelsouth1.add (Nicknamelabel) ؛ JPanelsouth1.Add (Nicknametext) ؛ jpanelsouth1.add (namnameButton) ؛ jpanelsouth2.add (Saylabel) ؛ jpanelsouth2.add (Saytext) ؛ jpanelsouth2.add (Saybutton) ؛ jpanelsouth0.setlayout (new boxlayout (jpanelsouth0 ، boxlayout.y_axis) ؛ jpanelsouth0.add (jpanelsouth1) ؛ } // يقوم الخادم بتشغيل بدء التشغيل العام () {buildgui () ؛ joptionpane.showMessageDialog (يرجى إدخال رقم المنفذ الصحيح! ") ؛ الاتصال .../n ") ؛ بينما (صحيح) {socket clientsocket = serversocket.accept () ؛ ServerTextArea.append ("Client Connected .../N") ؛ printWriter Constr = new printWriter (clientsocket.getOutputStream ()) ؛ ClientOutputStreams.add (كاتب) ؛ موضوع T = مؤشر ترابط جديد (ClientHandler جديد (ClientsOcept)) ؛ T.Start () ؛ }} catch (numberFormatexception | ioException e) {E.PrintStackTrace () ؛ }}}} ؛ Thread ServerThread = مؤشر ترابط جديد (ServerRunnable) ؛ serverthread.start () ؛ } catch (استثناء ex) {ex.printStackTrace () ؛ }}}}} ؛ StartButton.AddActionListener (StartListener) ؛ PortText.AddActionListener (StartListener) ؛ . if (! atext.equals ("")) {lamname = atext ؛ }}} ؛ NamnameButton.AddActionListener (Nicknamelistener) ؛ nicknametext.addActionListener (Nicknamelistener) ؛ nicknametext.addfocusListener (New FocusListener () {Override public void FocusGained (Focusevent E) {} Override public void focusLost (focusevent e) {String atext = nicknametext.getText () ؛ if (! atext.equals ("")) {nicname = atext ؛ . if (! atext.equals ("")) {atext = lamname + ":" + atext ؛ SendToeveryclient (atext) ؛ serverTextarea.append (atext + "/n") ؛ saytext.settext ("") ؛ } آخر {joptionpane.showmessagedialog (ServerFrame ، "لا يمكن أن يكون المحتوى فارغًا!") ؛ }}}} ؛ saybutton.addActionListener (saylistener) ؛ Saytext.addActionListener (saylistener) ؛ }. مقبس asocket. Public ClientHandler (Socket Clientsocket) {try {asocket = clientsocket ؛ inputStreamReader isReader = new inputStreamReader (asocket.getInputStream ()) ؛ Quarer = جديد Bufferreader (Isreader) ؛ } catch (استثناء ex) {ex.printStackTrace () ؛ }} Override public void run () {string message ؛ جرب {بينما ((message = bender.ReadLine ())! = null) {sendToeveryClient (message) ؛ serverTextArea.append (رسالة + "/n") ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ }}} // طريقة إرسال الرسائل إلى جميع العملاء sendtoeveryclient void sendToEclient (string) {iterator <BrintWriter> it = clientOutputStreams.iterator () ؛ بينما (it.hasnext ()) {try {printWriter writer = (printWriter) it.next () ؛ الكاتب. println (رسالة) ؛ الكاتب. flush () ؛ } catch (استثناء ex) {ex.printStackTrace () ؛ }}}}لقطة شاشة تشغيل واجهة المستخدم الرسومية:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.