私がインターネットをさまよっていたとき、QQログイン後にJavaを使用してパネルを実装するという問題に非常に悩まされていることがわかりました。最近、私はQQをシミュレートするプロジェクトを書いていたので、この問題に不可欠な問題に遭遇しました。オンラインでGoogleとBaiduに行きました。最後に、私は多くの人々がこの問題に悩まされているが、解決策がなかったことを発見しました。それはおそらくそれを書いて、オンラインで投稿しなかった人です。さて、複数の側面からの情報を検索した後、ついに書きました。昨夜遅くまで起きたのは無駄ではありません。ははは、実装効果のスクリーンショットを見てみましょう。
OK、これが効果です。基本的な関数は実装されていますが、それでも不完全です。たとえば、ウィンドウのサイズが変更されても友達パネルを変更することはできませんが、解決する必要があります。まだ実践されていません。以下にソースコードを投稿しましょう。
合計で3つのカテゴリがあります。
memberModel.java // QQのようなフレンドタグ情報を表示するテンプレートクラス。
testpane.java //コンテナクラスを複数のテンプレートに追加します。
testframe.java // form class;
コア部分は最初の2つのクラスです。 2番目のクラスのレイアウト方法は空にすることはできないことに注意してください。そうしないと、コンテナディスプレイスクロールバーではないことに注意してください。これは、他のレイアウト方法を使用する方法がわからないため、このパネル関数を実装する際の問題です。したがって、頻繁に空のレイアウトのみを使用します。この時間の後、空のレイアウトのみを使用することは不可能であり、空のレイアウトの適用が制限されていることに気付きました。
testpane.javaに友達情報を追加する方法は、コードにブラックリスト情報を追加する方法である必要があります。他のクラスのメソッドを呼び出し、パラメーター(配列)を渡してから、情報テンプレートを初期化できます。パネルの情報テンプレートは、プログラムの最初から生成されますが、目に見えないように設定されています。関連する分類ラベルをクリックした後、視覚化と見えないものは同じです。つまり、あなたが持っている多くの友人がいるように、あなたのパネルには常にJlabelsがありますが、あなたは彼らを見ることができないかもしれません。私の実装方法はあまり良くないと感じています。私が使用するレイアウト方法では、ラベルの幅が確実です。幅と高さを設定する方法がわからないので、ラベルをより広くするために白いアイコン(185 x 60)をラベルに追加してから、テンプレートJPanelを追加します。ネチズンが良い解決策を持っているなら、私はあなたにいくつかのアドバイスを与えることを願っています。
以下はソースコードです。
パッケージ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; Impratedimension; Impratedimension; long serialversionuid = 1l; Public JButton JButton = null; //フレンドアバターを表示します。 public jpanel jpanel = new JPanel(); //テンプレートコンテナ; private jlabel lb_nickname = null; // show nickname;プライベートINT PIC;プライベートストリングニックネーム= null;プライベートJlabel lb_mood = null; //ムードを表示; public MemberModel(int pic、string nickname、int len){super(); this.pic = pic; // avatarコンピレーション(実装する方法はたくさんあります。これは最も簡単です)this.nickname = nickname; // nickname; initialize(); } private void initialize(){lb_mood = new Jlabel(); lb_mood.setbounds(新しい長方形(51、30、131、20)); lb_mood.setfont(new Font( "Dialog"、font.plain、12)); lb_mood.settext( "世界で最も遠い距離は生と死ではありませんが、私はあなたの前に立っていて、あなたは私があなたを愛していることを知りません!」); lb_mood.addmouseListener(new Java.awt.event.mouseadapter(){public void mouseentered(java.awt.event.event.mouseevent e){exchangeenter(); lb_mood.settooltiptext(lb_mood.getext());} public void museted( e){ExchangeExited(); lb_nickname = new Jlabel(); lb_nickname.setbounds(new Rectangle(52、10、80、20)); lb_nickname.setfont(new Font( "Dialog"、font.bold、14)); lb_nickname.settext(nickname); jpanel.setsize(new 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 mouseExited(java.awt.event.event.event.exexited(); //マウスはテンプレート領域から移動し、背景を変更し、背景の色を変更します; ExchangeEnter(); //マウスをテンプレート領域に移動し、背景色を変更します。 } private void ExchangeEnter(){jpanel.setbackground(new Color(192,224,248)); } private void ExchangeExited(){jpanel.setbackground(null); } private jbutton getjbutton(){if(jbutton == null){jbutton = new jbutton(); jbutton.setbounds(新しい長方形(8、10、40、40)); jbutton.setbackground(新しい色(236、255、236)); jbutton.seticon(new Imageicon(pic + ".jpg")); jbutton.addmouseListener(new Java.awt.event.mouseadapter(){public void mouseExited(java.awt.event.event.event.exexited(); //マウスはテンプレート領域から移動し、背景を変更し、背景色を変更します; ExchangeEnter(); //マウスをテンプレート領域に移動し、背景色を変更します。 } jbuttonを返します。 }}パッケージcoolbaby6; import javax.swing.borderfactory; Import javax.swing.jpanel; Import javax.swing.jlabel; import javax.swing.swing.boxlayout; Import javax.swing.imageicon; public class testpane extends jpanel {private static final long serialversionuid = 1l;プライベートJlabel jlabel = null; private Jlabel Jlabel1 = null;プライベートJlabel Jlabel11 = null; private Jlabel Jlabel12 = null; private int clickf = 0; private int clickb = 0; public testpane(){super(); initialize(); } 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( "my friend"); 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); jlabel11.setvisible); jlabel12. false.seticon( "img/ico2.jpg); ImageIcon( "img/ico.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(){// UIインターフェイスを更新します。 this.updateui(); } private void clickblack2(jlabel [] jb){//タグをクリックして、次のすべてのタグを目に見えないように設定します。 for(int i = 1; i <jb.length; i ++){try {jb [i] .setVisible(false); } catch(Exception e){e.printstacktrace(); } } アップデート(); } private void clickblack(jlabel [] jb){//タグをクリックし、次のすべてのタグを表示するように設定します。 for(int i = 1; i <jb.length; i ++){try {jb [i] .setVisible(true); } catch(Exception e){e.printstacktrace(); } } アップデート(); } private void addjlabel(){//ブラックリストコンテンツを追加します。 final jlabel [] 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); } else {clickblack2(jb); 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 MemberModel((i+3)、 "coolbaby"+(i+3)、200).jpanel); jb [i] .setVisible(false); this.add(jb [i]、null); }}}パッケージcoolbaby6; import java.awt.borderlayout; Import javax.swing.jframe; Import javax.swing.jpanel; Import javax.swing.jscrollpane; Import javax.swing.scrollpaneconstants; import javax.swing.swing.swing = nullame;プライベートjpanel jcontentpane = null;プライベートJScrollpane Scrollpane = null; public static void main(string [] args){shingutilities.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( "qqパネル関数を実装するためにシミュレートする"); jframe.setContentPane(getJContentPane()); } jframeを返します。 } private jscrollpane getScrollpane(){//友人を追加するコンテナjpanelにscrollbarを追加します。 if(scrollpane == null){scrollpane = new jscrollpane(new testPane()); //scrollpane.setBounds(20,5、-1、600); scrollpane.sethorizontalscrollbarpolicy(scrollpaneconstants.horizontal_scrollbar_never); //水平スクロールバーを表示しないでください。 } returnscrollpane; } private jpanel getjcontentpane(){//基礎となるコンテナjpanelをインスタンス化します。 if(jcontentpane == null){jcontentpane = new jPanel(); jcontentpane.setlayout(new borderlayout()); jcontentpane.add(getscrollpane()、borderlayout.center); } jcontentpaneを返します。 }}ソースコードを正常にコンパイルする戦略:
①。プロジェクトを作成し、クラス名に従って3つのカテゴリを構築し、ソースコードをコピーします。
②。プロジェクトのルートディレクトリにIMGというフォルダーを作成し、使用する写真を使用します。 (関連する写真はアップロードされなくなりました。テストする写真をいくつか見つけてください)
③、コンパイルして実装します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。