1. Princípio
O princípio é muito simples: é apenas um jlabel e jpanel. Jlabel exibe o texto e as imagens do título indicando se o controle está atualmente em um estado expandido ou colapso; Enquanto o JPanel tem principalmente uma função - o contêiner que carrega o controle. Jlabel controla se o JPanel é exibido respondendo a um evento do mouse. Isso alcançará o efeito de dobrar ou expandir.
Não vou dizer muito abaixo, vamos dar uma olhada no código de amostra detalhado
2. Código
classe pública jshrinkablePanel estende JPanel {private jlabellabel; private stringtitle = ""; private jpanelContentPanel = null; private boolean isexPanded = true; private jlistlist = new jlist (); private iconiconexpr = null; private iconSonClaths = null; contentPanel) {super (); this.title = title; this.ContentPanel = contentPanel; initComponents (); initComponentsStatus (); initLayout (); initResources (); unregistervents (); registervents ();} private initComPoNents (); initComponentsStatus () {this.label.SethorizontalAlignment (jlabel.left); this.label.setverticalalignment (jlabel.center); thats) Imageicon ("src/resources/expand.png"); this.iconcollapse = new imageicon ("src/resources/colapso.png");} private void initlayout () {this.setlayout (new gridbaglayout ()); Gridbagconstraints.west, gridbagconstraints.horizontal, novas inserções (0,0,0,0), 0,0)); this.add (this.contentPanel, novo gridbagconstransts (0,1,1,1,1,0, gridbagconstains.west.west.wests, GridbagConstaints.hora Inserções (0,0,0,0), 0,0));} vazio privado initResources () {this.label.setichon (this.iconexpand); this.label.settext (this.title);} private n taça) (this) {this.label.reMorMeListerEnTeNeErTevents (this. {this.label.addmouselistener (this.mouseListener);} mouseListenermousener privado = new mouseAdapter () {@OverridePublic void mouseclicked (mouseevent e) {isexpAden =! {LABEL.SETOPAQUE (TRUE); LABEL.REPAINT ();}@SUBSENTIDEPUBLIC VOID MUSOUSEXITADO (MUSUSEVENTE E) {LABEL.SETOPAQUE (FALSE); LABEL.REPAINT ();}}}; INSTIDONEXPELVISIBLE () {this.contentPanel.SetVisible (ThisHexExPexPexPex.IsEnMExPen; ? this.iconexpand: this.iconcollapse);} public static void main (string [] args) {jframe jf = new jframe ("jshrinkablePanel"); jf.setBounds (400,200,400,300); jf.setDeFaultCloseRoperation (jframe.ext.ext.ext.ex.Ext.ext.eStD.eStD.EnCaultCounds (jfRame.ext.ext.ext.Ext.eStD.En); Jpanel (); pain.add (novo jbutton ("Just for show")); painel.setborder (borderfactory.createTitledBorder ("borda")); jshrinkablePanel scrollPane = jfrinkablePanel ("testjrinkablePanel);3. Efeito
Painel expanda o mouse na etiqueta do título
O painel expande o mouse não na etiqueta do título
Painel dobra mouse na etiqueta do título
O mouse dobrável do painel não está na etiqueta do título
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.