java网格包GridBagLayout布局管理器专题

合集下载

2013-5-Java程序设计复习题

2013-5-Java程序设计复习题

2013-6-1 11:36:02 一、选择题:1. 运行Java 程序需要的工具软件所在的目录是 。

A .JDK 的bin 目录B .JDK 的demo 目录C .JDK 的lib 目录D .JDK 的jre 目录2. 下列关于Java 语言特点的叙述中,错误的是 。

A .Java 是面向过程的编程语言B .Java 支持分布式计算C .Java 是跨平台的编程语言D .Java 支持多线程3. Java 的核心包中,提供编程应用的基本类的包是 。

A .ngB .java.utilC .java.appletD .java.rmi4. 下列关于Java 对import 语句规定的叙述中,错误的是 。

A .在Java 程序中import 语句可以有多个B .在Java 程序中import 语句可以没有C .在Java 程序中import 语句必须有一个D .在Java 程序中import 语句引入在所有类定义之前5. 在编译Java 程序时,用于指定生成.class 文件位置的选项是 。

A .-gB .-dC .-verboseD .-vonarn6. 下列关于构造方法的叙述中,错误的是 。

A .Java 语言规定构造方法名与类名必须相同B .Java 语言规定构造方法没有返回值,但不用void 声明C .Java 语言规定构造方法不可以重载D .Java 语言规定构造方法只能通过new 自动调用7. 下列叙述中错误的是 。

A .Java Application 与Applet 所用编译命令相同B .通常情况下,Java Application 只能有一个main()方法C .Java Applet 必须有HTML 文件才能运行D .Java Applet 程序的.class 文件可用Java 命令运行8. 处理对象传输的接口是 。

A .SerializableB .CloneableC .ItenListenerD .ActionListener9. 在读取二进制数据文件的记录时,为了提高效率常常使用的一种辅助类是 。

java布局中的BoxLayout布局,使用BoxLayout进行Swing布局

java布局中的BoxLayout布局,使用BoxLayout进行Swing布局

java布局中的BoxLayout布局,使⽤BoxLayout进⾏Swing布局在⽤户使⽤ Java Swing 进⾏⽤户界⾯开发过程中,会碰到如何对 Java Swing 的控件进⾏布局的问题。

