1. Принцип
Принцип очень прост: это просто jlabel и jpanel. Jlabel отображает текст заголовка и изображения, указывающие, находится ли управление в настоящее время в расширенном или разрушенном состоянии; в то время как jPanel в основном имеет одну функцию - контейнер, который несет управление. Jlabel контролирует, отображается ли JPanel, отвечая на событие мыши. Это достигнет эффекта складывания или расширения.
Я не скажу многое ниже, давайте посмотрим на подробный пример кода
2. Код
открытый класс jshrinkablepanel extends jpanel {private jlabellabel; private stringtitle = ""; private jpanelcontentpanel = null; private boolean isexpaded = true; private jlistlist = new jlist (); private iconicOnexpand = null; private iconicOncollap = null; public jShrinkable (null; {super (); this.title = title; this.contentPanel = contentPanel; initComponents (); initComponentsStatus (); initlayout (); initresources (); unregisterEvents (); regiredEvents ();} private void init -components () {this.label = new jlabel (); initComponentsStatus () {this.label.sethorizontalAlignment (jlabel.left); this.label.seterticalAlignment (jlabel.center); this.label.setverticaltextposition (jlabel.center); this.label.setbackground (this.listslectionblection (); ImageICon ("src/resources/expand.png"); this.iconcollapse = new Imageicon ("src/resources/collapse.png");} private void initlayout () {set.setlayout (new Gridbaglayout ()); this.add (this.label, new Gridbagnesstraintrts (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, GridbagConstraints.West, GridbagConstraints.horizontal, новые вставки (0,0,0,0), 0,0)); это. Вставки (0,0,0,0), 0,0));} private void initresources () {this.label.seticon (this.iconexpand); this.label.settext (this.title);} private uderevents () {this.label.removemouselierener (это. {this.Label.AddmouseListener (this.MouseListener);} Частный MouseListenerMouseListener = new MouseAdapter () {@OverridePublic void mouseeClicked (mouseevent e) {isexpeded =! Isexpeded; panelvisible ();}@overdepublic voidestented voidestendentedinged voidestented voidestented voidestented voidestented voidestented voidestented voidestented voidestented {label.setopaque (true); label.repaint ();}@overridepublic void mouseexited (mouseevent e) {label.setopaque (false); label.repaint ();}}; private void panelvisible () {this.contentpanel.setvisible (this.isexpaded); this.label.seticon (this.isexpaded? this.iconexpand: this.iconcollapse);} public void main (string [] args) {jframe jf = new Jframe ("jshrinkablepanel"); jf.setbounds (400,200,400 300); jf.setdefaultcloseoperation (jframe.exit_on_close); jpanel pan show ")); panel.setborder (borderfactory.createtittledborder (" border ")); jshrinkablepanel scrollpane = new jshrinkablepanel (" testjshrinkablepanel ", панель); jf.add (scrollpane); Jf.setvisible (true);}}3. Эффект
Панель расширяет мышь на лейбле заголовка
Панель расширяет мышь не на лейбле заголовка
Панель складной мышь на лейбле заголовка
Панель складной мыши нет на лейбле заголовка
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.