网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 核心技术 > SwingAwt > GridBagLayout布局管理器—实现左右选择框  

GridBagLayout布局管理器—实现左右选择框

2008-08-15  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

    说来惭愧,使用Swing快2年了,一直没有深入研究Swing中著名的布局管理器GridBagLayout,说他著名是因为他布局灵活,可以适用各种 复杂的布局要求,当然也因为他是著名的复杂,这次由于过几天一次重要的面试,“迫使”我不得不好好研究一下(哈哈,其前太懒了,以后一定多注意。

网管有家bitscn.net

    先来分享一下我的学习成果,对一些重要参数进行说明: 网管网www.bitscn.com

    1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。

网管u家bitscn.net

    2.gridwidth,gridheight—设置组件跨越的行列,默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间。

网管朋友网www_bitscn_net

    3. weightx,weighty——用来设置窗口变大时,各组件跟着变大的比例。比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B. 网管论坛bbs_bitsCN_com

    4.anchor — 当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。

网管u家u.bitscn@com

    5.insets —— 设置组件之间彼此的间距。 它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。 网管u家u.bitsCN.com

    好了,先看一下左右选择框的实现吧:

网管u家www.bitscn.net

网管bitscn_com

网管下载dl.bitscn.com

网管bitscn_com

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
 
public class MyFrame extends JFrame {
 
       JPanel mainPanel = new JPanel();
       JButton add = new JButton();
       JButton left = new JButton();
       JButton right = new JButton();
       JLabel label = new JLabel();
       JTextField field = new JTextField();
       DefaultListModel leftModel = new DefaultListModel();
       DefaultListModel rightMOdel = new DefaultListModel();
       JList leftList = new JList(leftModel);
       JList rightList = new JList(rightMOdel);
 
       JPanel left_Right_Panel = new JPanel();
 
       public MyFrame() {
              this.setTitle("test");
              this.setPreferredSize(new Dimension(600, 400));
              this.initComponent();
              this.addData();
              this.setVisible(true);
              this.pack();
       }
 
       /**
        * 初始化组件
        */
       private void initComponent() {
 
              label.setText("添加选项:");
              add.setText("添加");
              leftList.setPreferredSize(new Dimension(150, 150));
              rightList.setPreferredSize(leftList.getPreferredSize());
              left.setText("左");
              right.setText("右");
              mainPanel.setBorder(BorderFactory.createTitledBorder("左右选择框"));
              mainPanel.setLayout(new GridBagLayout());
 
              GridBagConstraints c = new GridBagConstraints();
 
              c.gridx = 0; // 0行0列
              c.gridy = 0;
              c.gridwidth = 1;
              c.gridheight = 1;
              c.fill = GridBagConstraints.HORIZONTAL;
              c.weightx = 0;
              c.weighty = 0;
              mainPanel.add(label, c);
 
              c.gridx++;
              c.weightx = 1;
              mainPanel.add(field, c);
 
              c.gridx++;
              c.weightx = 0;
              c.gridwidth = 1;
              c.gridheight = 1;
              // c.fill = GridBagConstraints.HORIZONTAL;
              mainPanel.add(add, c);
 
              c.gridx = 0;
              c.gridy = 1;
              c.weightx = 1;
              c.weighty = 1;
              c.gridwidth = 2;
              c.gridheight = 2;
              c.fill = GridBagConstraints.BOTH;
              mainPanel.add(leftList, c);
 
              c.gridx = 2;
              c.gridy = 1;
              c.gridwidth = 1;
              c.gridheight = 1;
              c.weightx = 0;
              c.weighty = 0.5;
              c.anchor = GridBagConstraints.SOUTH;
              c.fill = GridBagConstraints.HORIZONTAL;
              mainPanel.add(left, c);
 
              c.gridx = 2;
              c.gridy = 2;
              c.anchor = GridBagConstraints.NORTH;
              c.fill = GridBagConstraints.HORIZONTAL;
              mainPanel.add(right, c);
 
              c.gridx = 3;
              c.gridy = 1;
              c.gridwidth = 1;
              c.gridheight = 2;
              c.weightx = 1;
              c.weighty = 1;
              c.fill = GridBagConstraints.BOTH;
              mainPanel.add(rightList, c);
 
              this.getContentPane().add(mainPanel);
 
       }
 
       private void addData() {
              add.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                            // TODO Auto-generated method stub
                            addItem();
                     }
 
              });
 
              left.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                            // TODO Auto-generated method stub
                            leftItem();
                     }
 
              });
 
              right.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                            // TODO Auto-generated method stub
                            rightItem();
                     }
 
              });
       }
 
       /**
        * 增加项
        */
       private void addItem() {
              if (field.getText() != null && !field.getText().equals("")) {
                     ((DefaultListModel) leftList.getModel())
                                   .addElement(field.getText());
                     field.setText("");
              }
       }
 
       /**
        * 左移项
        */
       private void leftItem() {
              if (rightList.getSelectedIndex() != -1) {
                     Object o = rightList.getSelectedValue();
                     ((DefaultListModel) rightList.getModel()).remove(rightList
                                   .getSelectedIndex());
                     ((DefaultListModel) leftList.getModel()).addElement(o);
              }
       }
 
       /**
        * 右移项
        */
       private void rightItem() {
              if (leftList.getSelectedIndex() != -1) {
                     Object o = leftList.getSelectedValue();
                     ((DefaultListModel) leftList.getModel()).remove(leftList
                                   .getSelectedIndex());
                     ((DefaultListModel) rightList.getModel()).addElement(o);
              }
 
       }
 
       public static void main(String args[]) {
              try {
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
              } catch (ClassNotFoundException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              } catch (InstantiationException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              } catch (IllegalAccessException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              } catch (UnsupportedLookAndFeelException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              }
              MyFrame frame = new MyFrame();
       }
 
} 网管有家www.bitscn.net 
TAGs
 上一篇:Swing实现Windows任务窗口   下一篇:Swing之JTable运用线程一个测试
GridBagLayout布局管理器—实现左右选择框 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: