Cuando estaba deambulando por Internet, descubrí que muchas personas estaban muy preocupadas por el problema de usar Java para implementar el panel después del inicio de sesión de QQ. Recientemente, estaba escribiendo proyectos que simulan QQ, así que encontré este problema indispensable. Fui a Google y Baidu en línea. Finalmente, descubrí que muchas personas estaban preocupadas por este problema, pero no tenían solución. Probablemente sean aquellos quienes lo escribieron y no lo publicaron en línea. Ahora, después de buscar información de múltiples aspectos, finalmente la escribí. No es en vano que me quedé despierto hasta tarde anoche. Jaja, echemos un vistazo a la captura de pantalla del efecto de implementación:
Ok, este es el efecto. Aunque las funciones básicas se implementan, todavía es imperfecta. Por ejemplo, el panel de amigos no se puede cambiar a medida que la ventana cambia de tamaño, pero debería haberse resuelto. Todavía no está practicado. Publicemos el código fuente a continuación:
Hay tres categorías en total:
MemberModel.java // Clase de plantilla que muestra información de etiqueta de amigo tipo QQ;
TestPane.java // Agregar clase de contenedor a varias plantillas;
Testframe.java // class de formulario;
La parte central son las dos primeras clases. Tenga en cuenta que el método de diseño de la segunda clase no puede estar vacío, de lo contrario no puede ser una barra de desplazamiento de visualización de contenedores. Este es un problema en la implementación de esta función del panel, porque no sé cómo usar otros métodos de diseño, por lo que solo uso el diseño vacío con frecuencia. Después de este tiempo, me di cuenta de que usar un diseño vacío solo no es posible, y la aplicación del diseño vacío está demasiado restringida.
La forma de agregar información de amigos en testPane.java debería ser la forma de agregar información de la lista negra en el código. Puede llamar a métodos en otras clases, pasar parámetros (matrices) e inicializar la plantilla de información. La plantilla de información en el panel se genera desde el comienzo del programa, pero es invisible. Después de hacer clic en la etiqueta de clasificación relevante, la visualización y la invisible son los mismos. Es decir, como muchos amigos que tengan, siempre habrá jlabels en su panel, pero es posible que no los vea. Siento que mi método de implementación no es muy bueno. En el método de diseño que uso, el ancho de la etiqueta es seguro. No sé cómo establecer su ancho y altura, por lo que agrego un icono blanco (185 x 60) a la etiqueta para que la etiqueta sea más amplia, y luego agrego la plantilla jpanel. Si los internautas tienen una buena solución, espero darle algunos consejos.
El siguiente es el código fuente:
paquete coolbaby6; import javax.swing.imageicon; import javax.swing.jpanel; import javax.swing.jbutton; import java.awt.color; import java.awt.rectangle; import javax.swing.jlabel; import java.awt.dimension; Long SerialVersionUid = 1L; Public JButton JButton = NULL; // Show Friend Avatar; público jpanel jpanel = new jpanel (); // contenedor de plantilla; privado jlabel lb_nickname = null; // show apodo; Private int PIC; apodo de cadena privada = nulo; privado jlabel lb_mood = null; // show toall; public memberModel (int Pic, String Nickname, int Len) {super (); this.pic = pic; // compilación de avatar (hay muchas formas de implementar, este es el más simple) this.nickName = Nnokname; // Nickname; inicializar(); } private void inicialize () {lb_mood = new JLabel (); lb_mood.setBounds (nuevo rectángulo (51, 30, 131, 20)); lb_mood.setfont (nueva fuente ("diálogo", font.plain, 12)); lb_mood.settext ("¡La distancia más lejana del mundo no es la vida y la muerte, pero me paro frente a ti y no sabes que te amo!"); lb_mood.addmouseListener (new java.awt.event.mouseadapter () {public void mouseentered (java.awt.event.mouseevent e) {intercambioSenter (); lb_mood.settooltiptext (lb_mood.gettext ());} public void mOuseexited (javevent.wext.weat.weat.weat.weat.weat.weat.weat.WouseEte e) {ExchangeExited (); lb_nickname = new JLabel (); lb_nickname.setBounds (nuevo rectángulo (52, 10, 80, 20)); lb_nickname.setFont (nueva fuente ("diálogo", font.bold, 14)); lb_nickname.settext (apodo); jpanel.setsize (nueva dimensión (185, 60)); jpanel.setLayout (nulo); jpanel.add (getJButton (), nulo); jpanel.add (lb_nickname, null); jpanel.add (lb_mood, nulo); jpanel.addMousElistener (nuevo java.awt.event.Mouseadapter () {public void MouseExited (java.awt.event.MouseEvent e) {ExchangeExited (); // Mouse Mover fuera del área de plantilla y cambiar el color de fondo;} public intercambio (); // mover el mouse al área de la plantilla y cambiar el color de fondo; } private void ExchangeNer () {jPanel.setBackground (nuevo color (192,224,248)); } private void ExchangeExited () {jPanel.SetBackground (nulo); } private jButton getJButton () {if (jButton == null) {jButton = new JButton (); JButton.setBounds (nuevo rectángulo (8, 10, 40, 40)); JButton.SetBackground (nuevo color (236, 255, 236)); JButton.Seticon (nuevo Imageicon (Pic + ".jpg")); jButton.addMousElistener (new java.awt.event.Mouseadapter () {public void MouseExited (java.awt.event.MouseEvent e) {ExchangeExited (); // Mouse Mover fuera del área de plantilla y cambiar el color de fondo;} public intercambio (); // mover el mouse al área de la plantilla y cambiar el color de fondo; } return jButton; }} paquete coolbaby6; import javax.swing.borderFactory; import javax.swing.jpanel; import javax.swing.jlabel; import javax.swing.boxLayout; import javax.swing.Imageicon; clase pública testPane se extiende jpanel {private estatic estatic final serialversión = 1l; privado jlabel jlabel = nulo; privado jlabel jlabel1 = nulo; privado jlabel jlabel11 = nulo; privado jlabel jlabel12 = nulo; private int clickf = 0; private int clickb = 0; public testPane () {super (); inicializar(); } private void inicialize () {jlabel12 = new JLabel (); jlabel12.Seticon (nuevo Imageicon ("img/bg.jpg")); jlabel12.Add (nuevo miembro Model (3, "CoolBaby3", 200) .jpanel); JLabel12.SetBorder (BorderFactory.CreateEemptyBorder (2, 2, 2, 2)); jlabel11 = new JLabel (); jlabel11.Seticon (nuevo Imageicon ("img/bg.jpg")); jlabel11.add (nuevo miembro Model (2, "Coolbaby2", 200) .jpanel); JLabel11.setBorder (BorderFactory.CreateEptyBorder (2, 2, 2, 2)); jlabel1 = new JLabel (); jlabel1.Seticon (nuevo Imageicon ("img/bg.jpg")); jlabel1.add (nuevo miembro Model (1, "Coolbaby1", 200) .jpanel); JLabel1.setBorder (BorderFactory.CreateEptyBorder (2, 2, 2, 2)); jlabel = new JLabel (); jlabel.settext ("mi amigo"); jlabel.Seticon (nuevo Imageicon ("img/ico.jpg")); jlabel.setBorder (BorderFactory.CreateEemptyBorder (2, 2, 2, 2)); jlabel.addmouseListener (nuevo java.awt.event.mouseadapter () {public void MouseClicked (java.awt.event.mouseevent e) {click+= 1; if (clickf%2 == 1) {jlabel1.setVisible (falso); jlabel11.setvisible (falso); jlabel12.setVisible (falso); ImageiCon ("img/ico.jpg"); this.setLayout (nuevo BoxLayout (this, 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 (); } private void Update () {// Actualizar la interfaz UI; this.updateui (); } private void clickblack2 (jlabel [] jb) {// Haga clic en las etiquetas y configure todas las etiquetas siguientes para ser invisibles; for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (false); } catch (Exception e) {E.PrintStackTrace (); } } actualizar(); } private void clickblack (jlabel [] jb) {// Haga clic en las etiquetas y configure todas las siguientes etiquetas para que sean visibles; for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (true); } catch (Exception e) {E.PrintStackTrace (); } } actualizar(); } private void addjlabel () {// Agregar contenido de lista negra; Jlabel final [] jb = new JLabel [7]; jb [0] = new JLabel (); JB [0] .settext ("Blacklist"); JB [0] .Seticon (nuevo Imageicon ("IMG/ICO2.JPG")); JB [0] .SetBorder (BorderFactory.CreateEemptyBorder (2, 2, 2, 2)); jb [0] .addMousElistener (nuevo java.awt.event.mouseadapter () {public void mouseClicked (java.awt.event.mouseevent e) {clickb+= 1; if (clickb%2 == 1) {clickblack (jb); jb [0] .seticon (new imageicon ("img/iCo); } else {clickblack2 (jb); this.add (JB [0], nulo); for (int i = 1; i <jb.length; i ++) {jb [i] = new JLabel (); jb [i] .Seticon (nuevo Imageicon ("img/bg.jpg")); JB [i] .setBorder (BorderFactory.CreateEemptyBorder (2, 2, 2, 2)); JB [i] .Add (nuevo miembro Model ((i+3), "Coolbaby"+(i+3), 200) .jpanel); jb [i] .setVisible (falso); this.add (JB [i], nulo); }}} paquete coolbaby6; import java.awt.borderlayout; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.scrollpaneconstants; import javax.swing.swinitilidad; clase pública testframe {private jframe jframe = nula; privado jpanel jContentPane = null; privado jscrollpane scrollpane = null; public static void main (string [] args) {swingUtility.invokelater (new runnable () {public void run () {testFrame Application = new testFrame (); Application.getJFrame (). SetVisible (True);}}); } private jframe getJFrame () {if (jframe == null) {jframe = new jframe (); jframe.setDefaultCloseOperation (jframe.exit_on_close); jframe.setsize (230, 700); jframe.settitle ("Simular para implementar funciones del panel QQ"); jframe.setContentPane (getJContentPane ()); } return jframe; } private jscrollPane getScrollPane () {// Agregar barra de desplazamiento al contenedor jpanel que agrega amigos; if (scrollPane == null) {scrollPane = new JScrollPane (nuevo testPane ()); //scrollPane.setBounds(20,5, -1, 600); scrollpane.sethorizontalscrollBarpolicy (scrollpaneconstants.horizontal_scrollbar_never); // No muestre barras de desplazamiento horizontal; } return scrollPane; } private jpanel getJContentPane () {// instanciar el contenedor subyacente jpanel; if (jContentPane == null) {jContentPane = new JPanel (); jContentPane.setLayout (nuevo BorderLayout ()); JContentPane.Add (GetsCrollPane (), BorderLayout.Center); } return jContentPane; }} Una estrategia para compilar con éxito mi código fuente:
①. Cree un proyecto, cree 3 categorías de acuerdo con el nombre de mi clase y copie el código fuente en;
②. Cree una carpeta llamada IMG en el directorio raíz del proyecto y coloque las imágenes para que se usen en él. (Las imágenes relacionadas ya no están cargadas, solo encuentre algunas imágenes para probar)
③, compilar e implementar;
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.