인터넷을 돌아 다니면서 QQ 로그인 후 패널을 구현하기 위해 Java를 사용하는 문제로 인해 많은 사람들이 매우 어려움을 겪고 있음을 알았습니다. 최근에 나는 QQ를 시뮬레이션하는 프로젝트를 작성하고 있었 으므로이 문제가 없어서는 안될 문제가 발생했습니다. 나는 Google과 Baidu Online에 갔다. 마침내, 나는 많은 사람들 이이 문제에 어려움을 겪었지만 해결책이 없다는 것을 알았습니다. 아마 그것을 썼고 온라인으로 게시하지 않은 사람들 일 것입니다. 이제 여러 측면에서 정보를 검색 한 후 마침내 글을 썼습니다. 어젯밤 늦게 머물렀던 것은 헛되지 않습니다. 하하, 구현 효과의 스크린 샷을 살펴 보겠습니다.
좋아, 이것이 효과이다. 기본 기능이 구현되지만 여전히 불완전합니다. 예를 들어, 창의 크기가 변경 될 때 친구 패널을 변경할 수는 없지만 해결해야합니다. 아직 실시되지 않았습니다. 아래에 소스 코드를 게시하겠습니다.
총 세 가지 범주가 있습니다.
QQ와 같은 친구 태그 정보를 표시하는 멤버 모드 .java // 템플릿 클래스;
testpane.java // 여러 템플릿에 컨테이너 클래스를 추가합니다.
testframe.java // 양식 클래스;
핵심 부분은 첫 두 클래스입니다. 두 번째 클래스의 레이아웃 방법은 비어있을 수 없으며, 그렇지 않으면 컨테이너 디스플레이 스크롤 막대가 될 수 없습니다. 다른 레이아웃 방법을 사용하는 방법을 모르므로 빈 레이아웃 만 자주 사용하기 때문에이 패널 기능을 구현하는 데 문제가 있습니다. 이 시간이 지나면 빈 레이아웃 만 사용하는 것이 불가능하고 빈 레이아웃의 적용이 너무 제한되어 있음을 깨달았습니다.
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.color; import java.awt.rectangle; import javax.swing.jlabel; import java.awt.dimension; propubl java.awt.font.font.font.font. 긴 SerialversionUID = 1L; public jbutton jbutton = null; // 친구 아바타 쇼; public jpanel jpanel = new jpanel (); // 템플릿 컨테이너; private jlabel lb_nickname = null; // 닉네임 표시; 개인 INT PIC; 개인 문자열 별명 = null; 개인 jlabel lb_mood = null; // 분위기를 보여줍니다. public membermodel (int pic, 문자열 닉네임, int len) {super (); this.pic = pic; // avatar 컴파일 (구현하는 방법은 여러 가지가 있습니다. 이것은 가장 간단합니다) this.nickname = 별명; // 닉네임; 초기화 (); } private void initialize () {lb_mood = new jlabel (); lb_mood.setbounds (새로운 사각형 (51, 30, 131, 20)); lb_mood.setfont (새 글꼴 ( "대화", font.plain, 12)); lb_mood.settext ( "세상에서 가장 먼 거리는 생명과 죽음이 아니지만 나는 당신 앞에 서서 당신은 내가 당신을 사랑한다는 것을 모른다!"); lb_mood.addmouseListener (new java.awt.event.mouseadapter () {public void mouseEntered (java.awt.event.mouseevent e) {exchangeenter (); lb_mood.settooltiptext (lb_mood.getText ());} mouseexited (java.awt.event.mouseevent e) {exchangeexited ()}; lb_nickname = new Jlabel (); lb_nickname.setbounds (새로운 사각형 (52, 10, 80, 20)); lb_nickname.setfont (new font ( "대화", font.bold, 14)); lb_nickname.settext (닉네임); 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.mouseevent e) {exchangeexited (); 템플릿 영역을 벗어나 배경 색상을 변경하고} public void mouterentered (java.awt.event. 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.ADDMOUSELISTERE (new java.awt.event.mouseAdapter () {public void mouseexited (java.awt.event.mouseeevent e) {exchangeexited (); 템플릿 영역에서 벗어나 배경 색상을 변경하고} public void mouterentered (java.awt.event. ExchangeEnter (); // 마우스를 템플릿 영역으로 이동하고 배경색을 변경합니다. } return Jbutton; }} 패키지 coolbaby6; import javax.swing.borderfactory; import javax.swing.jpanel; import javax.swing.jlabel; import javax.swing.boblayout; import javax.swing.imageicon; public class testpane jpanel {private static final long serialversionuid = 1L; 개인 jlabel jlabel = null; 개인 jlabel jlabel1 = null; 개인 jlabel jlabel11 = null; 개인 jlabel jlabel12 = null; 개인 int clickf = 0; 개인 int clickb = 0; public testpane () {super (); 초기화 (); } private void initialize () {jlabel12 = new jlabel (); Jlabel12.seticon (new imageicon ( "img/bg.jpg")); jlabel12.add (new member -model (3, "coolbaby3", 200) .jpanel); JLABEL12.SETBORDER (BorderFactory.CreateEmptyBorder (2, 2, 2, 2)); jlabel11 = new Jlabel (); jlabel11.seticon (new imageicon ( "img/bg.jpg")); jlabel11.add (새로운 멤버 모드 (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 member -model (1, "coolbaby1", 200) .jpanel); jlabel1.setborder (BorderFactory.CreateEmptyBorder (2, 2, 2, 2)); jlabel = new Jlabel (); jlabel.settext ( "내 친구"); 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%== 1) {jlabel1.setvisible (false); jlabel11.setvisible (forge); Jlabel.seticon (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 () {// UI 인터페이스 업데이트; this.updateui (); } private void clickBlack2 (jlabel [] jb) {// 태그를 클릭하고 다음 태그를 모두 보이지 않도록 설정합니다. for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (false); } catch (예외 e) {e.printstacktrace (); } } 업데이트(); } private void clickBlack (jlabel [] jb) {// 태그를 클릭하고 다음 태그를 모두 표시하도록 설정합니다. for (int i = 1; i <jb.length; i ++) {try {jb [i] .setVisible (true); } catch (예외 e) {e.printstacktrace (); } } 업데이트(); } private void addjlabel () {// 블랙리스트 컨텐츠 추가; 최종 Jlabel [] JB = New Jlabel [7]; JB [0] = New Jlabel (); jb [0] .settext ( "블랙리스트"); JB [0] .Seticon (new imageicon ( "img/ico2.jpg")); JB [0] .SetBorder (BorderCactory.CreateEmptyBorder (2, 2, 2, 2)); jb [0] .addmouseListener (new java.awt.event.mouseadapter () {public void mouseclicked (java.awt.event.mouseeevent e) {clickb+= 1; if (clickb%2 == 1) {clickblack (jb); jb [0]. } else {clickBlack2 (jb) [0]. 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 (새로운 멤버 모드 ((i+3), "coolbaby"+(i+3), 200) .jpanel); JB [i] .set -Visible (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.swingilities; public jframe jframe jframe = null; 개인 jpanel jcontentpane = null; 개인 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 ( "QQ 패널 기능을 구현하기 위해 시뮬레이션"); jframe.setContentPane (getJcontentPane ()); } 반환 jframe; } private jscrollpane getScrollpane () {// 컨테이너 jpanel에 스크롤 바를 추가하는 친구를 추가합니다. if (scrollpane == null) {scrollpane = new jscrollpane (new TestPane ()); //scrollpane.setBounds(20,5, -1, 600); scrollpane.sethorizontalscrollbarpolicy (scrollpaneconstants.horizontal_scrollbar_never); // 수평 스크롤 바를 표시하지 마십시오. } 반환 스크롤 페인; } private jpanel getJcontentPane () {// 기본 컨테이너 jpanel을 인스턴스화합니다. if (jContentPane == null) {jContentPane = new JPanel (); JContentPane.setLayout (New BorderLayout ()); jcontentpane.add (getscrollpane (), BorderLayout.Center); } return JContentPane; }} 내 소스 코드를 성공적으로 컴파일하는 전략 :
①. 프로젝트를 구축하고 클래스 이름에 따라 3 가지 범주를 작성하고 소스 코드를 복사하십시오.
②. 프로젝트의 루트 디렉토리에 IMG라는 폴더를 만들고 사진을 사용할 사진을 넣으십시오. (관련 사진은 더 이상 업로드되지 않으며 테스트 할 사진을 찾으십시오)
compile, 컴파일 및 구현;
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.