เมื่อฉันเดินไปรอบ ๆ อินเทอร์เน็ตฉันพบว่าหลายคนมีปัญหาอย่างมากกับปัญหาการใช้ Java เพื่อใช้งานแผงควบคุมหลังจากเข้าสู่ระบบ QQ เมื่อเร็ว ๆ นี้ฉันกำลังเขียนโครงการที่จำลอง QQ ดังนั้นฉันจึงพบปัญหานี้ขาดไม่ได้ ฉันไปที่ Google และ Baidu Online ในที่สุดฉันก็พบว่าหลายคนมีปัญหากับปัญหานี้ แต่ไม่มีทางออก อาจเป็นคนที่เขียนและไม่ได้โพสต์ออนไลน์ ตอนนี้หลังจากค้นหาข้อมูลจากหลาย ๆ ด้านในที่สุดฉันก็เขียนมันออกมา มันไม่ไร้ประโยชน์ที่ฉันจะนอนดึกเมื่อคืนนี้ ฮ่าฮ่าเรามาดูภาพหน้าจอของเอฟเฟกต์การใช้งาน:
ตกลงนี่คือเอฟเฟกต์ แม้ว่าฟังก์ชั่นพื้นฐานจะถูกนำไปใช้ แต่ก็ยังไม่สมบูรณ์ ตัวอย่างเช่นแผงเพื่อนไม่สามารถเปลี่ยนแปลงได้เมื่อหน้าต่างเปลี่ยนขนาด แต่ควรแก้ไขได้ ยังไม่ได้ฝึกฝน มาโพสต์ซอร์สโค้ดด้านล่าง:
มีสามประเภททั้งหมด:
memberModel.java // คลาสเทมเพลตที่แสดงข้อมูลแท็กเพื่อนที่เหมือน QQ;
testpane.java // เพิ่มคลาสคอนเทนเนอร์ลงในหลายเทมเพลต
testframe.java // คลาสแบบฟอร์ม;
ส่วนหลักคือสองคลาสแรก โปรดทราบว่าวิธีการเลย์เอาต์ของคลาสที่สองไม่สามารถว่างเปล่าไม่เช่นนั้นไม่สามารถเป็นแถบเลื่อนการแสดงคอนเทนเนอร์ นี่เป็นปัญหาในการใช้ฟังก์ชันพาเนลนี้เพราะฉันไม่รู้วิธีใช้วิธีการจัดวางอื่น ๆ ดังนั้นฉันจึงใช้เลย์เอาต์ที่ว่างเปล่าบ่อยครั้งเท่านั้น หลังจากเวลานี้ฉันรู้ว่าการใช้เลย์เอาต์ที่ว่างเปล่าเป็นไปไม่ได้และแอปพลิเคชันของเค้าโครงที่ว่างเปล่านั้นถูก จำกัด เกินไป
วิธีเพิ่มข้อมูลเพื่อนใน testpane.java ควรเป็นวิธีเพิ่มข้อมูลบัญชีดำในรหัส คุณสามารถโทรหาวิธีการในคลาสอื่น ๆ พารามิเตอร์ผ่าน (อาร์เรย์) จากนั้นเริ่มต้นเทมเพลตข้อมูล เทมเพลตข้อมูลบนพาเนลถูกสร้างขึ้นจากจุดเริ่มต้นของโปรแกรม แต่มันถูกตั้งค่าให้มองไม่เห็น หลังจากคลิกที่ฉลากการจำแนกประเภทที่เกี่ยวข้องการสร้างภาพและมองไม่เห็นจะเหมือนกัน กล่าวคือเพื่อนมากมายที่คุณมีจะมี jlabels อยู่ในแผงของคุณเสมอ แต่คุณอาจไม่เห็นพวกเขา ฉันรู้สึกว่าวิธีการใช้งานของฉันไม่ค่อยดีนัก ในวิธีการเลย์เอาต์ที่ฉันใช้ความกว้างของฉลากนั้นแน่นอน ฉันไม่ทราบวิธีการตั้งค่าความกว้างและความสูงดังนั้นฉันจึงเพิ่มไอคอนสีขาว (185 x 60) ลงในฉลากเพื่อให้ฉลากกว้างขึ้นจากนั้นเพิ่มเทมเพลต JPanel หากชาวเน็ตมีทางออกที่ดีฉันหวังว่าฉันจะให้คำแนะนำแก่คุณ
ต่อไปนี้เป็นซอร์สโค้ด:
แพ็คเกจ coolbaby6; นำเข้า javax.swing.imageicon; นำเข้า Javax.swing.jpanel; นำเข้า Javax.swing.jbutton; นำเข้า Java.awt.color; นำเข้า Java.awt.rectangle; นำเข้า Java.wing.jlabel; serialversionuid ยาว = 1l; สาธารณะ jbutton jbutton = null; // แสดง Avatar เพื่อน; JPANEL JPANEL สาธารณะ = ใหม่ JPANEL (); // เทมเพลตคอนเทนเนอร์; ส่วนตัว jlabel lb_nickname = null; // แสดงชื่อเล่น; รูป int ส่วนตัว; ชื่อเล่นสตริงส่วนตัว = null; ส่วนตัว jlabel lb_mood = null; // แสดงอารมณ์; Public MemberModel (int pic, ชื่อเล่นสตริง, int len) {super (); this.pic = pic; // การรวบรวม Avatar (มีหลายวิธีในการใช้งานนี่เป็นสิ่งที่ง่ายที่สุด) this.nickname = ชื่อเล่น; // ชื่อเล่น; เริ่มต้น (); } โมฆะส่วนตัวเริ่มต้น () {lb_mood = new jlabel (); lb_mood.setbounds (สี่เหลี่ยมผืนผ้าใหม่ (51, 30, 131, 20)); lb_mood.setfont (ตัวอักษรใหม่ ("กล่องโต้ตอบ", font.plain, 12)); lb_mood.settext ("ระยะทางไกลที่สุดในโลกไม่ใช่ชีวิตและความตาย แต่ฉันยืนอยู่ตรงหน้าคุณและคุณไม่รู้ว่าฉันรักคุณ!"); lb_mood.addmouselistener (ใหม่ java.awt.event.mouseadapter () {โมฆะสาธารณะ mouseentered (java.awt.event.mousevent e) {ExchangeEnter (); lb_mood.settooltiptext (lb_mood.getText () e) {ExchangeExited ();}}); lb_nickname = new Jlabel (); lb_nickname.setbounds (สี่เหลี่ยมใหม่ (52, 10, 80, 20)); lb_nickname.setFont (ฟอนต์ใหม่ ("กล่องโต้ตอบ", font.bold, 14)); lb_nickname.settext (ชื่อเล่น); jpanel.setsize (มิติใหม่ (185, 60)); JPanel.SetLayout (NULL); jpanel.add (getjbutton (), null); jpanel.add (lb_nickname, null); jpanel.add (lb_mood, null); jpanel.addmouselistener (ใหม่ java.awt.event.mouseadapter () {โมฆะสาธารณะ mouseexited (java.awt.event.mousevent e) {ExchangeExited (); // เมาส์ย้ายออกจากพื้นที่แม่แบบและเปลี่ยนสีพื้นหลัง ExchangeEnter (); // ย้ายเมาส์ไปยังพื้นที่เทมเพลตและเปลี่ยนสีพื้นหลัง}}); } Private Void ExchangeEnter () {JPanel.SetBackground (สีใหม่ (192,224,248)); } โมฆะส่วนตัว ExchangeExited () {JPanel.SetBackground (NULL); } ส่วนตัว jbutton getJbutton () {ถ้า (jbutton == null) {jbutton = new Jbutton (); jbutton.setbounds (สี่เหลี่ยมผืนผ้าใหม่ (8, 10, 40, 40)); jbutton.setbackground (สีใหม่ (236, 255, 236)); jbutton.seticon (ภาพใหม่ (pic + ".jpg")); jbutton.addmouselistener (ใหม่ java.awt.event.mouseadapter () {โมฆะสาธารณะ mousexited (java.awt.event.mousevent e) {exchangeexited (); // เมาส์ย้ายออกจากพื้นที่แม่แบบและเปลี่ยนสีพื้นหลัง ExchangeEnter (); // ย้ายเมาส์ไปยังพื้นที่เทมเพลตและเปลี่ยนสีพื้นหลัง}}); } return jbutton; - แพ็คเกจ coolbaby6; นำเข้า Javax.swing.borderfactory; นำเข้า Javax.swing.jpanel; นำเข้า Javax.swing.jlabel; นำเข้า Javax.swing.boxlayout; นำเข้า Javax.swing.imageicon; JLabel JLabel ส่วนตัว = NULL; ส่วนตัว JLabel Jlabel1 = null; ส่วนตัว JLabel Jlabel11 = NULL; ส่วนตัว JLabel Jlabel12 = null; private int clickf = 0; private int clickb = 0; Public TestPane () {super (); เริ่มต้น (); } โมฆะส่วนตัวเริ่มต้น () {jlabel12 = new jlabel (); Jlabel12.Seticon (ใหม่ ImageIcon ("IMG/BG.JPG")); Jlabel12.add (สมาชิกใหม่ (3, "coolbaby3", 200) .jpanel); Jlabel12.SetBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jlabel11 = new jlabel (); jlabel11.seticon (ภาพใหม่ ("img/bg.jpg")); jlabel11.add (สมาชิกใหม่ (2, "coolbaby2", 200) .jpanel); Jlabel11.SetBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jlabel1 = new jlabel (); jlabel1.seticon (ภาพใหม่ ("img/bg.jpg")); Jlabel1.add (สมาชิกใหม่ (1, "coolbaby1", 200) .jpanel); Jlabel1.SetBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jlabel = new jlabel (); jlabel.settext ("เพื่อนของฉัน"); Jlabel.Seticon (ImageIcon ใหม่ ("img/ico.jpg")); Jlabel.SetBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jlabel.addmouselistener (ใหม่ java.awt.event.mouseadapter () {โมฆะสาธารณะ mouseclicked (java.awt.event.mousevent e) {clickf+= 1; if (clickf%2 == 1) {jlabel1.setvisible (เท็จ); Jlabel12.setVisible (เท็จ); imageicon ("img/ico.jpg")); this.setLayout (ใหม่ BoxLayout (นี่, boxlayout.y_axis)); this.setsize (200, 408); this.setLocation (20, 5); this.add (jlabel, null); this.add (jlabel1, null); this.add (jlabel11, null); this.add (jlabel12, null); addjlabel (); } การอัปเดตโมฆะส่วนตัว () {// อัปเดตอินเตอร์เฟส UI; this.updateUi (); } โมฆะส่วนตัว clickblack2 (jlabel [] jb) {// คลิกที่แท็กและตั้งค่าแท็กต่อไปนี้ทั้งหมดให้มองไม่เห็น สำหรับ (int i = 1; i <jb.length; i ++) {ลอง {jb [i] .setVisible (เท็จ); } catch (exception e) {e.printstacktrace (); } } อัปเดต(); } โมฆะส่วนตัว clickblack (jlabel [] jb) {// คลิกที่แท็กและตั้งค่าแท็กต่อไปนี้ทั้งหมดที่จะมองเห็นได้ สำหรับ (int i = 1; i <jb.length; i ++) {ลอง {jb [i] .setVisible (จริง); } catch (exception e) {e.printstacktrace (); } } อัปเดต(); } โมฆะส่วนตัว addjlabel () {// เพิ่มเนื้อหาบัญชีดำ; สุดท้าย Jlabel [] jb = new Jlabel [7]; jb [0] = new jlabel (); jb [0] .settext ("Blacklist"); JB [0] .Seticon (ImageIcon ใหม่ ("IMG/ICO2.jpg")); JB [0] .setBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jb [0] .addmouselistener (ใหม่ java.awt.event.mouseadapter () {โมฆะสาธารณะ mouseclicked (java.awt.event.mousevent e) {clickb+= 1; ถ้า (clickb%2 == 1) {clickblack (jb); jb [0] } else {clickblack2 (jb); this.add (jb [0], null); สำหรับ (int i = 1; i <jb.length; i ++) {jb [i] = new jlabel (); jb [i] .seticon (imageicon ใหม่ ("img/bg.jpg")); jb [i] .setBorder (BorderFactory.CreateSptyBorder (2, 2, 2, 2)); jb [i] .add (สมาชิกใหม่ ((i+3), "coolbaby"+(i+3), 200) .jpanel); jb [i] .setvisible (เท็จ); this.add (jb [i], null); - แพ็คเกจ coolbaby6; นำเข้า java.awt.borderlayout; นำเข้า javax.swing.jframe นำเข้า Javax.swing.jpanel; นำเข้า Javax.swing.jscrollpane; นำเข้า Javax.swing.scrollpaneconstants; JPANEL ส่วนตัว JCONTENTPANE = NULL; jscrollpane ส่วนตัว scrollpane = null; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {swingutilities.invokelater (ใหม่ runnable () {public void run () {แอปพลิเคชัน testframe = new testFrame (); application.getJFrame (). setVisible (จริง);}}); } ส่วนตัว jFrame getJFrame () {ถ้า (jFrame == null) {jFrame = new JFrame (); JFrame.SetDefaultCloseOperation (jframe.exit_on_close); jframe.setsize (230, 700); jframe.settitle ("จำลองเพื่อใช้ฟังก์ชั่นพาเนล QQ"); jframe.setContentPane (getJcontentPane ()); } return jframe; } ส่วนตัว jscrollpane getScrollpane () {// เพิ่มแถบเลื่อนลงในคอนเทนเนอร์ jpanel ที่เพิ่มเพื่อน; if (scrollpane == null) {scrollpane = ใหม่ jscrollpane (testPane ใหม่ ()); //scrollpane.setbounds(20,5, -1, 600); Scrollpane.sethorizontalscrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never); // อย่าแสดง scrollbars แนวนอน; } return scrollpane; } ส่วนตัว jPanel getJcontentPane () {// อินสแตนซ์คอนเทนเนอร์พื้นฐาน jPanel; if (jContentPane == null) {jContentPane = new JPanel (); jcontentpane.setLayout (New BorderLayout ()); jcontentpane.add (getScrollpane (), borderlayout.center); } return jcontentpane; - กลยุทธ์ในการรวบรวมซอร์สโค้ดของฉันสำเร็จ:
①. สร้างโครงการสร้าง 3 หมวดหมู่ตามชื่อคลาสของฉันและคัดลอกซอร์สโค้ดใน;
②. สร้างโฟลเดอร์ที่เรียกว่า IMG ในไดเรกทอรีรากของโครงการและวางรูปภาพที่จะใช้ในนั้น (รูปภาพที่เกี่ยวข้องไม่ได้อัปโหลดอีกต่อไปเพียงแค่หารูปภาพสองสามภาพเพื่อทดสอบ)
③รวบรวมและนำไปใช้;
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น