Swing 的控件放置在容器(Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例⼦有 Frame、Panel 等等。

容器需要定义⼀个布局管理器来对控件进⾏布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout、BoxLayout、GridLayout 和 GridBaglayout, 它们的主要特点如表 1 所⽰:表 1. Swing 中的⼀些主要布局管理器的⽐较布局管理器特点FlowLayout把控件按照顺序⼀个接⼀个由左向右的⽔平放置在容器中,⼀⾏放不下,就放到下⼀⾏BorderLayout将整个容器划分成东南西北中五个⽅位来放置控件,放置控件时需要指定控件放置的⽅位BoxLayout可以指定在容器中是否对控件进⾏⽔平或者垂直放置,⽐ FlowLayout 要更为灵活GridLayout将整个容器划分成⼀定的⾏和⼀定的列,可以指定控件放在某⾏某列上GridBagLayout是 Swing 当中最灵活也是最复杂的布局管理器,可对控件在容器中的位置进⾏⽐较灵活的调整本⽂主要关注在 BoxLayout 布局管理器的使⽤上。

我们⾸先对 BoxLayout 作⼀下介绍。

BoxLayout 介绍如前所述,BoxLayout 可以把控件依次进⾏⽔平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。

X_AXIS 表⽰⽔平排列,⽽ Y_AXIS 表⽰垂直排列。

BoxLayout 的构造函数有两个参数,⼀个参数定义使⽤该 BoxLayout 的容器,另⼀个参数是指定 BoxLayout 是采⽤⽔平还是垂直排列。

下⾯是⼀个创建 BoxLayout 实例的例⼦:JPanel panel=new JPanel();BoxLayout layout=new BoxLayout(panel, BoxLayout.X_AXIS);panel.setLayout(layoout);在这个例⼦中,⼀个 BoxLayout 布局管理器的实例 layout 被创建,这个实例被设置为 panel 的布局管理器,该布局管理器采⽤了⽔平排列来排列控件。

Java中的GUI界面设计和事件处理入门

Java中的GUI界面设计和事件处理入门

Java中的GUI界面设计和事件处理入门一、引言Java是一种面向对象的编程语言,具有广泛的应用领域。

在软件开发过程中,GUI界面设计和事件处理是非常重要的一部分。

本文将介绍Java中的GUI界面设计和事件处理的入门知识,以帮助读者了解和掌握这方面的技术。

二、GUI界面设计基础GUI(Graphical User Interface,图形用户界面)是指通过图形、图像和动画等方式来显示信息,提供用户与计算机之间的交互。

在Java中,可以使用Swing和JavaFX等库来进行GUI界面设计。

1. 布局管理器在GUI界面设计中,布局管理器用于管理组件的布局方式。

Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout和GridBagLayout等。

使用不同的布局管理器可以实现不同的界面布局效果。

2. 组件组件是GUI界面的基本元素,可以是按钮、文本框、标签、列表框等。

在Java中,可以使用JButton、JTextField、JLabel和JList等类来创建各种组件。

可以设置组件的属性,如大小、位置和样式等。

3. 事件监听器事件监听器用于捕捉用户操作产生的事件,并做出相应的处理。

在Java中,可以使用addActionListener()方法为组件添加监听器,响应用户的点击事件。

事件监听器可以以匿名内部类的形式实现,也可以作为单独的类来处理。

三、GUI界面设计实例下面以一个简单的登录界面为例,介绍如何使用Java中的GUI 界面设计来创建一个具有交互功能的窗体。

1. 导入必要的类库首先需要导入javax.swing和java.awt等类库,以便使用其中的类和方法。

2. 创建窗体可以通过继承JFrame类来创建一个窗体对象,然后设置窗体的标题、大小和关闭方式等属性。

3. 添加组件可以使用JLabel、JTextField和JButton等组件类来创建对应的界面元素,并设置它们的属性和布局。

《Java基础程序设计》_课后习题

《Java基础程序设计》_课后习题

第一章思考题】1、简述path 环境变量的作用。

2、请说说你对JVM 的理解。

答案】1、path 环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔。

当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path 环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错。

2、JVM 是Java Virtual Machine 的缩写,全称是Java 虚拟机。

Java 语言的一个非常重要的特性就是跨平台性,而Java 虚拟机是实现这一特性的关键。

不同的操作系统需要使用不同版本的虚拟机,这种方式使得Java语言能够“一次编写,到处运行”。

Java语言编译程序只需生成在Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

第二章【思考题】1、请简述& 与&& 的区别。

2、简述break、continue 和return 语句的区别。

【答案】1、&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

当运算符“ &”和“ && ”的右边为表达式时,使用“ &”进行运算,不论左边为true 或者false,右边的表达式都会进行运算。

如果使用" && ”进行运算,当左边为false时,右边的表达式则不会进行运算,因此“ && ”被称作短路与。

2、break 语句:在switch 条件语句和循环语句中都可以使用break 语句。

当它出现在switch 条件语句中时,作用是终止某个case并跳出switch结构。

布局管理器

布局管理器

布局管理器布局管理器是软件开发领域中一种重要的工具,用于管理用户界面的布局和组件的位置。

通过使用布局管理器,开发人员可以更加灵活和高效地创建和管理用户界面,使其具有良好的可读性和可扩展性。

本文将从布局管理器的基本概念、常见类型以及使用布局管理器时的注意事项等方面进行探讨。

一、布局管理器的基本概念布局管理器是一种用于安排和管理用户界面组件位置和大小的工具。

它的主要功能是根据开发人员的要求和设定,自动地对用户界面进行布局,使其符合开发人员的设计需求。

布局管理器基于一系列布局规则和算法,帮助开发人员快速而方便地实现用户界面的布局。

二、常见的布局管理器类型1. 流式布局管理器(FlowLayout):流式布局管理器是一种最简单、最常用的布局管理器之一。

它按照组件的添加顺序,将组件一行一行地排列,如果一行排不下,则自动换行。

流式布局管理器适用于需要按照添加顺序进行排列的界面。

2. 边界布局管理器(BorderLayout):边界布局管理器将用户界面分为五个区域:北、南、东、西和中。

开发人员可以将组件放置在指定的区域内,边界布局管理器将根据区域的大小和组件的大小来确定组件的位置。

3. 网格布局管理器(GridLayout):网格布局管理器将用户界面划分为规则的网格,每个网格可以放置一个组件。

网格布局管理器可以根据开发人员的要求来设定每个网格的大小和组件之间的间距。

4. 卡片布局管理器(CardLayout):卡片布局管理器允许在同一区域内放置多个组件,但只显示其中的一个。

开发人员可以通过切换卡片来显示不同的组件,从而实现界面的切换效果。

5. 网格袋布局管理器(GridBagLayout):网格袋布局管理器是一种功能强大的布局管理器,可以实现高度定制化的用户界面布局。

它通过将组件放置在网格袋中,并设定组件在网格袋内的位置和大小来控制布局。

三、使用布局管理器的注意事项1. 理解各种布局管理器的特点和适用场景,根据实际需要选择合适的布局管理器。

JavaGUI布局管理器

JavaGUI布局管理器

JavaGUI布局管理器容器可设置布局管理器,管理容器中组件的布局:container.setLayout(new XxxLayout());Java有6种布局管理器,AWT提供了5种:FlowLayoutBorderLayoutGridLayoutGridBagLayoutCradLayoutSwing还提供了⼀种:BoxLayout1、FlowLayout 流式布局顾名思义,组件像⽔流⼀样,从第⼀⾏开始,从左向右依次排列,碰到边界时转到下⼀⾏继续。

三个构造函数:FlowLayout() //使⽤默认参数FlowLayout(int align) //设置对齐⽅式FlowLayout(int align,int hgap,int vgap) //设置对齐⽅式、⽔平间距、垂直间距align是FlowLayout类的常量,⽐如:FlowLayout.LEFT,FlowLayout.CENTER2、BorderLayout 边界布局将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置⼀个组件。

2个构造函数:BorderLayout() //使⽤默认参数BorderLayout(int hgap,int vgap) //设置⽔平间距、垂直间距放置组件时需指定位置:container.add(Component comp, Borderlayout.SOUTH); //第⼆个参数是BorderLayout类的常量,指定组件位置container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间⼀共5个位置,⼀个位置最多放1个组件。

当然,可以在⼀个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。

也可以⼀个都不放。

3、GridLayout ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。

计算机二级考试《java》试题及答案

计算机二级考试《java》试题及答案

计算机二级考试《java》试题及答案计算机二级考试《java》试题及答案「篇一」1、以下不是Java中有效的关键字。

A、constB、NULLC、falseD、this本题考查的是Java的关键字。

Java中常量null,false,true,new,this,const,break都是小写。

故本题答案为B。

2、关于被私有访问控制符private修饰的成员变量,以下说法正确的是。

A、可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类B、可以被两种类访问和引用:该类本身、该类的所有子类C、只能被该类自身所访问和修改D、只能被同一个包中的类访问本题考查的是成员变量的修饰符。

private修饰的变量说明变量为私有访问。

只能被该类自己访问或调用,是对成员变量的高级保护。

故本题答案为C。

3、当检索一个压缩文件时,首先要建立压缩文件输入流对象。

该对象。

A、以选中的压缩文件为参数B、以FileInputStream对象为参数C、以InputStreamReader对象为参数D、以BufferedReader对象为参数本题考查的是压缩文件。

在java.io包中提供了对压缩文件进行操作的能力。

它是通过压缩文件输入流与压缩文件输出流来实现的,其分别继承自InflaterInputStream与DeflaterOutputStream。

在创建压缩文件输入流时,其初始化参数是一个FileInputStream类的实例。

故本题答案为B。

4、计算机中的流是______ 。

A、流动的字节B、流动的对象C、流动的文件D、流动的数据缓冲区本题考查的是流的概念。

流,最早从C语言中引入的。

其可以看成是一个流动的数据缓冲区。

数据从数据源方向经过缓冲区流向数据的目的地。

在传送的过程中,其传送方式是串行的。

在Java中的java.io包中定义了Java中常见流的接口与类。

其中包括两个最基本的流的抽象类,它们分别是OutputStream与InputStream。

Java swing布局详解(附示例图)

Java swing布局详解(附示例图)

当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。

JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。

下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。

代码演示每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。

这些文件主要有三个方法组成:addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。

Java代码1public static void addComponentsToPane(Container pane) {。

}2/**3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。

4*/5private static void createAndShowGUI() {6// Create and set up the window.7JFrame frame = new JFrame("FlowLayoutDemo");8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);9// Set up the content pane.10addComponentsToPane(frame.getContentPane());11// Display the window.12frame.pack();13frame.setVisible(true);14}15//main()程序入口,单独起一个线程,实例化UI。

16public static void main(String[] args) {17javax.swing.SwingUtilities.invokeLater(new Runnable() {18public void run() {19createAndShowGUI();20}21});22}FlowLayoutFlowLayout类是最简单的布局管理器。

深入浅出java swing程序设计-概述说明以及解释

深入浅出java swing程序设计-概述说明以及解释

深入浅出java swing程序设计-概述说明以及解释1.引言1.1 概述Java Swing是一种用于构建图形用户界面(Graphical User Interface,简称GUI)的Java库。

它为开发人员提供了丰富的组件和布局管理器,可以轻松创建具有各种功能和样式的交互式应用程序。

Java Swing的出现填补了Java原生GUI工具包的不足,为开发人员提供了更多的自定义和灵活性。

与AWT(Abstract Window Toolkit)相比,Swing提供了更多的组件和界面控件,同时具备更好的跨平台性。

Java Swing不仅仅是一个图形用户界面库,它还提供了一整套用于处理用户输入、图形绘制、多媒体展示等功能的类和工具。

开发人员可以利用这些工具快速构建具有丰富交互性的应用程序。

本文将深入浅出地介绍Java Swing程序设计的基本概念和技巧。

我们将从Swing的组件和布局开始,逐步展示如何创建简单且功能强大的用户界面。

通过学习本文,读者将能够掌握Java Swing的核心知识,并能够利用这些知识开发出符合自己需求的应用程序。

本文的目的是帮助读者快速上手Java Swing,了解其基本概念和使用方法。

同时,我们也将展望Java Swing的未来发展,探讨其在现代应用程序开发中的重要性和应用前景。

在接下来的正文部分,我们将详细介绍Java Swing的基本概念,包括组件、事件、布局等内容。

同时,我们还将给出一些实际的例子,以便读者更好地理解和应用所学知识。

总之,本文将从大纲所列的各个方面对Java Swing进行深入浅出的探讨,旨在帮助读者全面了解和掌握Java Swing程序设计的基本技巧和应用方法。

希望读者能够通过本文的学习,具备自主开发Java Swing应用程序的能力,并能在实际项目中灵活应用所学知识。

1.2 文章结构本文主要以深入浅出的方式介绍Java Swing程序设计。

文章分为引言、正文和结论三个部分,每个部分有相应的小节。

《Java基础入门》_课后习题答案大一计算机专业8

《Java基础入门》_课后习题答案大一计算机专业8

《Java基础入门》课后习题答案第8章GUI(图形用户界面)一、填空题1、在Java 中,图形用户界面简称: GUI2、事件监听器: 负责监听事件源上发生的事件,并对各种事件做出响应处理。

3、GUI 设计提供了一些基本的图形用户接口开发工具,如AWT:Swing 和JavaFX。

4、.如果单击Frame窗口有上角的关闭按相能将其关闭:那么这个Frame窗口添加了:WindowListener 监听器,并实现了监听器:windowClosing(WindowEvent e) 的方法。

5、创建下拉式菜单需要使用三个组件,分别是:JMenuBar、JMenu、JMenuItem二、判断题1、容器(Container)是一个可以包含基本组件和其他容器的组件。

对2.可以通过实现AetionListener 接口或者继承AconAdpter 类来实现动作事件监听器。

错3.CardLayout 布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。

对4.非模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口进行交互。

错5.JFrame 的默认布局管理器是FlowLayout。

错三、选择题1.下面四个组件中哪一个不是JComponent 的子类? (B)A.JButtonB.JDialogC. JLabelD.JMenuBar2.下面四个选项中,哪些是事件处理机制中的角色?(多选) (ABD)A.事件B.事件源C.事件接口D.事件监听器3. ActionEvent 的对象会被传递给以下哪个事件处理器方法? (D)A.addChangeListener()B. addActionListener()C. stateChanged()D. actionPerformed()4.下面哪些是FlowLayout 类中表示对齐方式的常量?(多选) (ABD)A.FlowLayout.LEFTB.FlowLayout.CENTERC. FlowLayout. VERTICALD. FlowLayout. RIGHT5.下列选项中关于JavaFX,描述错误的是(C )A.JavaFX是一个强大的图形和多媒体处理工具包集合B. JavaFX 允许开发者来设计、创建、测试、调试和部署客户端程序C.JavaFX不能与Swing实现互操作D.JavaFX可以实现跨平台功能四、简答题1、请简述GUI 中实现事件监听的步骤:●通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写●创建事件源对象和事件监听器对象●调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象2、请简述Swing 中的布局管理器有哪些。

Java语言程序设计 第三版-习题答案

Java语言程序设计 第三版-习题答案

第一章绪论1.简述Java技术体系的组成。

Java技术体系主要由三部分组成:Java平台标准版Java SE,Java平台企业版Java EE,以及Java 平台微缩版Java ME。

Java SE为Java桌面和工作组级应用的开发与运行提供了环境。

它的实现主要包括Java SE Development Kit(JDK)和Java SE Runtime Environment(JRE)。

Java SE提供了编写与运行Java Applet与Application的编译器、开发工具、运行环境与Java API。

Java EE 定义了基于组件的多层企业级应用的开发标准,面向企业级和高端服务器的Internet应用开发。

它基于Java SE,包括Enterprise JavaBeans(EJB),Java Servlets API以及Java Server Pages(JSP)等技术,并为企业级应用的开发提供了各种服务和工具。

Java ME是针对消费类电子设备如移动电话、电视置顶盒、汽车导航系统等的嵌入式计算的一组技术和规范。

2.Java的特征有哪些?简述这些特征的含义。

Java语言的特征包括:简单(Simple)、面向对象(Object oriented)、分布式(Distributed)、解释型(Interpreted)、健壮(Robust)、安全(Secure)、体系结构中立(Architecture neutral)、可移植(Portable)、高性能(High performance)、多线程(Multithreaded)和动态(Dynamic)●简单性:Java语言语法和语义都比较单纯,容易学习和使用。

另外,去掉C++中的指针,取消多重继承和运算符重载,内存管理由程序员移向Java内嵌的自动内存回收机制等●面向对象:作为一种面向对象的编程语言,Java不仅最为“纯洁”,也对面向对象方法学的支持也最为全面。

java培训笔记(详细)版含作业练习-图形界面详解

java培训笔记(详细)版含作业练习-图形界面详解

四. 创建GUI 步骤三:在容器中加入组件
五. 创建GUI 步骤四:创建事件处理器
六. FlowLayout流式布局管理器
最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。
FlowLayout允许以左对齐、居中对齐(默认方式)或右对齐的方式排列组件。特性:
. 不限制它所管理的组件的大小, 而是允许它们有自己的最佳大小。
. 当容器被缩放时,组件的位置可能会变化,但组件的大小不改变。
FlowLayout的构造方法如下:
java.awt包中提供了一个抽象类Component,它是所有除了菜单类组件之外的AWT组件的父类。Container类表示容器,继承
了Component类。容器用来存放别的组件, 有两种类型的容器:Window和Panel。
1. Window和它的子类Frame
Insets getInsets() :返回容器的边框尺寸的大小
Validate():使容器内修改过的组件生效
三. 创建GUI 步骤二:布局管理器
组实例,通过它来自动进行组件的
南北区域的组件保持最佳高度,宽度被水平拉伸至和所在区域一样宽;
位于中区域的组件的宽度和高度都被拉伸至和所在区域一样大小。
. 垂直拉伸,东、西和中区域也拉伸;
水平拉伸,南、北和中区域也拉伸;
. 中区域没有组件,也会分配空间显示容器的背景颜色;
f.setBackground(Color.BLUE);
f.setVisible(true);
}
}
Index:组件存放的位置
constraints:通常是布局管理器的对象
Component getComponent()

JavaGUI编程与Swing库

JavaGUI编程与Swing库

JavaGUI编程与Swing库Java是一种功能强大的编程语言,被广泛用于开发各种应用程序。

GUI(图形用户界面)是一种用户通过图形方式与计算机进行交互的界面。

Java 提供了丰富的GUI编程工具,其中最常用的就是Swing库。

本文将深入探讨JavaGUI编程与Swing库的相关知识。

一、Swing库概述Swing是Java中的一个GUI工具包,提供了一系列的组件和容器来构建各种类型的窗口和用户界面。

Swing库的优点在于其跨平台性能,可以在不同操作系统上运行,并且提供了丰富的可自定义组件。

Swing库使用面向对象的设计模式,易于学习和使用。

二、Swing组件1. JFrame类JFrame是Swing库中最常用的顶层容器组件,用于创建窗口。

可以通过JFrame类的构造方法和方法设置窗口的大小、标题、布局等属性。

2. JPanel类JPanel是Swing库中的一个容器组件,用于放置其他组件。

可以通过JPanel类的构造方法和方法设置面板的布局、背景颜色等属性。

3. JButton类JButton是Swing库中的一个常用按钮组件,用于触发特定的操作。

可以通过JButton类的构造方法和方法设置按钮的文本、图标、事件监听等属性。

