`
ootabc
  • 浏览: 110565 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。
2.gridwidth,gridheight—设置组件跨越的行列,默认值为1;GridBagConstraints.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)。

好了,先看一下左右选择框的实现吧:
图片在上传的文件中....


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();
       }
 
}
  • 大小: 17.7 KB
分享到:
评论

相关推荐

    java swing布局管理器实例之gridbaglayout,实现左右选择框.doc

    在实现左右选择框的场景中,通常会使用`JPanel`来组织组件,并为每个面板指定`GridBagLayout`。通过调整`gridx`, `gridy`, `gridwidth`等参数,可以将选择框按照需求布局。同时,可能还需要监听组件事件,例如`...

    第18讲 布局管理器.ppt

    本讲主要探讨了五种常用的布局管理器:FlowLayout、BorderLayout、CardLayout、GridLayout以及GridBagLayout。 1. FlowLayout:流式布局管理器是Java中最基础的布局管理器,也是Panel和Applet类的默认布局。它按照...

    jbcl.jar(用于布局管理)

    开发者可以根据需求选择合适的布局管理器,以实现美观且功能完善的用户界面。 **jbcl.jar在布局管理中的作用** `jbcl.jar`库是为了解决JavaBeans组件在不同布局管理器中的兼容性问题。由于不同的布局管理器有不同的...

    JAVA布局管理.docx

    【JAVA布局管理详解】 ...总结,Java的布局管理器为开发人员提供了强大的工具,可以根据需求选择合适的布局,创建出各种复杂的用户界面。理解并熟练掌握这些布局管理器是构建专业GUI应用程序的基础。

    JAVA布局管理[文].pdf

    GridBagLayout是最灵活但也是最复杂的布局管理器,它允许组件有不同的大小并按任意顺序添加。每个组件都可以有自己的约束条件来控制其在网格中的位置和大小。由于其灵活性,通常用于创建复杂的用户界面。 举例:在...

    15-java-GUI1(组件、容器、布局管理器)(ppt文档).ppt

    Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout,每种布局管理器都有其特定的布局策略。例如,FlowLayout按照从左到右、从上到下的顺序排列组件,而GridLayout则...

    java实现的登陆框

    Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout和GridBagLayout,用于控制组件在窗口中的排列方式。开发者可能根据需求选择合适的布局。 11. **国际化**: 对于更复杂的程序,界面文本可能...

    JAVA布局管理.doc

    **特点**:`GridBagLayout`是一种更为灵活的布局管理器,它可以实现组件的大小和位置的精细控制。与`GridLayout`类似,但提供了更多的布局选项,例如允许组件跨越多个单元格。 **构造方法**: 1. `GridBagLayout()`...

    Java Swing - 常识篇 之 LayoutManager 02

    Java Swing是Java GUI编程的重要库,它提供了丰富的组件和...通过合理地选择和组合布局管理器,我们可以构建出适应性强、用户体验良好的桌面应用程序。在实践中不断探索和实验,才能更好地掌握这些布局管理器的用法。

    JAVASWIG中布局方式.doc

    Java Swing 中的布局管理器是构建用户界面时不可或缺的部分,它们决定了组件在窗口或容器中的...开发者可以根据具体需求灵活选择,并结合其他布局管理器(如 GridBagLayout、GridLayout 等)以实现更复杂的界面设计。

    语言程序设计资料:JAVA教程_第五讲_AWT图形用户界面设计.doc

    Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout,每种布局管理器有其特定的排列规则。例如,FlowLayout按照水平或垂直顺序排列组件,而BorderLayout将组件分配到五...

    javaSE swing 做的windows资源管理器含说明文档论文

    6. **Swing布局管理**:有效使用BorderLayout、GridLayout、BoxLayout或GridBagLayout等布局管理器,确保界面元素的正确排列和大小调整。 7. **设计模式**:可能采用了MVC(模型-视图-控制器)模式,将业务逻辑、...

    第11章 GUI-课后习题1

    4. 使用 `GridBagLayout` 布局管理器的关键在于 `GridBagConstraints` 对象,它才是控制容器中每个组件布局的核心类。 5. 如果多个 `JRadioButton` 按钮都要添加到面板和按钮组中,当为它们添加事件监听时,会有很多...

    可视化日历选择器

    在实现这样的日历选择器时,开发者通常会利用Java的Swing库,因为它提供了丰富的GUI组件和布局管理器。他们会用`JPanel`来创建日历视图,可能使用`JButton`来表示每一天,通过颜色或者标记来区分工作日和周末。同时...

    基于 java swing 开发的资源管理器。使用 java swing 美化包beautyeye对原生的 java.zip

    常见的布局管理器有FlowLayout、BorderLayout、GridLayout、BoxLayout以及GridBagLayout等,开发者可以根据需要选择合适的布局。 综上所述,这个基于Java Swing和BeautyEye的资源管理器项目,不仅展现了Swing的灵活...

    Java Swing组件实现的日历程序

    此外,布局管理器:在Swing中,布局管理器如FlowLayout、BorderLayout、GridLayout、GridBagLayout等用于自动调整组件的位置和大小。在这个日历程序中,我们可能会用到GridLayout来创建日期网格,同时可能使用其他...

    图书管理系统(JAVA的AWT实现)

    AWT提供了几种布局管理器,如`FlowLayout`、`BorderLayout`、`GridLayout`和`GridBagLayout`,用于自动排列和调整组件的位置和大小。在图书管理系统中,根据界面设计需要选择合适的布局管理器。 5. 组件的属性和...

    对话框继承、分屏、改变大小、设计字体、布局

    这可以通过布局管理器实现,如Java的`GridBagLayout`或Qt的`QSplitter`。开发者可以设置分割条,让用户自行调整各部分的大小,提供更灵活的用户体验。 3. 改变大小:对话框的大小可变性对于用户友好性至关重要。...

    java应用编程实例

    此外,为了增强界面的适应性和美观度,还可以结合其他高级布局管理器如`GridBagLayout`和`BoxLayout`,以及使用`JPanel`和`JFrame`等更高级的容器来构建复杂的GUI结构。 总之,掌握好Java中的布局管理器是每个Java...

    图形用户界面元素设计.pptx

    常见的布局管理器包括 FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout 等。 六、Java Foundation Classes(JFC) JFC 是 Java 语言中的图形用户界面类库,它提供了一系列的图形用户界面组件和...

Global site tag (gtag.js) - Google Analytics