TITLE:JPanelをアコーディオン風に展開

JPanelをアコーディオン風に展開

編集者:Terai Atsuhiro
作成日:2004-11-08
更新日:2022-11-03 (木) 20:50:58

概要

JPanelの展開、折りたたみをアコーディオン風に行います。

#screenshot

サンプルコード

 public AccordionPanel(String title_) {
   title = title_;
   label = new JLabel("↓ "+title) {
     protected void paintComponent(Graphics g) {
       Graphics2D g2 = (Graphics2D)g;
       Insets ins = getInsets();
       g2.setPaint(new GradientPaint(50, 0, Color.white,
                   getWidth(), getHeight(), new Color(200,200,255)));
       g2.fillRect(0, 0, getWidth(), getHeight());
       super.paintComponent(g);
     }
   };
   label.addMouseListener(new MouseAdapter() {
     public void mousePressed(MouseEvent evt) {
       openFlag = !openFlag;
       initPanel();
       fireExpansionEvent();
     }
   });
   label.setForeground(Color.blue);
   label.setBorder(BorderFactory.createEmptyBorder(2,5,2,2));
   panel = makePanel();
   panel.setOpaque(true);
   Border outBorder = BorderFactory.createMatteBorder(0,2,2,2,Color.white);
   Border inBorder  = BorderFactory.createEmptyBorder(10,10,10,10);
   Border border    = BorderFactory.createCompoundBorder(outBorder, inBorder);
   panel.setBorder(border);
   panel.setBackground(new Color(240, 240, 255));
   setLayout(new BorderLayout());
   add(label, BorderLayout.NORTH);
 }
  • &jnlp;
  • &jar;
  • &zip;

解説

各パネルに配置されたラベルがクリックされる度に、パネルは自身の高さを変更し、展開や折りたたみを行います。このとき、SpringLayoutを使って全体のレイアウトをやり直しているため、JScrollPaneの中で複数のパネルが開けるようになっています。

L2FProd.com - Common Components にある JTaskPane で、もっときれいにパネルの展開や折りたたみをすることができるようです(アニメーション付き)。ソースも公開されているので、com.l2fprod.common.swing.JCollapsiblePane あたりを参考にしてみてください。

参考リンク

コメント