Swing中用GridBagConstraints和GridBagLayout实现组件重叠的效果

  1. package ex;

  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.FlowLayout;
  8. import java.awt.GridBagConstraints;
  9. import java.awt.GridBagLayout;
  10. import java.awt.Insets;

  11. import javax.swing.JButton;
  12. import javax.swing.JComponent;
  13. import javax.swing.JLayeredPane;
  14. import javax.swing.JPanel;
  15. import javax.swing.JTabbedPane;
  16. import javax.swing.JToolBar;
  17. import javax.swing.OverlayLayout;
  18. import javax.swing.border.LineBorder;

  19. public class PartPanel extends JPanel {
  20.     private static final Insets insets = new Insets(0000);
  21.     
  22.     void addComponent(Container container,
  23.             Component component,
  24.             int gridx,
  25.             int gridy,
  26.             int gridwidth,
  27.             int gridheight,
  28.             int anchor,
  29.             int fill) {
  30.         GridBagConstraints gbc = new GridBagConstraints(gridx,
  31.                 gridy,
  32.                 gridwidth,
  33.                 gridheight,
  34.                 1.0,
  35.                 1.0,
  36.                 anchor,
  37.                 fill,
  38.                 insets,
  39.                 0,
  40.                 0);
  41.         container.add(component, gbc);
  42.     }

  43.     public JPanel contentPanel = new JPanel();
  44.     
  45.     public JTabbedPane tabbedPanel = new JTabbedPane();
  46.     
  47.     public JButton maxBtn = new JButton("Max");
  48.     public JButton minBtn = new JButton("Min");

  49.     public PartPanel() {

  50.         this.setBorder(new LineBorder(Color.BLACK));
  51.         this.setLayout(new OverlayLayout(this));
  52.         
  53.         {
  54.             JLayeredPane mainPane = new JLayeredPane();
  55.             mainPane.setLayout(new GridBagLayout());
  56.             {
  57.                 JComponent p = tabbedPanel;
  58.                 
  59.                 p.setAlignmentX(0.0f);
  60.                 p.setAlignmentY(0.0f);
  61.                 addComponent(mainPane, p, 0011, GridBagConstraints.NORTH, GridBagConstraints.BOTH);
  62.             }
  63.             {
  64.                 {
  65.                     JButton btn = maxBtn;
  66.                     btn.setSize(2020);
  67.                     btn.setMaximumSize(new Dimension(2020));
  68.                     btn.setMinimumSize(new Dimension(2020));
  69.                     btn.setPreferredSize(new Dimension(2020));

  70.                     btn = minBtn;
  71.                     btn.setSize(2020);
  72.                     btn.setMaximumSize(new Dimension(2020));
  73.                     btn.setMinimumSize(new Dimension(2020));
  74.                     btn.setPreferredSize(new Dimension(2020));
  75.                 }
  76.                 {
  77.                     JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 00));
  78.                     panel.setAlignmentX(0.0f);
  79.                     panel.setAlignmentY(0.0f);

  80.                     panel.add(maxBtn);
  81.                     panel.add(minBtn);

  82.                     mainPane.setLayer(panel, 1);
  83.                     // mainPane.add(btn, BorderLayout.NORTH);
  84.                     addComponent(mainPane,
  85.                             panel,
  86.                             0,
  87.                             0,
  88.                             2,
  89.                             1,
  90.                             GridBagConstraints.NORTHEAST,
  91.                             GridBagConstraints.NONE);
  92.                 }
  93.             }
  94.             this.add(mainPane);         
  95.         }
  96.         
  97.         init();
  98.     }

  99.     private void init() {
  100.         // TODO Auto-generated method stub
  101.         this.tabbedPanel.add("title A"new JPanel());
  102.         this.tabbedPanel.add("title B"new JPanel());
  103.         this.tabbedPanel.add("title C"new JPanel());
  104.     }
  105. }
  1. package ex;
  2. import java.awt.BorderLayout;
  3. import javax.swing.JLabel;
  4. import javax.swing.JPanel;
  5. import javax.swing.JSplitPane;
  6. public class OverlayLayoutTestPanel1 extends JPanel {
  7.     
  8.     
  9.     public OverlayLayoutTestPanel1() {
  10.         super(new BorderLayout());
  11.         JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
  12.         
  13.         jsp.setOneTouchExpandable(true);
  14.         jsp.setDividerLocation(0);
  15.         
  16.         jsp.setRightComponent(new PartPanel());
  17.         jsp.setLeftComponent(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new PartPanel(), new PartPanel()));
  18.         
  19.         
  20.         this.add(jsp, BorderLayout.CENTER);
  21.     }
  22.     
  23.     
  24. }

    1. package ex;

    2. import javax.swing.JFrame;

    3. public class UITests {
    4.     private static void createAndShowGUI() {
    5.         //Create and set up the window.
    6.         JFrame frame = new TestFra(new OverlayLayoutTestPanel1());
    7.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    8.         frame.setSize(400300);
    9.         frame.setVisible(true);
    10.     }
    11.     
    12.     /**
    13.      * 2008-10-20
    14.      * @param args
    15.      */
    16.     public static void main(String[] args) {
    17.         javax.swing.SwingUtilities.invokeLater(new Runnable() {
    18.             public void run() {
    19.                 createAndShowGUI();
    20.             }
    21.         });

    22.     }

    23. }
    改天再回来加注释吧
请多多指教,谢谢
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值