我试着做了一个
主界面:
import java.awt.*;import javax.swing.*;
import dandy.swing.JPuckerMenuPanel;/**
 * <p>折叠菜单</p>
 *
 * <p>Like QQ</p>
 *
 * <p>Copyright: Copyright (c) 2004</p>
 *
 * @Dandy
 * @version 0.1
 * 2004.12.10.1
 */public class Pucker extends JFrame {
   private FlowLayout flowLayout1 = new FlowLayout();
   private JPuckerMenuPanel jPuckerMenuPanel1 = new JPuckerMenuPanel();
   private JPuckerMenuPanel jPuckerMenuPanel2 = new JPuckerMenuPanel();   public Pucker() {
      try {
         this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
         jbInit();
      } catch (Exception exception) {
         exception.printStackTrace();
      }
   }   private void jbInit() throws Exception {
      setSize( 200,500 );
      getContentPane().setLayout(flowLayout1);
      jPuckerMenuPanel1.setButtonName( "QQ好友" );
      jPuckerMenuPanel1.addJComponent( new JButton( "Dandy" ) );
      jPuckerMenuPanel2.setButtonName( "手机好友" );
      this.setResizable(false);
      this.getContentPane().add(jPuckerMenuPanel1);
      this.getContentPane().add(jPuckerMenuPanel2);
   }   public static void main(String[] args) {
      Pucker pucker = new Pucker();
      pucker.show();
   }
}

解决方案 »

  1.   

    菜单项:
    package dandy.swing;import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.*;
    import java.awt.event.*;/**
     * <p>可折叠菜单</p>
     *
     * <p>Like QQ</p>
     *
     * <p>Copyright: Copyright (c) 2004</p>
     *
     * @Dandy
     * @version 0.1
     * 2004.12.10.1
     */public class JPuckerMenuPanel extends JPanel {
       private BorderLayout borderLayout = new BorderLayout();
       private JToggleButton jToggleButtonPuker = new JToggleButton();
       private JPanel jPanelMain = new JPanel();   public JPuckerMenuPanel() {
          try {
             jbInit();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }   public JPuckerMenuPanel( String buttonName ) {
          try {
             jbInit();
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }   private void jbInit() throws Exception {
          this.setLayout(borderLayout);
          jToggleButtonPuker.setText("jToggleButton1");
          jToggleButtonPuker.setPreferredSize( new Dimension( 150,23 ) );
          jToggleButtonPuker.addActionListener( new ButtonEventHandler(this) );
          jPanelMain.setBackground(UIManager.getColor("window"));
          jPanelMain.setVisible( false );
          this.add(jToggleButtonPuker, java.awt.BorderLayout.NORTH);
          this.add(jPanelMain, java.awt.BorderLayout.CENTER);
       }   public void setButtonName( String name ) {
          jToggleButtonPuker.setText(name);
       }
       
       public void addJComponent( JComponent jComponent ) {
          jPanelMain.add( jComponent );
       }   private class ButtonEventHandler implements ActionListener {
          JPuckerMenuPanel adaptee;
          
          public ButtonEventHandler(JPuckerMenuPanel adaptee) {
             this.adaptee = adaptee;
          }
          
          public void actionPerformed( ActionEvent e ) {
             if( jToggleButtonPuker.isSelected() )
                jPanelMain.setVisible(true);
             else
                jPanelMain.setVisible(false);
          }
       }
    }
      

  2.   

    原理就是利用FlowLayout和setVisiable方法