Lorsque je me promenais sur Internet, j'ai trouvé que beaucoup de gens étaient très troublés par le problème de l'utilisation de Java pour implémenter le panneau après la connexion QQ. Récemment, j'écrivais des projets qui simulent QQ, j'ai donc rencontré ce problème indispensable. Je suis allé sur Google et Baidu en ligne. Enfin, j'ai constaté que beaucoup de gens étaient troublés par ce problème mais n'avaient aucune solution. Ce sont probablement ceux qui l'ont écrit et ne l'ont pas posté en ligne. Maintenant, après avoir cherché des informations à partir de plusieurs aspects, je l'ai finalement écrit. Ce n'est pas vain que je suis resté debout tard hier soir. Haha, jetons un coup d'œil à la capture d'écran de l'effet de mise en œuvre:
Ok, c'est l'effet. Bien que les fonctions de base soient implémentées, elle est toujours imparfaite. Par exemple, le panneau d'ami ne peut pas être modifié à mesure que la fenêtre change de taille, mais elle aurait dû être résolue. Ce n'est pas encore pratiqué. Postons le code source ci-dessous:
Il y a trois catégories au total:
Classe de modèles MemberModel.java // qui affiche des informations de balise d'ami de type QQ;
TestPane.java // Ajouter une classe de conteneur à plusieurs modèles;
TestFrame.java // Classe de formulaire;
La partie centrale est les deux premières classes. Notez que la méthode de mise en page de la deuxième classe ne peut pas être vide, sinon il ne peut pas être une barre de défilement d'affichage de conteneur. Ceci est un problème dans la mise en œuvre de cette fonction de panneau, car je ne sais pas comment utiliser d'autres méthodes de mise en page, donc j'utilise fréquemment la mise en page vide. Après ce temps, j'ai réalisé que l'utilisation de la disposition vide n'est pas possible et que l'application de la disposition vide est trop restreinte.
La façon d'ajouter des informations d'ami dans testpane.java devrait être le moyen d'ajouter des informations sur la liste noire dans le code. Vous pouvez appeler des méthodes dans d'autres classes, passer des paramètres (tableaux), puis initialiser le modèle d'information. Le modèle d'information sur le panneau est généré à partir du début du programme, mais il est défini comme invisible. Après avoir cliqué sur l'étiquette de classification pertinente, la visualisation et l'invisible sont les mêmes. C'est-à-dire que, comme de nombreux amis que vous avez, il y aura toujours des jlabels sur votre panneau, mais vous ne les verrez peut-être pas. Je pense que ma méthode de mise en œuvre n'est pas très bonne. Dans la méthode de mise en page que j'utilise, la largeur de l'étiquette est certaine. Je ne sais pas comment régler sa largeur et sa hauteur, donc j'ajoute une icône blanche (185 x 60) à l'étiquette pour rendre l'étiquette plus large, puis ajoute le modèle jpanel. Si les internautes ont une bonne solution, j'espère que je vous donnerai quelques conseils.
Ce qui suit est le code source:
Package CoolBaby6; import javax.swing.imageicon; import javax.swing.jpanel; import javax.swing.jbutton; import java.awt.color; import java.awt.rectang long SerialVersionUID = 1L; public jbutton jbutton = null; // show friend avatar; public jpanel jpanel = new jpanel (); // contenant de modèle; privé jlabel lb_nickname = null; // montrer un surnom; INT PRIVÉ PIC; String privé surnom = null; privé jlabel lb_mood = null; // montrer l'humeur; Public MememberModel (int pic, string ne surnom, int len) {super (); this.pic = pic; // compilation avatar (il existe de nombreuses façons d'implémenter, c'est le plus simple) this.nickName = surnom; // ne surnom; initialiser(); } private void initialize () {lb_mood = new JLabel (); lb_mood.setbounds (nouveau rectangle (51, 30, 131, 20)); lb_mood.setfont (new Font ("Dialog", Font.Plain, 12)); LB_MOOD.SETTEXT ("La distance la plus éloignée du monde n'est pas la vie et la mort, mais je me tiens devant vous et vous ne savez pas que je t'aime!"); lb_mood.addmouseListener (new java.awt.event.mouseAdapter () {public void muouseentered (java.awt.event.mousevent e) {Exchangesenter (); lb_mood.settooltipText (lb_mood.gettex {ExchangeExit ();}}); lb_nickName = new JLabel (); lb_nickname.setbounds (nouveau rectangle (52, 10, 80, 20)); lb_nickname.setfont (new Font ("Dialog", font.bold, 14)); lb_nickname.setText (surnom); jpanel.setSize (nouvelle dimension (185, 60)); jpanel.setLayout (null); jpanel.add (getJbutton (), null); jpanel.add (lb_nickname, null); jpanel.add (lb_mood, null); jpanel.addmouseListener (new java.awt.event.mouseadapter () {public void MouseExit (java.awt.event.mouseevent e) {ExchangeExited (); // souris éloigne de la zone du modèle et changez la couleur de fond; ExchangeSer (); // déplacez la souris dans la zone du modèle et modifiez la couleur d'arrière-plan; } private void Exchangesenter () {jpanel.setbackground (nouvelle couleur (192 224,248)); } private void ExchangeExited () {jpanel.setbackground (null); } privé jbutton getJbutton () {if (jbutton == null) {jbutton = new JButton (); jbutton.setbounds (nouveau rectangle (8, 10, 40, 40)); jbutton.setbackground (nouvelle couleur (236, 255, 236)); JBUTTON.seTICon (New ImageIcon (pic + ".jpg")); jbutton.addmouseListener (new java.awt.event.mouseAdapter () {public void MouseExit (java.awt.event.mouseevent e) {ExchangeExit (); // Mouse quitte de la zone du modèle et changez la couleur de fond;} ExchangeSer (); // déplacez la souris dans la zone du modèle et modifiez la couleur d'arrière-plan; } return jbutton; }} Package CoolBaby6; Importer Javax.swing.BonnerFactory; Importer Javax.swing.jpanel; Importer Javax.Swing.Jlabel; Importer Javax.Swing.BoxLayout; Importer Javax.Swing.imageIcon de classe publique étend Jpanel {privé statique final Long Serialversiid = 1l; JLABEL privé jlabel = null; JLABEL privé jlabel1 = null; JLABEL privé jlabel11 = null; JLABEL privé jlabel12 = null; private int clickf = 0; private int clickb = 0; public testpane () {super (); initialiser(); } private void initialize () {jLabel12 = new JLabel (); JLabel12.SeTICon (new ImageIcon ("img / bg.jpg")); JLABEL12.ADD (New MemberModel (3, "CoolBaby3", 200) .jpanel); JLABEL12.SetBorder (BorderFactory.CreateEMPTyBorder (2, 2, 2, 2)); jLabel11 = new JLabel (); JLabel11.seTICon (new ImageIcon ("img / bg.jpg")); JLabel11.add (New MemberModel (2, "CoolBaby2", 200) .jpanel); JLABEL11.SetBorder (BorderFactory.CreateEmpTyBorder (2, 2, 2, 2)); jLabel1 = new JLabel (); JLabel1.seTICon (new ImageIcon ("img / bg.jpg")); JLabel1.Add (New MemberModel (1, "CoolBaby1", 200) .jpanel); JLABEL1.SetBorder (BorderFactory.CreateEmpTyBorder (2, 2, 2, 2)); jLabel = new JLabel (); jLabel.setText ("mon ami"); JLabel.seTICon (new ImageIcon ("IMG / ICO.JPG")); JLabel.Setborder (BorderFactory.CreateEMPTyBorder (2, 2, 2, 2)); JLabel.AddMouseListener (new Java.awt.Event.MouseAdapter () {public void MouseClicked (java.awt.event.mouseevent e) {clickf + = 1; if (clickf% 2 == 1) {jLabel1.setVisible (false); jlabel11.setVisible (false); jlabel12.setVision); JLabel11. JLabel.seticon (New ImageIcon (IMG / ICO2.JPG "); this.setLayout (new 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 () {// Mettez à jour l'interface d'interface utilisateur; this.updateui (); } private void clickblack2 (jLabel [] jb) {// cliquez sur les balises et définissez toutes les balises suivantes pour être invisible; for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (false); } catch (exception e) {e.printStackTrace (); } } mise à jour(); } private void clickblack (jLabel [] jb) {// cliquez sur les balises et définissez toutes les balises suivantes à visible; for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (true); } catch (exception e) {e.printStackTrace (); } } mise à jour(); } private void addjLabel () {// Ajouter du contenu de la liste noire; JLabel final [] jb = new JLabel [7]; jb [0] = new JLabel (); jb [0] .setText ("BlackList"); JB [0] .seticon (new ImageIcon ("IMG / ICO2.JPG")); JB [0] .setborder (BorderFactory.CreateEMPTyBorder (2, 2, 2, 2)); JB [0] .AddMouseListener (new Java.awt.Event.MouseAdapter () {public void MouseClicked (java.awt.event.mousevent e) {clickb + = 1; if (clickb% 2 == 1) {clickblack (jb); jb [0] .Seticon (new ImageCon ("Impg / ICO.jpg")); } else {clickblack2 (jb); jb [0] .seticon (new ImageIcon ("img / ico2.jpg");}}); this.add (jb [0], null); for (int i = 1; i <jb.length; i ++) {jb [i] = new JLabel (); jb [i] .seticon (new ImageIcon ("img / bg.jpg")); jb [i] .setborder (borderfactory.CreateEmpTyBorder (2, 2, 2, 2)); jb [i] .add (new membreModel ((i + 3), "coolBaby" + (i + 3), 200) .jpanel); jb [i] .setVisible (false); this.add (jb [i], null); }}} Package CoolBaby6; Importer java.awt.borderLayout; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.scrollpanEconstants; import javax.swing.swingutilities; classe publique TestFrame {private jframe jframe = null; Jpanel privé jContentPane = null; JSCROLLPANE privé ScrollPane = NULL; public static void main (String [] args) {swingUtiability.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 ("Simuler pour implémenter les fonctions du panneau QQ"); jFrame.setContentPane (getJContentPane ()); } return jframe; } private jscrollpane getCrollPane () {// Ajouter une barre de scroll au conteneur jpanel qui ajoute des amis; if (scrollPane == null) {scrollPane = new JscrollPane (new TestPane ()); //scrollpane.setbounds(20,5, -1, 600); ScrollPane.SethorizontalscrollBarpolicy (ScrollPanEconstants.Horizontal_Scrollbar_Never); // N'affiche pas les barres de défilement horizontales; } return ScrollPane; } private jpanel getJContentPane () {// Instancier le conteneur sous-jacent jpanel; if (jContentPane == null) {jContentPane = new JPanel (); jContentPane.SetLayout (new BorderLayout ()); jContentPane.add (getScrollPane (), borderLayout.Center); } return jContentPane; }} Une stratégie pour compiler avec succès mon code source:
①. Créez un projet, créez 3 catégories en fonction du nom de ma classe et copiez le code source dans;
②. Créez un dossier appelé IMG dans le répertoire racine du projet et mettez les images à y utiliser. (Les images connexes ne sont plus téléchargées, il suffit de trouver quelques images à tester)
③, compiler et implémenter;
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.