Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 438|回复: 0

[Swing学习]GridBagLayout布局管理器―实现左右选择框

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-10 23:56:57 | 显示全部楼层 |阅读模式
    说来惭愧,使用Swing快2年了,一直没有深入研究Swing中著名的布局管理器GridBagLayout,说他著名是因为他布局灵活,可以适用各种 复杂的布局要求,当然也因为他是著名的复杂,这次由于过几天一次重要的面试,“迫使”我不得不好好研究一下(哈哈,其前太懒了,以后一定多注意。 先来分享一下我的学习成果,对一些重要参数进行说明: 1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。  2.gridwidth,gridheight―设置组件跨越的行列,默认值为1GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间。  3. weightx,weighty――用来设置窗口变大时,各组件跟着变大的比例。比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B。 4.anchor ― 当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。  5.insets ―― 设置组件之间彼此的间距。 它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。 好了,先看一下左右选择框的实现吧:
    1. import java.awt.Dimension;
    2. import java.awt.GridBagConstraints;
    3. import java.awt.GridBagLayout;
    4. import java.awt.event.ActionEvent;
    5. import java.awt.event.ActionListener;

    6. import javax.swing.BorderFactory;
    7. import javax.swing.DefaultListModel;
    8. import javax.swing.JButton;
    9. import javax.swing.JFrame;
    10. import javax.swing.JLabel;
    11. import javax.swing.JList;
    12. import javax.swing.JPanel;
    13. import javax.swing.JTextField;
    14. import javax.swing.UIManager;
    15. import javax.swing.UnsupportedLookAndFeelException;

    16. public class MyFrame extends JFrame {

    17.        JPanel mainPanel = new JPanel();
    18.        JButton add = new JButton();
    19.        JButton left = new JButton();
    20.        JButton right = new JButton();
    21.        JLabel label = new JLabel();
    22.        JTextField field = new JTextField();
    23.        DefaultListModel leftModel = new DefaultListModel();
    24.        DefaultListModel rightMOdel = new DefaultListModel();
    25.        JList leftList = new JList(leftModel);
    26.        JList rightList = new JList(rightMOdel);

    27.        JPanel left_Right_Panel = new JPanel();

    28.        public MyFrame() {
    29.               this.setTitle("test");
    30.               this.setPreferredSize(new Dimension(600, 400));
    31.               this.initComponent();
    32.               this.addData();
    33.               this.setVisible(true);
    34.               this.pack();
    35.        }

    36.        /**
    37.         * 初始化组件
    38.         */
    39.        private void initComponent() {

    40.               label.setText("添加选项:");
    41.               add.setText("添加");
    42.               leftList.setPreferredSize(new Dimension(150, 150));
    43.               rightList.setPreferredSize(leftList.getPreferredSize());
    44.               left.setText("左");
    45.               right.setText("右");
    46.               mainPanel.setBorder(BorderFactory.createTitledBorder("左右选择框"));
    47.               mainPanel.setLayout(new GridBagLayout());

    48.               GridBagConstraints c = new GridBagConstraints();

    49.               c.gridx = 0; // 0行0列
    50.               c.gridy = 0;
    51.               c.gridwidth = 1;
    52.               c.gridheight = 1;
    53.               c.fill = GridBagConstraints.HORIZONTAL;
    54.               c.weightx = 0;
    55.               c.weighty = 0;
    56.               mainPanel.add(label, c);

    57.               c.gridx++;
    58.               c.weightx = 1;
    59.               mainPanel.add(field, c);

    60.               c.gridx++;
    61.               c.weightx = 0;
    62.               c.gridwidth = 1;
    63.               c.gridheight = 1;
    64.               // c.fill = GridBagConstraints.HORIZONTAL;
    65.               mainPanel.add(add, c);

    66.               c.gridx = 0;
    67.               c.gridy = 1;
    68.               c.weightx = 1;
    69.               c.weighty = 1;
    70.               c.gridwidth = 2;
    71.               c.gridheight = 2;
    72.               c.fill = GridBagConstraints.BOTH;
    73.               mainPanel.add(leftList, c);

    74.               c.gridx = 2;
    75.               c.gridy = 1;
    76.               c.gridwidth = 1;
    77.               c.gridheight = 1;
    78.               c.weightx = 0;
    79.               c.weighty = 0.5;
    80.               c.anchor = GridBagConstraints.SOUTH;
    81.               c.fill = GridBagConstraints.HORIZONTAL;
    82.               mainPanel.add(left, c);

    83.               c.gridx = 2;
    84.               c.gridy = 2;
    85.               c.anchor = GridBagConstraints.NORTH;
    86.               c.fill = GridBagConstraints.HORIZONTAL;
    87.               mainPanel.add(right, c);

    88.               c.gridx = 3;
    89.               c.gridy = 1;
    90.               c.gridwidth = 1;
    91.               c.gridheight = 2;
    92.               c.weightx = 1;
    93.               c.weighty = 1;
    94.               c.fill = GridBagConstraints.BOTH;
    95.               mainPanel.add(rightList, c);

    96.               this.getContentPane().add(mainPanel);

    97.        }

    98.        private void addData() {
    99.               add.addActionListener(new ActionListener() {
    100.                      @Override
    101.                      public void actionPerformed(ActionEvent e) {
    102.                             // TODO Auto-generated method stub
    103.                             addItem();
    104.                      }

    105.               });

    106.               left.addActionListener(new ActionListener() {
    107.                      @Override
    108.                      public void actionPerformed(ActionEvent e) {
    109.                             // TODO Auto-generated method stub
    110.                             leftItem();
    111.                      }

    112.               });

    113.               right.addActionListener(new ActionListener() {
    114.                      @Override
    115.                      public void actionPerformed(ActionEvent e) {
    116.                             // TODO Auto-generated method stub
    117.                             rightItem();
    118.                      }

    119.               });
    120.        }

    121.        /**
    122.         * 增加项
    123.         */
    124.        private void addItem() {
    125.               if (field.getText() != null && !field.getText().equals("")) {
    126.                      ((DefaultListModel) leftList.getModel())
    127.                                    .addElement(field.getText());
    128.                      field.setText("");
    129.               }
    130.        }

    131.        /**
    132.         * 左移项
    133.         */
    134.        private void leftItem() {
    135.               if (rightList.getSelectedIndex() != -1) {
    136.                      Object o = rightList.getSelectedValue();
    137.                      ((DefaultListModel) rightList.getModel()).remove(rightList
    138.                                    .getSelectedIndex());
    139.                      ((DefaultListModel) leftList.getModel()).addElement(o);
    140.               }
    141.        }

    142.        /**
    143.         * 右移项
    144.         */
    145.        private void rightItem() {
    146.               if (leftList.getSelectedIndex() != -1) {
    147.                      Object o = leftList.getSelectedValue();
    148.                      ((DefaultListModel) leftList.getModel()).remove(leftList
    149.                                    .getSelectedIndex());
    150.                      ((DefaultListModel) rightList.getModel()).addElement(o);
    151.               }

    152.        }

    153.        public static void main(String args[]) {
    154.               try {
    155.                      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    156.               } catch (ClassNotFoundException e) {
    157.                      // TODO Auto-generated catch block
    158.                      e.printStackTrace();
    159.               } catch (InstantiationException e) {
    160.                      // TODO Auto-generated catch block
    161.                      e.printStackTrace();
    162.               } catch (IllegalAccessException e) {
    163.                      // TODO Auto-generated catch block
    164.                      e.printStackTrace();
    165.               } catch (UnsupportedLookAndFeelException e) {
    166.                      // TODO Auto-generated catch block
    167.                      e.printStackTrace();
    168.               }
    169.               MyFrame frame = new MyFrame();
    170.        }

    171. }
    复制代码
      
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/10/235656890.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 07:55 , Processed in 0.355165 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表