Quando eu estava vagando pela Internet, descobri que muitas pessoas estavam muito perturbadas com o problema de usar o Java para implementar o painel após o login QQ. Recentemente, eu estava escrevendo projetos que simulam QQ, então encontrei esse problema indispensável. Eu fui ao Google e Baidu online. Finalmente, descobri que muitas pessoas estavam perturbadas com esse problema, mas não tinham solução. Provavelmente, foram aqueles que o escreveram e não o publicaram online. Agora, depois de procurar informações de vários aspectos, finalmente escrevi. Não é em vão que fiquei acordado até tarde da noite passada. Haha, vamos dar uma olhada na captura de tela do efeito de implementação:
Ok, este é o efeito. Embora as funções básicas sejam implementadas, ainda é imperfeita. Por exemplo, o painel de amigos não pode ser alterado à medida que a janela muda de tamanho, mas deveria ter sido resolvida. Ainda não é praticado. Vamos postar o código -fonte abaixo:
Existem três categorias no total:
MemberModel.java // Classe de modelo que exibe informações de tag de amizade do tipo QQ;
Testpane.java // Adicionar classe de contêiner a vários modelos;
TestFrame.java // Classe de formulário;
A parte principal é as duas primeiras classes. Observe que o método de layout da segunda classe não pode estar vazio, caso contrário, não pode ser uma barra de rolagem de exibição de contêineres. Isso é um problema na implementação desta função do painel, porque não sei como usar outros métodos de layout; portanto, eu só uso o layout vazio com frequência. Após esse período, percebi que o uso de layout vazio não é possível e a aplicação do layout vazia é muito restrita.
A maneira de adicionar informações de amigos no testpane.java deve ser a maneira de adicionar informações da lista negra no código. Você pode chamar métodos em outras classes, passar parâmetros (matrizes) e inicializar o modelo de informação. O modelo de informação no painel é gerado desde o início do programa, mas está definido para ser invisível. Depois de clicar no rótulo de classificação relevante, a visualização e a invisível são os mesmos. Ou seja, como muitos amigos que você tem, sempre haverá jlabels no seu painel, mas você pode não vê -los. Eu sinto que meu método de implementação não é muito bom. No método de layout que uso, a largura do rótulo é certa. Não sei como definir sua largura e altura, então adiciono um ícone branco (185 x 60) ao rótulo para tornar a etiqueta mais larga e, em seguida, adiciono o modelo JPanel. Se os internautas tiverem uma boa solução, espero dar -lhe alguns conselhos.
A seguir, o código -fonte:
pacote coolbaby6; importar javax.swing.imageicon; importar javax.swing.jpanel; importar javax.swing.jbutton; importar java.awt.color; importar java.awt.rectangle; importa javax.swing.jlaBel; importMMAwt.Mimension; importantes; serialversionUid longo = 1L; jbutton público jbutton = null; // show amigo avatar; public jpanel jpanel = new jpanel (); // contêiner de modelo; private Jlabel lb_nickname = null; // Mostrar apelido; private int pic; apelido de string privada = null; private jlabel lb_mood = null; // mostra humor; public membroModel (int pic, apelido de cordas, int len) {super (); this.pic = pic; // compilação de avatar (existem muitas maneiras de implementar, isso é o mais simples) this.nickname = apelido; // apelido; inicializar(); } private void inicialize () {lb_mood = new jlabel (); lb_mood.setbounds (novo retângulo (51, 30, 131, 20)); lb_mood.setfont (new font ("diálogo", font.plain, 12)); lb_mood.settext ("A distância mais distante do mundo não é a vida e a morte, mas eu estou na sua frente e você não sabe que eu te amo!"); lb_mood.addmouselistener (new java.awt.event.mouseAdApter () {public void mouseEntered (java.awt.event.mouseevent e) {ExchangeEnter (); lb_mood.setTooltipText (lb_mood.getText (); e) {ExchangeExited (); lb_nickname = new jlabel (); lb_nickname.setBounds (novo retângulo (52, 10, 80, 20)); lb_nickname.setfont (new font ("diálogo", font.bold, 14)); lb_nickname.settext (apelido); jpanel.setsize (nova dimensão (185, 60)); jpanel.setLayout (nulo); jpanel.add (getjbutton (), nulo); jpanel.add (lb_nickname, null); jpanel.add (lb_mood, nulo); jpanel.addmouselistener (novo java.awt.event.mouseAdapter () {public void mouseexited (java.awt.event.mouseevent e) {ExchangeExited (); // mouse se move para fora da área de modelo e altere a cor de fundo;} public e mamouseDert (/iMous se move para fora da área de modelo e altere a cor de fundo;}} mamoused (javanten (javantes de camundongo. ExchangeEnter (); // mova o mouse para a área do modelo e altere a cor do fundo; } private void ExchangeEnter () {jpanel.setbackground (New Color (192.224.248)); } private trocaExited () {jpanel.setbackground (null); } private jbutton getjbutton () {if (jbutton == null) {jbutton = new jbutton (); jbutton.setbounds (novo retângulo (8, 10, 40, 40)); jbutton.setbackground (nova cor (236, 255, 236)); jbutton.seticon (novo imageicon (pic + ".jpg")); jbutton.addmouselistener (New java.awt.event.mouseAdapter () {public void mouseexited (java.awt.event.mouseevent e) {ExchangeExited (); // mouse se move para fora da área de modelo e altere a cor de fundo;}} mamoused (javante- javante. ExchangeEnter (); // mova o mouse para a área do modelo e altere a cor do fundo; } retornar JButton; }} package coolbaby6;import javax.swing.BorderFactory;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.BoxLayout;import javax.swing.ImageIcon;public class TestPane extends JPanel { private static final long serialVersionUID = 1L; private jlabel jlabel = null; private jlabel jlabel1 = null; private Jlabel jlabel11 = null; private jlabel jlabel12 = null; privado int clickf = 0; private int clickb = 0; public testpane () {super (); inicializar(); } private void inicialize () {jlabel12 = new jlabel (); jlabel12.seticon (novo 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 (novo 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 (novo 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 ("meu amigo"); jlabel.seticon (novo imageicon ("img/ico.jpg"); jlabel.setborder (borderfactory.createEmptyborder (2, 2, 2, 2)); jlabel.addmouselistener (novo java.awt.event.mouseAdApter () {public void mouseclicked (java.awt.event.mouseevent e) {clickf+= 1; if (clickf%2 == 1) {jlabel1.setVisible (false); Jlabel12.SetVisible (False); Imageicon ("img/ico.jpg")); this.setLayout (new Boxlayout (this, boxlayout.y_axis)); this.SetSize (200, 408); this.setLocation (20, 5); this.add (Jlabel, nulo); this.add (jlabel1, nulo); this.add (Jlabel11, nulo); this.add (jlabel12, nulo); addjlabel (); } private void update () {// Atualize a interface da interface do usuário; this.updateUi (); } private void clickblack2 (jlabel [] jb) {// Clique nas tags e defina todas as seguintes tags como invisíveis; for (int i = 1; i <jb.length; i ++) {tente {jb [i] .SetVisible (false); } catch (Exceção e) {e.printStackTrace (); } } atualizar(); } private void clickblack (jlabel [] jb) {// Clique nas tags e defina todas as seguintes tags como visíveis; for (int i = 1; i <jb.Length; i ++) {try {jb [i] .SetVisible (true); } catch (Exceção e) {e.printStackTrace (); } } atualizar(); } private void addjlabel () {// Adicione conteúdo da lista negra; final jlabel [] jb = new jlabel [7]; jb [0] = new jlabel (); JB [0] .Settext ("Blacklist"); jb [0] .Seticon (novo imageicon ("img/ico2.jpg"); JB [0] .Setborder (BorderFactory.CreateEmptyborder (2, 2, 2, 2)); JB [0] .AddMouseListener (novo java.awt.event.mouseAdApter () {public void mouseclicked (java.awt.event.mouseevent e) {clickb+= 1; if (clickb%2 == 1) {clickblack (jb); jb [0]. } else {clickblack2 (jb); this.add (jb [0], nulo); for (int i = 1; i <jb.length; i ++) {jb [i] = new jlabel (); jb [i] .Seticon (novo imageicon ("img/bg.jpg")); jb [i] .setborder (borderfactory.createEmptyborder (2, 2, 2, 2)); jb [i] .Add (novo membro Model ((i+3), "coolbaby"+(i+3), 200) .jpanel); jb [i] .setVisible (false); this.add (jb [i], nulo); }}} pacote coolbaby6; importar java.awt.borderlayout; importar javax.swing.jframe; importar javax.swing.jpanel; importar javax.swing.jscrollPane; import javax.swing.scrollPaneCoNStants; importen; private JPanel JContentPane = null; private jscrollPane scrollPane = null; public static void main (string [] args) {swingutilities.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 funções do painel QQ"); jframe.setContentPane (getjContentPane ()); } retornar jframe; } private jscrollPane getSCrollPane () {// Adicione scrollbar ao contêiner jpanel que adiciona amigos; if (scrollPane == null) {scrollPane = new jscrollPane (new testpane ()); //ScrollPane.setBounds(20,5, -1, 600); scrollPane.SethorizontalsCrollBarPolicy (scrollPaneConstants.horizontal_scrollbar_never); // não exibe barras de rolagem horizontal; } return scrollpane; } private jpanel getjContentPane () {// instanciam o contêiner subjacente JPanel; if (jContentPane == NULL) {JCOntentPane = new JPanel (); jContentPane.setLayout (new BorderLayout ()); jContentPane.add (getsCrollPane (), borderlayout.center); } retornar JContentPane; }} Uma estratégia para compilar com sucesso meu código -fonte:
①. Crie um projeto, construa 3 categorias de acordo com o nome da minha classe e copie o código -fonte em;
②. Crie uma pasta chamada IMG no diretório raiz do projeto e coloque as imagens a serem usadas nele. (As imagens relacionadas não são mais carregadas, basta encontrar algumas fotos para testar)
③, compilar e implementar;
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.