4. JLabel类JLabel是Swing库中的一个标签组件,用于显示文本或图像。

可以通过JLabel类的构造方法和方法设置标签的文本、图像、字体等属性。

5. JTextField类JTextField是Swing库中的一个文本框组件,用于接收用户的输入。

可以通过JTextField类的构造方法和方法设置文本框的大小、内容、是否可编辑等属性。

6. JCheckBox类JCheckBox是Swing库中的一个复选框组件,用于提供多个选项供用户选择。

可以通过JCheckBox类的构造方法和方法设置复选框的文本、选中状态等属性。

7. JRadioButton类JRadioButton是Swing库中的一个单选按钮组件,用于提供多个选项供用户选择,但只能选择一个。

java中Swing五种常见的布局方式

java中Swing五种常见的布局方式

java中Swing五种常见的布局⽅式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、⽹格布局(GridLayout)4、盒⼦布局(BoxLaYout)5、空布局(null)还有其他两种布局,分别是GridBagLayout(⽹格包布局)、CardLayout(卡⽚布局)注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout边界布局⽰例代码:import java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutExample extends JFrame{JButton btn1=new JButton("东");JButton btn2=new JButton("南");JButton btn3=new JButton("西");JButton btn4=new JButton("北");JButton btn5=new JButton("中");BorderLayoutExample(){init();this.setTitle("边界布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BorderLayout(10,5)); //默认为0,0;⽔平间距10,垂直间距5this.add(btn1,BorderLayout.EAST);this.add(btn2,BorderLayout.SOUTH);this.add(btn3,BorderLayout.WEST);this.add(btn4,BorderLayout.NORTH);this.add(btn5,BorderLayout.CENTER);}public static void main(String args[]){new BorderLayoutExample();}}运⾏结果:流式布局⽰例代码:import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class FlowLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");FlowLayoutExample(){init();this.setTitle("流式布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new FlowLayoutExample();}}运⾏结果:⽹格布局⽰例代码:import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;public class GridLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");GridLayoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new GridLayout(2,3,10,5)); //默认为1⾏,n列;2⾏3列,⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new GridLayoutExample();}}运⾏结果:盒⼦布局⽰例代码:import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BoxLaYoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");BoxLaYoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));//可以使⽤Box容器代替//Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);this.add(btn1);this.add(btn2);this.getContentPane().add(Box.createHorizontalStrut(10)); //采⽤x布局时,添加固定宽度组件隔开 //this.getContentPane().add(Box.createVerticalStrut(5)); //采⽤y布局时,添加固定⾼度组件隔开 this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new BoxLaYoutExample();}}运⾏结果:空布局⽰例代码:import javax.swing.JButton;import javax.swing.JFrame;public class NullLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");NullLayoutExample(){init();this.setTitle("空布局");this.setResizable(true);this.setSize(300, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(null);btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,⾼50 btn2.setBounds(20, 50, 100, 50);btn3.setBounds(30, 100, 100, 50);btn4.setBounds(40, 150, 100, 50);btn5.setBounds(50, 200, 100, 50);this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new NullLayoutExample();}}运⾏结果:。

Java开发工程师题库1

Java开发工程师题库1

Ⅰ卷一、单项选择题(本大题共40小题,每小题1分,共40分)1.(C)是不能被当前类的子类重新定义的方法。

A.抽象方法B.私有方法C.最终方法D.构造方法2.“商品”与“顾客"两个实体集之间的联系一般是(D).A.一对一B.一对多C.多对一D.多对多3.Applet的运行过程要经历4个步骤,其中(B)不是运行步骤。

A.浏览器加载指定URL中的HTML文件B.浏览器显示HTML文件C.浏览器加载HTML文件中指定的Applet类D.浏览器中的Java运行环境运行该Applet4.Character流与Byte流的区别是(C)。

A.每次读入的字节数不同B.前者带有缓冲,后者没有C.前者是块读写,后者是字节读写D.二者没有区别,可以互换使用5.Connection接口中的哪个方法用于设置事务自动提交(B).A.commit B.setAutoCommitC.getAutoCommit D.rolback6.Eclipse采用的是以下哪种技术,这是一种基于Java的窗口组件(A)。

A.SWT B.SwingC.Applet D.AWT7.GridBagLayout布局管理器不限定加入组件的大小都相同,通过下面哪个类设置每个组件大小(A)。

A.GridBagConstraints B.GridLayoutC.Frame D.Window8.int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是(D)。

A.public int MAX_LENGTH=100 B.final int MAX_LENGTH=100C.public const int MAX_LENGTH=100 D.public final int MAX_LENGTH=100 9.java。

io包的File类是(D).A.字符流类B.字节流类C.对象流类D.非流类10.Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指(B)。

java考试题

java考试题

选择题1. 在JAVA编程中,Java编译器会将Java程序转换为(a)A.字节码B.可执行代码C.机器代码D.以上都不对2. Java语言中,负责并发管理的机制是( d )A.垃圾回收B.虚拟机C.代码安全D.多线程3. 现有一变量声明为boolean aa;下面赋值语句中正确的是( a )A.aa=false; B.aa=False;C.aa="true"; D.aa=0;4. 下列不正确的Java语言标识符是( c )A.Sky B.$Computer C.for D.NULL5. 下列不是Java关键字的是( d )A.abstract B.false C.native D.sizeof6. 下列符号中可以在java程序里表示单行注释的是( c )A.-- B./* ……*/ C.以下关于构造函数的描述错误的是( a )A.每个类有且只能有一个构造函数。

B.构造函数是类的一种特殊函数,它的方法名必须与类名相同C.构造函数的主要作用是完成对类的对象的初始化工作D.一般在创建新对象时,系统会自动调用构造函数8. Panel和Applet的默认布局管理器是( b )A.CardLayout B.FlowLayout C.BorderLayout D.GridLayout9. 在java的一个异常处理中,可以包含多个的语句块是( d )。

A.try B.finally C.throws D.catch10. 下列修饰符中,能够使得某个成员变量只能被它自身和它的子类访问到的是( a )A.protected B.public C.private D.应不加修饰符11. 下列叙述中,错误的是( b)A、File类能够存储文件属性B、File类能够读写文件C、File类能够建立文件D、File类能够获取文件目录信息12.下列描述中,错误的是( a )A.java要求编程者管理内存B.java的安全性体现在多个层次上C.java中没有指针机制D.java有多线程机制13. 执行完以下代码int [ ] x = new int[10];后,以下哪项说明是正确的(a )A.x[9]为0 B.x[9]未定义C.x[10]为0 D.x[0]为空14. 有程序片段如下,以下表达式结果为true的是( b )Float s=new Float(0.1f);Float t=new Float(0.1f);Double u=new Double;A.s==t B.(t) C.(s) D.(u)15. 下列选项中,不属于字符型常量的是( b )A.’a’B.”C”C.’\n’D.’\123’16. 下列叙述错误的是( d)A.在接口中定义的方法都是没有方法体的抽象方法B.一个java类只能有一个父类,但可以实现多个接口C.在类声明中,用implements关键字声明该类实现的接口D.定义接口时使用implements关键字。

Java的布局管理器GridBagLayout的使用方法【图文说明】

Java的布局管理器GridBagLayout的使用方法【图文说明】

Java的布局管理器GridBagLayout的使⽤⽅法【图⽂说明】GridBagLayout是java⾥⾯最重要的布局管理器之⼀,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的,GridBagLayout类是⼀个灵活的布局管理器,它不要求组件的⼤⼩相同便可以将组件垂直、⽔平或沿它们的基线对齐。

每个GridBagLayout对象维持⼀个动态的矩形单元⽹格,每个组件占⽤⼀个或多个这样的单元,该单元被称为显⽰区域。

下⾯就通过⼀个记事本案例去说明GridBagLayout的使⽤⽅法。

分析:带有箭头的说明可以拉伸的。

4占⽤4个格⼦,6占⽤4个格⼦。

如果设置6可以拉伸了,那么4也会跟着拉伸。

但是如果设置4拉伸,那么7所在的列也可以拉伸,所以4不能设置拉伸。

我们应该设置4是跟随6进⾏拉伸。

灰⾊的线是为了看清布局的⼤概,组件占⽤的格⼦数。

运⾏时的显⽰效果import java.awt.*;import javax.swing.*;public class GridBagDemo extends JFrame {public static void main(String args[]) {GridBagDemo demo = new GridBagDemo();}public GridBagDemo() {init();this.setSize(600,600);this.setVisible(true);}public void init() {j1 = new JButton("打开");j2 = new JButton("保存");j3 = new JButton("另存为");j4 = new JPanel();String[] str = { "java笔记", "C#笔记", "HTML5笔记" };j5 = new JComboBox(str);j6 = new JTextField();j7 = new JButton("清空");j8 = new JList(str);j9 = new JTextArea(); j9.setBackground(Color.PINK);//为了看出效果,设置了颜⾊GridBagLayout layout = new GridBagLayout();this.setLayout(layout);this.add(j1);//把组件添加进jframethis.add(j2);this.add(j3);this.add(j4);this.add(j5);this.add(j6);this.add(j7);this.add(j8);this.add(j9);GridBagConstraints s= new GridBagConstraints();//定义⼀个GridBagConstraints,//是⽤来控制添加进的组件的显⽰位置s.fill = GridBagConstraints.BOTH;//该⽅法是为了设置如果组件所在的区域⽐组件本⾝要⼤时的显⽰情况//NONE:不调整组件⼤⼩。

java中Swing的GridBagLayout使用简介

java中Swing的GridBagLayout使用简介

java中Swing的GridBagLayout使⽤简介⼀、GridBagLayout 布局管理器以及其GridBagConstraints布局参数详解GridBagLayout主要使⽤到以下4个参数:columnWidths:设置列数;例如:gridBagLayout.columnWidths = new int[]{0}; 表⽰只有⼀列rowHeights:设置⾏数;例如:gridBagLayout.rowHeights = new int[]{0, 0}; 表⽰总共有2⾏columnWeights:设置各列所占宽度⽐例;gridBagLayout.columnWeights = new double[]{1.0}; 表⽰,列的宽度为容器的宽度,即撑满容器rowWeights:设置各⾏所占的⾼度⽐例;gridBagLayout.rowWeights = new double[]{0.2,0.8};;表⽰第⼀⾏的⾼度只占容器⾼度的2分,第⼆⾏的⾼度占容器的8份GridBagContraints壳设置的参数如下:在使⽤GridBagLayout布局⽅式之前,需要了解下⾯的参数:例如如下代码:public class ClientPanel extends JPanel {/*** Create the panel.*/public ClientPanel() {GridBagLayout gridBagLayout = new GridBagLayout();gridBagLayout.columnWidths = new int[]{0}; //设置了总共有⼀列gridBagLayout.rowHeights = new int[]{0, 0}; //设置了总共有2⾏gridBagLayout.columnWeights = new double[]{1.0}; //设置了列的宽度为容器宽度gridBagLayout.rowWeights = new double[]{0.2,0.8}; //第⼀⾏的⾼度占了容器的2份,第⼆⾏的⾼度占了容器的8份setLayout(gridBagLayout);JPanel panel = new JPanel();panel.setBackground(Color.PINK);GridBagConstraints gbc_panel = new GridBagConstraints();gbc_panel.insets = new Insets(0, 0, 5, 0);gbc_panel.fill = GridBagConstraints.BOTH;gbc_panel.gridx = 0;gbc_panel.gridy = 0;add(panel, gbc_panel);JPanel panel_1 = new JPanel();panel_1.setBackground(Color.ORANGE);GridBagConstraints gbc_panel_1 = new GridBagConstraints();gbc_panel_1.fill = GridBagConstraints.BOTH;gbc_panel_1.gridx = 0;gbc_panel_1.gridy = 1;add(panel_1, gbc_panel_1);}}运⾏结果如下:以下代码:public class ClientPanel extends JPanel {/*** Create the panel.*/public ClientPanel() {GridBagLayout gridBagLayout = new GridBagLayout();gridBagLayout.columnWidths = new int[]{0, 0, 0,0}; //设置了4列gridBagLayout.rowHeights = new int[]{0, 0}; //设置了2⾏gridBagLayout.columnWeights = new double[]{0.25,0.25,0.25,0.25}; gridBagLayout.rowWeights = new double[]{0.2,0.8};setLayout(gridBagLayout);JPanel panel = new JPanel();panel.setBackground(Color.PINK);GridBagConstraints gbc_panel = new GridBagConstraints();gbc_panel.insets = new Insets(0, 0, 5, 0);gbc_panel.fill = GridBagConstraints.BOTH;gbc_panel.gridx = 3;gbc_panel.gridy = 0;add(panel, gbc_panel);JPanel panel_1 = new JPanel();panel_1.setBackground(Color.ORANGE);GridBagConstraints gbc_panel_1 = new GridBagConstraints();gbc_panel_1.insets = new Insets(0, 0, 0, 5);gbc_panel_1.fill = GridBagConstraints.BOTH;gbc_panel_1.gridx = 0;gbc_panel_1.gridy = 1;add(panel_1, gbc_panel_1);}}运⾏结果为:。

JAVASWING布局管理器实例之GRIDBAGLAYOUT,实现左右选择框

JAVASWING布局管理器实例之GRIDBAGLAYOUT,实现左右选择框

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

先来分享一下我的学习成果,对一些重要参数进行说明: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() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubaddItem();}});left.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubleftItem();}});right.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubrightItem();}});}/*** 增加项*/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 blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedLookAndFeelException e) {// TODO Auto-generated catch blocke.printStackTrace();}MyFrame frame = new MyFrame();}}。

gridbagconstraints 参数

gridbagconstraints 参数

GridBagConstraints是Java Swing 组件用于控制组件在GridBagLayout 中的布局参数。

以下是一些常用的GridBagConstraints参数及其描述:1.fill:1.GridBagConstraints.NONE:不填充。

2.GridBagConstraints.HORIZONTAL:水平填充。

3.GridBagConstraints.VERTICAL:垂直填充。

4.GridBagConstraints.BOTH:水平和垂直填充。

2.anchor:1.用于确定组件在其单元格中的位置。

例如,GridBagConstraints.WEST将组件定位在单元格的左侧。

3.gridx和gridy:1.定义组件的行和列位置。

通常从0开始。

4.insets:1.用于设置组件与其单元格边缘之间的空间。

它是一个Inset 对象,包含上、右、下和左边的空间。

5.ipady和ipadx:1.分别用于垂直和水平方向上的内部填充。

这可以增加组件的实际大小,但不会影响其首选大小。

6.weightx和weighty:1.用于确定当窗口大小调整时,组件如何调整其大小。

值越高,组件在调整大小时将变得更大。

ponent: GridBagConstraint (如GridBagConstraints c = newGridBagConstraints();). 通常与其他参数一起使用来配置一个或多个组件。

8.iplpadx和iplpady: 这些是用来调整内部填充的像素单位值,与ipady和ipadx类似,但使用像素单位而不是比例单位。

9.ipady2: 这是一个新的属性,用于在垂直方向上为组件提供额外的内部填充。

10.padx和pady: 这些属性允许您在组件的四个角上添加填充。

这类似于在每个角上添加小的矩形,从而为组件提供一些额外的空间。

11.gridwidth和gridheight: 这些属性允许您定义单元格的宽度和高度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GridBagLayout网格包布局管理器网格包布局管理是最复杂和灵活的布局管理,在下面偶会作详细的介绍。

与网格布局管理器不同的是,网格包布局管理器允许容器中各个组件的大小各不相同,还允许组件跨越多个网格,也允许组件之间相互部分重叠。

网格包布局理解为网格单元布局更合理,因为一个容器被划分为若干个网格单元,而每个组件放置在一个或多个网格单元中。

要注意的是,网格包布局不能指定一个容器的网格单元的大小其网格单元的划分是通过weightx和weighty参数来设置的,但也不是直接指定其网格单元的大小。

当把一个组件放置在网格单元中时,组件所占据的位置和大小是由一组与他们相关联的约束来决定的。

这些约束是由GridBagConstraints类型的对象来设置的,关于GridBagConstraints类型,后面会做专门的介绍。

由上所述使用网格包布局的一般步骤为:1、创建一个GridBagLayout网格包布局对象,并使其成为当前容器的布局管理器。

2、创建一个GridBagConstraints类型的约束对象,然后使用该对象设置各种约束条件,注意这里设置的约束条件并没有针对某一组件,要使某一组件具有设置的约束,需要使用第3步骤的方法。

3、然后使用GridBagLayout网格包布局中的setConstraints(Component com, GridBagConstraints cons)方法将GridBagConstraints类型对象设置的约束添加到被设置的组件中,这样该组件就具有了GridBagConstraints设置的约束。

其中setConstraints()的第一个参数是将要添加的组件,第二个参数是GridBagConstraints类型的约束对象。

4、最后将设置了约束的组件添加到容器中。

使用网格包布局的第二种方法为:1、使GridBagLayout布局成为当前容器的布局管理器,这里也可以不用创建GridBagLayout对象。

2、创建一个GridBagConstraints类型的约束对象,然后使用该对象设置约束条件。

注意这里设置的约束条件并没有针对某一组件,要使某一组件具有设置的约束,需要使用第3步骤的方法。

3、然后使用add(Component com, Object cons)方法将组件和约束同时添加进容器中,这样添加进容器的组件就具有了第2步的约束。

注意其中的add(Component com, Object cons);第一个参数是将要添加的组件,第二个参数是要添加的GridBagConstraints类型的约束对象。

GridBagConstraints类型的约束参数:double weightx和double weighty参数(默认值为0)这是两个非常重要的参数,该参数直接影响到怎样设置网格单元的大小,因此常握好该参数就可以对网格包布局应用自如。

该参数对x方向和y方向指定一个加权值。

这个加权值直接影响到网格单元的大小,比如weightx的值分别为10,20,30,则在容器的x方向也就是列的方向,按一定的比例(比如1:2:3其具体算法请参看java文件)分配三个网格单元,其中加权值越大网格单元就越大,可以看出值的大小是没有关系的,加权值的作用是让容器以设定的值的比例在横向和纵向分配网格,且在容器的大小改变时这个比例不改变。

如果weightx只设置了一个值,而组件却不只一个以上,则被设置了的这个组件的网格单元的大小为容器在x方向的大小减去那两个组件的最小尺寸就是该组件的网格单元大小。

默认情况下组件的最小尺寸是比较小的。

如果两个参数都为0(默认值),则组件会被显示在容器的中央,不管容器是放大还是缩小组件都只会显示在容器的中央。

由上所述,在使用网格包布局时首先应先使用weightx和weighty来划分网格单元(不是直接划分,而是按一定比例来划分),网格单元划分出来后,组件放置在网格单元中的位置和大小就由后面介绍的约束来决定。

一定要注意的是设置权值后要使当前的设置生效应使用setConstraints()函数一次,如果连续设置多个同一方向的权值,则只有最后一次设置的权值有效,比如出现同时两行都设置了x方向的权值,则以最后一行设置的x方向的权值为标准来划分网格单元。

因此在使用GridBagLayout网格包布局管理器之前应先设置好网格单元,即要把容器划分为几行几列的网格单元,每行每列在容器中的宽度和高度比例,每个组件应在哪个网格单元。

int fill参数(默认值为GridBagConstraints.NONE)fill参数指定组件填充网格的方式,当某组件的网格单元大于组件的大小时被使用,一般情况下组件是以最小的方式被显示的,如果不使用fill参数,则有可能组件占不完整个网格单元,也就是说组件占据的空间比划分的网格单元小,这时组件将显示在网格单元中的某个位置(具体在什么位置由网格包中的参数来设置)。

其可取的值如下:GridBagConstraints.NONE默认值,不改变组件的大小。

GridBagConstraints.HORIZONTAL使组件足够大,以填充其网格单元的水平方向,但不改变高度,其值等于整数2。

GridBagConstraints.VERTICAL使组件足够大,以填充其网格单元的垂直方向,但不改变宽度,其值等于整数3。

GridBagConstraints.BOTH使组件足够大,以填充其整个网格单元,其值等于整数1。

int gridwidth和int gridheight参数(默认值为1)该参数指定组件占据多少个网格单元,gridwidth指定组件占据多少个网格单元的宽度,gridheight指定组件占据多少个网格单元的高度。

两个参数的默认值都为1。

其中值GridBagConstraints.REMAINDER表示当前组件在其行或列上为最后一个组件,也就是说如果是行上的最后一个组件的话,那么下一个组件将会被添加到容器中的下一行,如果在行上不指定该值(同时也不指定gridx和gridy参数),那么无论添加多少个组件都是在同一行上,同样如果在列上不指定该值(同时也不指定gridx和gridy参数)则无论添加多少行组件,都无法把容器填满。

值GridBagConstraints.RELATIVE表示当前组件在其行或列上为倒数第二个组件。

import java.awt.*;public class Program{public static void main(String[] args){ Frame ff = new Frame();GridBagLayout gr = new GridBagLayout();GridBagConstraints gc = new GridBagConstraints(); //创建一个名为gc的约束对象ff.setLayout(gr); //将容器ff的布局设为GridBagLayout//创建一组按钮组件Button bb1 = new Button("bb1"); Button bb2 = new Button("bb2"); Button bb3 = new Button("bb3");Button bb4 = new Button("bb4"); Button bb5 = new Button("bb5"); Button bb6 = new Button("bb6");Button bb7 = new Button("bb7"); Button bb8 = new Button("bb8");gc.fill = GridBagConstraints.BOTH;//设置约束的fill参数,该参数表示当组件的大小小于网格单元的大小时在水平和垂直方向都填充,gc.weightx =11; //设置x方向的加权值为11。

gc.weighty = 11;//设置y方向的加权值为11。

gr.setConstraints(bb1, gc); //将以上gc所设置的约束应用到按钮组件bb1gc.weightx = 22;//设置x方向的加权值为22,如果不设置weightx则以下的组件都将自动应用上面所设置的weightx值11。

gr.setConstraints(bb2, gc); //将以上所设置的约束应用到按钮组件bb2。

//gc.weighty=111; //注意如果不注释掉该行,则以后使用gc约束的按钮组件在y方向的加权值将为111,而在前面设置的y方向的加权值11将失去作用。

gc.weightx =33;gc.gridwidth = GridBagConstraints.REMAINDER;//设置gridwidth参数的值为REMAINDER这样在后面使用该约束的组件将是该行的最后一个组件。

gr.setConstraints(bb3, gc); //第一行添加了三个按钮组件bb1,bb2,bb3,且这3个按钮的宽度按weightx设置的值11,22,33按比例设置宽度GridBagConstraints gc1 = new GridBagConstraints();//创建第二个约束gc1gc1.fill = GridBagConstraints.BOTH;gc1.weighty = 22; //将第2行的y方向加权值设为22gr.setConstraints(bb4, gc1);gr.setConstraints(bb5, gc1);gc1.gridwidth = GridBagConstraints.REMAINDER;gr.setConstraints(bb6, gc1); //第二行添加了三个按钮组件bb4,bb5,bb6gc1.weighty =33;gc1.gridwidth = GridBagConstraints.REMAINDER;gr.setConstraints(bb7, gc1);//第三行添加了一个按钮组件bb7gc1.weighty=0;gr.setConstraints(bb8, gc1); //第四行添加了一个按钮组件bb8,bb8并没有添加到bb7的后面,因为bb8使用了bb7前面的gridwidth参数设置的值,所以bb8也是单独的一行。

ff.setSize(500, 300);ff.add(bb1); ff.add(bb2);ff.add(bb3); ff.add(bb4); ff.add(bb5); ff.add(bb6); ff.add(bb7); ff.add(bb8);ff.setVisible(true);} }int gridx 和int gridy 参数(默认值为GridBagConstraints.RELATIVE)该参数表示组件被添加到容器中的X 或者Y 坐标处,坐标以网格单元为单位,也就是说不管网格单元有多大,一个网格单元就是1X1的大小,也就是说如果把gridx 和gridy 都设为1,那么该组件会被显示到第二行的行二列上。

相关文档
最新文档