Java中的布局管理器

合集下载

布局管理器主要包括

布局管理器主要包括

布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout例3import java.awt.*;public class ExGui{private Frame f;private Button b1;private Button b2;public static void main(String args[]){ExGui that = new ExGui();that.go();}public void go(){f = new Frame("GUI example");f.setLayout(new FlowLayout());//设置布局管理器为FlowLayoutb1 = new Button("Press Me");//按钮上显示字符"Press Me"b2 = new Button("Don't Press Me");f.add(b1);f.add(b2);f.pack();//紧凑排列,其作用相当于setSize(),即让窗口尽量小,小到刚刚能够包容住b1、b2两个按钮f.setVisible(true);}}查看运行结果1. FlowLayoutFlowLayout 是Panel,Applet的缺省布局管理器。

其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。

构造方法主要下面几种:FlowLayout(FlowLayout.RIGHT,20,40);/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。

JAVA基础:FlowLayout布局管理器

JAVA基础:FlowLayout布局管理器

在前⾯的例⼦中,使⽤到了FlowLayout布局管理器。

FlowLayout型布局管理器对容器中组件进⾏布局的⽅式是将组件逐个地安放在容器中的⼀⾏上。

⼀⾏放满后就另起⼀个新⾏。

FlowLayout有三种构造⽅法: public FlowLayout() public FlowLayout(int align) public F10wLayout(int align,int hgap,int vgap) 在默认情况下,FlowLayout将组件居中放置在容器的某⼀⾏上,如果不想采⽤这种居中对齐的⽅式,考试,⼤提⽰FlowLayout的构造⽅法中提供了⼀个对齐⽅式的可选项align。

使⽤该选项,可以将组件的对齐⽅式设定为左对齐或者右对齐。

align的可取值有FlowLayout.LEFT,FlowLayout.RIGHT和FlowLayout.CENTER三种形式,它们分别将组件对齐⽅式设定为左对齐、右对齐和居中,例如: new FlowLayout(FlowLayout.LEFT)这条语句创建了⼀个使⽤左对齐⽅式的FlowLayout的实例。

此外,FlowLayout的构造⽅法中还有⼀对可选项hgap和vgap,使⽤这对可选项可以设定组件的⽔平间距和垂直间距。

与其他布局管理器不同的是,FlowLayout布局管理器并不强⾏设定组件的⼤⼩,⽽是允许组件拥有它们⾃⼰所希望的尺⼨。

注意:每个组件都有⼀个getPreferredSize()⽅法,容器的布局管理器会调⽤这⼀⽅法取得每个组件希望的⼤⼩。

下⾯是⼏个使⽤setLayout()⽅法实现FlowLayout的例⼦: setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); setLayout(new FlowLayout(FlowLayout.LEFT)); setLayout(new FlowLayout());。

布局窗口实验报告

布局窗口实验报告

一、实验目的通过本次实验,掌握Java Swing框架中常用的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout等,并学会如何使用这些布局管理器对窗口进行合理布局,提高GUI应用程序的界面设计能力。

二、实验环境1. 开发工具:Eclipse2. 开发语言:Java3. 环境配置:Java Development Kit(JDK)版本为1.8三、实验内容1. 流式布局(FlowLayout)2. 边界布局(BorderLayout)3. 网格布局(GridLayout)4. 网格袋布局(GridBagLayout)四、实验步骤1. 流式布局(FlowLayout)(1)创建一个窗口,并设置窗口标题为“FlowLayout”。

(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。

(3)设置窗口的布局管理器为FlowLayout。

(4)运行程序,观察窗口布局效果。

2. 边界布局(BorderLayout)(1)创建一个窗口,并设置窗口标题为“BorderLayout”。

(2)在窗口中添加四个标签,分别为“North”、“South”、“East”和“West”。

(3)设置窗口的布局管理器为BorderLayout。

(4)运行程序,观察窗口布局效果。

3. 网格布局(GridLayout)(1)创建一个窗口,并设置窗口标题为“GridLayout”。

(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。

(3)设置窗口的布局管理器为GridLayout,并设置每行和每列的组件数量为2。

(4)运行程序,观察窗口布局效果。

4. 网格袋布局(GridBagLayout)(1)创建一个窗口,并设置窗口标题为“GridBagLayout”。

第15章 布局管理器

第15章  布局管理器

15.5.2
使用卡片布局
• 在使用卡片布局时,通常是一个非顶级容器来使用的,这 是因为如果让顶级容器使用卡片布局,则整个窗体就显示 一个控件,也无法进行操作显示其他控件,这样设计就没 有意义。通常是将顶级容器设置为空布局管理器,在其中 添加面板和控件。在面板中使用卡片布局,让控件对面板 中的控件进行操作。 • 【范例】示例代码是一个使用卡片布局的程序。
15.1
流布局
• 流布局是相对比较简单的一种布局管理器,也是最常用的 布局管理器。在流布局中放置控件时,将按照控件的添加 顺序,依次将控件从左到右进行摆放,并且在一行的最后 会进行自动换行放置。在一行中,控件是默认居中放置的。
15.1.1
流布局介绍
• 布局管理器也是通过构造器来创建的。流布局是通过FlowLayout类来 创建,FlowLayout类具有三种构造器。首先是无参构造器,使用无参 构造器能够创建一个默认的以居中对齐方式,控件间水平和垂直间距 为5个像素的流布局。 • FlowLayout类还具有一个需要整型参数的构造器,使用该构造器能够 创建一个指定对齐方式的流布局管理器,它的控件间水平和垂直间距 仍然是默认的5个像素。流布局管理器的对齐方式如表所示。
第15章
布局管理器
• 在日常生活中,超市已经变为一个必不可少的基础设施。 在超市中,所有的商品都被超市管理人员有条理的分好类, 摆在指定的位置,日常用品放在一起,食品放在一起。在 Java Swing界面开发中,就用到了超市原理。其中窗体就 好像一个超市,窗体中的控件就好像是商品,而布局管理 器就是超市的管理人员。在Swing编程中使用布局管理器 能够非常有效地对容器中的控件进行有条理并且美观的摆 放。布局管理器也是有很多种的,包括流布局、网格布局、 边框布局和空布局等,在本章中就来学习这些布局管理器。 通过本章的学习,读者应该完成如下几个目标。 • 了解各种布局管理器的样式。 • 掌握每一种布局管理器的使用。

浅谈Java布局管理器及其应用

浅谈Java布局管理器及其应用

Ca ao tFo au 等 。 图 1中 每 一 个 容 器 都 有 r y u、lwLo t L Ly u 属性 ,可 以在 对象 监 视 器 中 定义 布局 管 理 器 ao t
类型 , 如图 2 所示 。 2 Y ao t . X Ly u 布局管理器 1 这个布局管理器与其他开发工具 的窗体设计器
1112或 支 持 它 们 的 G 开 发 T. 如 : ule、 .、. UI 具 j i r b d
VsaAg r aa等等 。 i l ef v u oI 现在 就 以 fule 开 发 T具 bi r d 详 细说 明 AWT 中提 供 的 多种 布局 管 理 器 ,如 XY—
La o 、 r e La out fd y y ut Bo d r y G i La out rd g y G i Ba La out
工具 , 解决硬性设置组件而造成布局混乱的问题 , 这 就是布局管理器 (ao t ngr Ly u Maae 。 ) 在整 个 A T中 , 基 本 的关 系 就是 构 件 、 W 最 容器
维普资讯



Ja a 布局管理 v
新疆 天择数码科 技有 限公


本 文 阐述 了Jv aa中的 布局 管 理 器在 开发 跨 平 台语 言的 重要 性 , 细 介 绍 了布局 管 理 详
器 的类 型 、 点及 其使 用方 法 , 特 列举 了 Jv 布 局 管理 器应 用 实例 。 aa
维普资讯
组 件 名称 , 回值 Байду номын сангаас C mp nn。 返 o o et
下 面我们 举 个 例子 看 如 何使 用 B r eLy u 布 od r ao t

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);}}运⾏结果为:。

borderlayout用法

borderlayout用法

borderlayout用法BorderLayout是Java中常用的布局管理器之一,它将容器分为5个区域:北、南、东、西和中心。

在使用BorderLayout时,可以将组件添加到不同的区域中,从而实现灵活的布局效果。

具体用法如下:1. 创建一个JFrame或JPanel等容器组件,并设置其布局管理器为BorderLayout。

2. 使用add方法将需要布局的组件添加到容器中,并指定其所在的区域。

例如:frame.add(new JButton('North'), BorderLayout.NORTH);frame.add(new JButton('South'), BorderLayout.SOUTH);frame.add(new JButton('East'), BorderLayout.EAST);frame.add(new JButton('West'), BorderLayout.WEST);frame.add(new JButton('Center'), BorderLayout.CENTER);3. 可以使用setHgap和setVgap方法设置组件之间的水平和垂直间距。

4. 如果一个区域中添加了多个组件,则它们将按照添加的顺序依次排列。

5. 如果某个区域没有添加任何组件,则该区域将不会显示出来。

6. 可以使用remove方法将已添加的组件从容器中移除。

7. 可以使用setPreferredSize方法设置组件的首选大小,以便更好地控制布局效果。

总之,BorderLayout是一种简单易用的布局管理器,适用于各种大小和形状的容器组件,可以轻松实现各种布局效果。

Java的GUI设计打造美观直观的用户界面

Java的GUI设计打造美观直观的用户界面

Java的GUI设计打造美观直观的用户界面Java是一种广泛使用的编程语言,拥有着强大的图形用户界面(GUI)设计能力。

通过使用Java提供的各种GUI库和工具,开发人员可以轻松地创建美观、直观的用户界面。

本文将介绍一些在Java中实现这样的GUI设计的方法和技巧。

一、选择合适的GUI库在Java中,有多个GUI库可供选择,比如Swing、JavaFX等。

选择合适的GUI库是设计美观直观界面的第一步。

Swing是一个成熟的GUI库,提供了丰富的组件和布局管理器,可以满足大部分GUI设计需求。

JavaFX是Java官方推荐的GUI库,它提供了更现代化的界面设计风格和更优秀的性能。

二、使用布局管理器布局管理器是GUI设计中重要的一环,它定义了组件在窗口中的位置和大小。

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

通过合理选择和组合这些布局管理器,可以实现各种复杂的界面布局。

三、使用合适的图标和图片图标和图片在GUI设计中起着很重要的作用,可以通过它们来提升用户界面的美观性和直观性。

Java提供了处理图标和图片的功能和类库,开发人员可以使用这些功能来加载、处理和显示各种图标和图片。

四、使用合适的颜色和字体颜色和字体也是GUI设计中非常重要的元素,可以用来强调界面的重要信息或者创建特定的视觉效果。

Java提供了各种颜色和字体的类库和功能,可以用来选择合适的颜色和字体样式。

五、增加交互性一个好的用户界面应该具有良好的交互性,能够方便用户进行操作。

Java提供了丰富的事件处理机制和监听器,可以实现交互性功能。

开发人员可以通过监听用户的操作,及时响应并更新界面,实现更好的用户体验。

六、进行界面美化除了以上的基本设计原则,开发人员还可以通过一些额外的技巧来进一步美化用户界面。

比如使用渐变色背景、添加阴影效果、使用动画效果等。

这些技巧可以使界面更加生动、有趣,并提升用户的整体体验。

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 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类是最简单的布局管理器。

swing 的用法

swing 的用法

swing 的用法一、概述Swing是Java编程语言中一个重要的图形用户界面(GUI)工具包,提供了各种组件和布局管理器,用于创建丰富多彩的桌面应用程序。

Swing包含了多个重要的组件类,如按钮(Button)、标签(Label)、文本框(TextField)、文本域(TextArea)等等,这些组件类提供了丰富的API,用于实现各种交互功能。

二、Swing组件1.按钮(Button):Swing中的Button类是一个简单的用户界面组件,用于响应用户的点击事件。

可以通过设置按钮的文本、图标和监听器等属性来定制按钮的外观和行为。

2.标签(Label):Label类用于在GUI中显示文本或图像信息。

可以通过设置标签的文本内容、字体、颜色等属性来定制标签的外观。

3.文本框(TextField)和文本域(TextArea):这两个组件类分别用于输入和显示多行文本信息。

可以通过设置文本框和文本域的大小、行数、滚动条等属性来定制它们的外观和行为。

4.菜单(Menu)和菜单项(MenuItem):Menu类用于创建菜单,MenuItem类是菜单项的子类。

可以通过设置菜单和菜单项的名称、图标、监听器等属性来定制它们的外观和行为。

5.表格(Table)和表格组件(JTable):表格是Swing中另一个重要的组件类,用于显示和操作表格数据。

可以通过设置表格的大小、列数、行头、单元格样式等属性来定制表格的外观和行为。

三、Swing布局管理器Swing提供了多种布局管理器,用于控制组件在容器中的布局方式。

常见的布局管理器包括:1.FlowLayout:按照水平或垂直方向自动排列组件。

2.BorderLayout:将容器分为左右、左上、右上、左下、右下五个区域,将组件放置在指定的区域中。

3.GridLayout:将组件按照网格方式排列,可以设置行数和列数。

4.CardLayout:用于管理多个面板或窗口,通过切换卡片来显示不同的界面。

java笔记4(布局管理器常用组件qq聊天界面记事本)

java笔记4(布局管理器常用组件qq聊天界面记事本)

Java笔记4(布局管理器、常用组件、qq聊天界面、记事本)文件结构Java代码布局管理器Demo8_1.java package com.test1; import javax.swing.JButton; import javax.swing.JFrame; public classDemo8_1 extends JFrame //继承JFrame { /*** @param args */ public static voidmain(String[] args) { Demo8_1 demo8_1=new Demo8_1(); } //把需要的组件定义在这里JButton jb1=null; //定义一个按钮//构造函数public Demo8_1() { ////JFrame是一个顶层容器类(可以添加其它swing组件的类) //JFrame jf=new JFrame(); //给窗体设置标题this.setTitle("Hello world"); //设置大小,按像素this.setSize(200, 200); //设置初始位置this.setLocation(100,200); //创建一个按钮jb1=new JButton("我是一个按钮!"); //添加JButton组件this.add(jb1); //设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示this.setVisible(true); } } 常用组件常Demo8_2.java /* * BorderLayout演示*1.继承JFrame *2.定义组件*3.创建组件(构造函数) *4.添加组件*5.对窗体设置*6.显示窗体*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_2 extends JFrame{ /** * @param args */ //定义组件JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODOAuto-generated method stub Demo8_2demo8_2=new Demo8_2(); } publicDemo8_2() { //创建组件jb1=new JButton("中部"); jb2=new JButton("北部"); jb3=new JButton("南部"); jb4=new JButton("东部");jb5=new JButton("西部"); //添加各个组件this.add(jb1,BorderLayout.CENTER);this.add(jb2,BorderLayout.NORTH);this.add(jb3,BorderLayout.SOUTH);this.add(jb4,BorderLayout.EAST);this.add(jb5,BorderLayout.WEST); //设置窗体属性this.setTitle("边界布局的案例");this.setSize(300,200); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体this.setVisible(true); } }Demo8_3.java /* * 功能:流式:流式布局案例*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_3 extends JFrame{ /** * @param args */ //定义需要的组件JButton jb1,jb2,jb3,jb4,jb5,jb6;public static void main(String[] args) { // TODOAuto-generated method stub Demo8_3 demo8_3=new Demo8_3(); } //构造函数public Demo8_3() { //创建组件jb1=new JButton("关羽"); jb1.setSize(100, 100); jb2=new JButton("张飞"); jb3=new JButton("赵云");jb4=new JButton("马超"); jb5=new JButton("黄忠");jb6=new JButton("魏延"); //添加组件this.add(jb1); this.add(jb2); this.add(jb3);this.add(jb4); this.add(jb5); this.add(jb6);//设置布局管理器this.setLayout(newFlowLayout(FlowLayout.LEFT)); //设置窗体属性this.setTitle("流式布局案例"); this.setSize(350,200); this.setLocation(200,200); //禁止用户改变窗体大小this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示this.setVisible(true); } }swing编程实战Demo8_4.java /* * 风格布局*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_4 extends JFrame{ int size=9; //定义组件JButton jbs[]=new JButton[size]; public static void main(String[] args) { // TODO Auto-generated method stub //创建实例Demo8_4demo8_4=new Demo8_4(); } //构造函数public Demo8_4() { //创建组件for(inti=0;ijava /* * 多种布局管理器的使用*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_5 extends JFrame { //定义组件JPanel jp1,jp2; JButton jb1,jb2,jb3,jb4,jb5,jb6; public static void main(String[] args) { // TODO Auto-generated method stub Demo8_5 demo8_5=new Demo8_5(); }//构造函数public Demo8_5() { //创建组件//JPanel布局默认是FlowLayout jp1=new JPanel();jp2=new JPanel(); jb1=new JButton("西瓜");jb2=new JButton("苹果"); jb3=new JButton("荔枝");jb4=new JButton("葡萄"); jb5=new JButton("桔子");jb6=new JButton("香蕉"); //设置布局//添加jp1.add(jb1); jp1.add(jb2); jp2.add(jb3);jp2.add(jb4); jp2.add(jb5); //把Panel 加入JFrame this.add(jp1,BorderLayout.NORTH); this.add(jb6,BorderLayout.CENTER);this.add(jp2,BorderLayout.SOUTH);this.setSize(300,150); this.setLocation(200,200); this.setVisible(true); } } Demo8_6.java package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_6 extends JFrame{ /** * @param args */ //定义组件JPanel jp1,jp2,jp3; //三个子面板JLabeljlb1,jlb2; //标签JButton jb1,jb2; //两个按钮JTextField jtf1,jpf1; //两个文本输入框public static void main(String[] args) { // TODOAuto-generated method stub Demo8_6demo8_6=new Demo8_6(); } //构造函数public Demo8_6() { jp1=new JPanel();jp2=new JPanel(); jp3=new JPanel();jlb1=new JLabel("用户名:"); jlb2=new JLabel("密码:"); jb1=new JButton("登录"); jb2=new JButton("取消"); jtf1=new JTextField(10); //用户名文本框jpf1=new JPasswordField(10); //密码文本框//设置布局管理this.setLayout(new GridLayout(3,1));//加入各个组件jp1.add(jlb1); jp1.add(jtf1);jp2.add(jlb2); jp2.add(jpf1); jp3.add(jb1);jp3.add(jb2); //加入到JFrame this.add(jp1); this.add(jp2); this.add(jp3); this.setTitle("会员管理系统"); this.setSize(250,130);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_7.java/* * 复选框或单选框的案例*/ package com.test1; import java.awt.*; importjavax.swing.*; public class Demo8_7 extends JFrame{ //定义JPanel jp1,jp2,jp3;JLabel jl1,jl2; JButton jb1,jb2; JCheckBoxjcb1,jcb2,jcb3; JRadioButton jrb1,jrb2;ButtonGroup bg; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_7 dmeo8_7=new Demo8_7(); } //构造函数public Demo8_7() { //创建组件jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jl1=new JLabel("你喜欢的运动:");jl2=new JLabel("你的性别:"); jb1=new JButton("注册用户"); jb2=new JButton("取消注册");jcb1=new JCheckBox("足球"); jcb2=newJCheckBox("篮球"); jcb3=new JCheckBox("网球");jrb1=new JRadioButton("男"); jrb2=new JRadioButton("女"); //一定要把jrb1,jrb2放入到一个ButtonGroup ButtonGroup bg=new ButtonGroup(); bg.add(jrb1); bg.add(jrb2);//设置布局管理器this.setLayout(new GridLayout(3,1)); //添加组件jp1.add(jl1); jp1.add(jcb1);jp1.add(jcb2); jp1.add(jcb3); jp2.add(jl2);jp2.add(jrb1); jp2.add(jrb2); jp3.add(jb1);jp3.add(jb2); this.add(jp1); this.add(jp2); this.add(jp3); this.setSize(300,150);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_8.java/* * JCombobox/JList/JScrollPane */package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_8 extends JFrame { //定义JPanel jp1,jp2;JLabel jl1,jl2; JComboBox jcb1; JList jlist; JScrollPane jsp; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_8 demo8_8=new Demo8_8(); } //构造函数public Demo8_8() { jp1=new JPanel(); jp2=new JPanel(); jl1=new JLabel("你的籍贯:"); jl2=new JLabel("旅游地点:"); String []jg={"北京","上海","天津","火星"}; jcb1=new JComboBox(jg); String []dd={"九寨沟","故宫","长城","兵马俑"}; jlist=new JList(dd);jlist.setVisibleRowCount(2);//设置你希望显示多少个选项jsp=new JScrollPane(jlist); //设置布局this.setLayout(new GridLayout(3,1)); //添加组件jp1.add(jl1); //加到面板1当中jp1.add(jcb1);jp2.add(jl2); //加到面板2当中jp2.add(jsp);this.add(jp1); //把面板加入到窗体当中this.add(jp2); //设置窗体属性this.setSize(200,180);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } Demo8_9.java /* * 词霸*/ package com.test1;import java.awt.*; import javax.swing.*;public class Demo8_9 extends JFrame{ //定义组件JSplitPane jsp; JList jList; JLabel jl1; public static void main(String[] args) { // TODOAuto-generated method stub Demo8_9demo8_9=new Demo8_9(); } publicDemo8_9() { //创建组件String []words={"迈克尔-杰克逊","中国","导游"}; jList=new JList(words); jl1=new JLabel(new ImageIcon("images/迈克尔-杰克逊2.jpg")); //拆分窗格jsp=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,jList,jl1);//设置窗格可以伸缩jsp.setOneTouchExpandable(true); //设置布局管理器//添加组件this.add(jsp);//设置大小this.setSize(550,632);this.setLocation(200,200);this.setVisible(true); } }Demo8_10.java /* * qq聊天器*/package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_10 extends JFrame{ JTextArea jta=null; JScrollPane jsp=null; //滚动面板JPanel jp1=null;JComboBox jcb=null; JTextField jtf=null; JButton jb=null; public static void main(String[] args) { // TODO Auto-generated method stubDemo8_10 demo8_10=new Demo8_10(); }//构造public Demo8_10() { jta=new JTextArea(); jsp=new JScrollPane(jta); //为文本域添加滚动条jp1=new JPanel(); String []chatter={"布什","拉登"}; jcb=new JComboBox(chatter);jtf=new JTextField(10); jb=new JButton("发送");//设置布局//添加组件jp1.add(jcb);jp1.add(jtf); jp1.add(jb); //加入JFrame this.add(jsp); this.add(jp1,BorderLayout.SOUTH);//设置窗体属性this.setSize(300,200);this.setIconImage((newImageIcon("images\\rowin2.gif")).getImage());this.setTitle("简单QQ");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }Demo8_11.java /* * qq登录界面制作*/ package com.test1; import java.awt.*; import javax.swing.*; public class Demo8_11 extends JFrame{ //北部区域JLabel jl1; //南部区域JButton jb1,jb2,jb3; JPanel jp1;//中部区域JTabbedPane jtp;//选项卡窗格JPanel jp2,jp3,jp4;//三个子面板JLabeljl2,jl3,jl4,jl5; //号码输入文本框JTextField jtf; //密码JPasswordField jpf; //清除号码button JButton jb4; //隐身登录,记住密码JCheckBoxjcb1,jcb2; public Demo8_11() { //创建组件jl2=new JLabel("QQ号码",JLabel.CENTER);jl3=new JLabel("QQ密码",JLabel.CENTER); jl4=new JLabel("忘记密码",JLabel.CENTER);jl4.setFont(new Font("宋体",Font.PLAIN,16));//设置字体样式jl4.setForeground(Color.BLUE);//设置字体颜色jl5=new JLabel("申请密码保护");jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_ CURSOR)); //输入号码框jtf=new JTextField(); //输入密码框jpf=new JPasswordField(); jb4=new JButton(newImageIcon("images\\清除号码.jpg")); //复选框jcb1=new JCheckBox("隐身登录"); jcb2=new JCheckBox("记住密码"); //北部区域jl1=new JLabel(new ImageIcon("images\\老虎.jpg"));//南部区域jp1=new JPanel(); jb1=newJButton(new ImageIcon("images\\登录.gif")); jb2=new JButton(new ImageIcon("images\\取消.gif")); jb3=new JButton(new ImageIcon("images\\向导.gif")); //中部区域jtp=new JTabbedPane(); jp2=new JPanel(); jp3=new JPanel();jp3.setBackground(Color.RED);//给面板设置背景颜色jp4=new JPanel(); jp4.setBackground(newColor(0,0,255));//用另一种方法设置背景颜色//将面板添加到选项卡窗格上jtp.add("QQ号码",jp2); //第一个参数代表选项卡的名称,第二个参数代表面板jtp.add("手机号码",jp3); jtp.add("电子邮箱",jp4);//设置布局jp2.setLayout(new GridLayout(3,3));//添加组件//南部jp1.add(jb1); jp1.add(jb2); jp1.add(jb3); //中部jp2.add(jl2);//QQ号码jp2.add(jtf);//号码框jp2.add(jb4);//清除号码按钮jp2.add(jl3);//密码jp2.add(jpf);//密码框jp2.add(jcb1);//记住密码jp2.add(jcb2);//隐身登录jp2.add(jl5);//申请密码保护this.add(jp1,BorderLayout.SOUTH);//加入南部子面板this.add(jl1,BorderLayout.NORTH);//加入北部子面板this.add(jtp,BorderLayout.CENTER);//把选项卡加入中部//展现组件ImageIcon icon=newImageIcon("images\\rowin.gif");this.setIconImage(icon.getImage());this.setSize(350,240); this.setLocation(300,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { newDemo8_11(); } } Demo8_12.java /* * 记事本界面*/ package com.test1;import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo8_12 extends JFrame{ JMenuBar jmb;//菜单条组件JMenu menu1,menu2,menu3,menu4,menu5;JMenuItem item2,item3,item4,item5,item6,item7;JMenu xinjian;//二级菜单JMenuItem file,project; JTextArea jta; //文本输入区域//工具条JToolBar jtb; JButton jb1,jb2,jb3,jb4,jb5,jb6;public Demo8_12() { //创建组件jtb=new JToolBar(); jb1=new JButton(newImageIcon("images\\new.jpg")); jb1.setToolTipText("新建");//设置提示信息jb2=new JButton(new ImageIcon("images\\open.jpg")); jb2.setToolTipText("打开"); jb3=new JButton(newImageIcon("images\\save.jpg")); jb4=newJButton(new ImageIcon("images\\copy.jpg"));jb5=new JButton(new ImageIcon("images\\cut.jpg"));jb6=new JButton(new ImageIcon("images\\paste.jpg")); jmb=new JMenuBar(); menu1=new JMenu("文件(F)"); menu1.setMnemonic('F');//设置助记符menu2=new JMenu("编辑(E)");menu2.setMnemonic('E'); menu3=new JMenu("格式(O)"); menu3.setMnemonic('O'); menu4=new JMenu("查看(V)"); menu4.setMnemonic('V');menu5=new JMenu("帮助(H)");menu5.setMnemonic('H'); //item1=new JMenuItem("新建"); xinjian=new JMenu("新建");file=new JMenuItem("文件"); project=new JMenuItem("工程"); item2=new JMenuItem("打开",new ImageIcon("new.gif")); item3=new JMenuItem("保存(s)"); item3.setMnemonic('s');//给菜单添加快捷方式item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.V K_S,InputEvent.ALT_MASK)); item4=new JMenuItem("另存为"); item5=new JMenuItem("页面设置"); item6=new JMenuItem("打印"); item7=new JMenuItem("退出"); jta=new JTextArea();//设置布局//添加组件//将按钮添加到工具条上jtb.add(jb1); jtb.add(jb2); jtb.add(jb3); jtb.add(jb4); jtb.add(jb5); jtb.add(jb6);//将菜单项添加到菜单上xinjian.add(file);xinjian.add(project); menu1.add(xinjian);menu2.add(item2); menu1.add(item3);menu1.add(item4); menu1.addSeparator();//添加分割线menu1.add(item5); menu1.add(item6);menu1.addSeparator(); menu1.add(item7);//将菜单添加到菜单条上jmb.add(menu1);jmb.add(menu2); jmb.add(menu3);jmb.add(menu4); jmb.add(menu5); //将菜单条添加到窗体上this.setJMenuBar(jmb);//将工具条添加到窗体上this.add(jtb,BorderLayout.NORTH); //给文本域添加滚动条JScrollPane jsp=new JScrollPane(jta); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SC ROLLBAR_AS_NEEDED); this.add(jsp); //展现this.setTitle("记事本"); ImageIcon icon=new ImageIcon("images\\rowin.gif");this.setIconImage(icon.getImage());//设置窗体图标this.setSize(500,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { Demo8_12 demo8_12=new Demo8_12(); } }。

AWT中常用的布局管理器

AWT中常用的布局管理器

AWT中常用的布局管理器有如下几个:FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout,Swing还提供了一个BoxLayout。

FlowLayout从左向右排列所有组件,遇到边界就会折回下一行从新开始。

它有三个构造器FlowLayout(),FlowLayout(int align)和FlowLayout(int align, int hgap, int vgap),其中的hgap和vgap代表水平间距和垂直间距,align指的是组件的排列方向(从左向右,从右向左,从中间向两边),我们可以使用FlowLayout的静态常量来设置这个参数:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。

BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个区域,如下图所示:我们在向使用此布局管理器的容器中添加组件时,需要制定添加到的区域,否则就默认添加到中间区域里,而当我们向一个区域添加多个组件时,后放入的组件会覆盖前面的组件。

BorderLayout有两个构造器,BorderLayout()和BorderLayout(int hgap,int vgap),hgap和vgap代表的水平间距和垂直间距。

我们在指定组件添加到的区域时,可以使用它的静态常量:BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER。

例如:Frame f = new Frame();f.setLayout(new BorderLayout(5,5));f.add(new Button(“南”),SOUTH);//将一个按钮添加到南的位置BorderLayout最多只能放5个组件,但是实际上我们可以先在Panel中添加多个组件,再将Panel添加到BorderLayout布局管理器中,因此我们实际可以放的组件要远远超过5个。

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();}}。

java中OverlayLayout(重叠)布局管理器专题

java中OverlayLayout(重叠)布局管理器专题

参考文现:孙卫琴《java面向对象程序设计》其他不详本文作者:黄邦勇帅学习本文前提条件:应学习过AWT图形编程。

本文的说明:本文是对学习Swing时,出现的一个新布局管理器OverlayLayout的专题介绍。

本文对理解该布局管理器的关键概恋,进行了详细讲解,希望读过本文后,大家能熟练运用这个布局管理器。

本文的的内容全是个人理解,因此难免有理解上的错误,望读者指出更正。

声明:禁止抄袭本文,若需要转载本文请注明转载的网址,或者注明转载自“黄邦勇帅”。

OverlayLayout(重叠)布局管理器与组件对齐方式,对齐点对齐点:该概念对于理解OverlayLayout布局至关重要,若不能理解对齐点那么你将对OverlayLayout和组件的对齐方式是一片雾水,为了说明对齐点我们将结合下图来讲解。

从以上两图可以看出来,对于OverlayLayout布局组件在容器中的放置位置是于对齐点有关的,在对齐点的位置(后面后介绍怎样计算)确定后就可以根据组件在X轴和Y轴的对齐方式来确定组件放置的位置。

由第一副图可以知道组件的X轴的值0表示组件的左侧面,1表示组件的右侧面,那么相应的0.25就表示离组件左侧面距离为组件宽度的0.25倍(1/4)处的地方,其他数字可以类推。

同样Y轴的0值表示组件的顶面,1表示组件的底面,0.25就表示组件离顶面距离为1/4处的地方,其他数字类推。

由第二副图可以知道,当组件在容器中的对齐点(对齐点的计算后面会专门讨论)确定后就可以根据设置的组件的X轴与Y轴的值来设置组件的位置,当把组件的X轴设为0时,表示组件以左侧面与X轴的对齐点对齐,如图中的按钮1。

当组件的X轴设为0.5时,则以组件整个宽度的中间部位与X轴的对齐点对齐,同样当X轴为0.75时,表示把组件离左侧面距离为0.75倍(即3/4)组件宽度的地方与X轴的对齐点对齐。

同样,对于Y轴当Y轴的值为0值,就以组件的顶面与Y轴对齐点对齐,当Y轴的值为1时,就以组件的底面与Y轴的对齐点对齐。

布局管理器在Java程序设计中的应用

布局管理器在Java程序设计中的应用

法 中 分 别 在 p 中 增 加 标 签 Ila 1 bN me和 文本 框 t ma ,2中增 加 f ep N 标 签 l u e N mbr和 文 本 框 i u b rp 中增 加 标 签 le f m e ,3 N S x和 单
选 框 c Ma 、h e l。4 中 增 加 标 签 l ̄ b 和 下 拉 列 表 框 h l cF ma p e e bo 表 1 Mo ,5中增 加 p 3和 p ,6设 为 B reL yu 布 局 , 后 在 北 4p od rao t 然 在 图形 用 户 界 面 设 计 过 程 中 .综 合 运 用 这 些 布局 管 理 器 可 c b p 增 加 p 、 增 加 p 、 增 加 p ,7 p 1中 2南 5 p 、8按 如 此 添 加 上 组 件 。最 后 以 满 足 一 般 的 需 要 。 然 对 于 特 殊 的 具 体 应 用 . 可 以 通 过 实 现 当 还 6p 8分 别 添 加在 框 架 的北 、 中和 南 部 。 Ly uM n gr Ly uM n gr ao t a ae 或 ao t a ae2接 口来 定 义 自 己 的 布 局 管 理 把 p 、7和 p
L y uMa a e2设 计 自 己布 局 管理 的 思 想 。 ao t ngr
【 关键宇 】Jv ; :aa 布局 管理 器; 图形用 户界 面; ; 类
0 引 言 .
通 过 一 个 例 子 来 说 明 布 局 管 理 器 在 图形 用 户 界 面 设 计 中 的
2。
姓 名 辕 入面 板
蛙续 置 放 .
h - 时
Q_删 皿
形t 十 框线 表 .每 擎 格中 一 组件 c 无 一 的 格 个 元 放 个 .

Java Swing布局管理器之OverLayout

Java Swing布局管理器之OverLayout

OverlayLayout是用于排列重叠组件的布局管理器。

它的用途是以一些对齐的点为基准将一些组件层叠的放置在布局容器中。

组件的横轴和纵轴的对齐点介于0.0和1.0之间。

横轴(X轴)上0.0代表组件的左侧面,1.0代表组件的右侧面;纵轴(Y轴)上0.0和1.0分别代表组件的顶部和底部。

构造函数public OverlayLayout(Container target)因为构造函数不会为target对象安装结果布局管理器,所以我们还必须调用setLayout()来完成此功能。

JPanel p1 = new JPanel();OverlayLayout overlay = new OverlayLayout(p1);p1.setLayout(overlay);在OverlayLayout布局管理器中,每个组件都有一对横纵坐标值,每个组件的位置只和它本身的横纵坐标值有关,换句话说就是组件以他自己的位置作为基准,横轴上0.0和1.0分别代表组件的左侧面和右侧面;纵轴上0.0和1.0分别代表组件的顶部和底部,和容器位置无关。

如果一个组件的alignmentX属性设置为0.5,原本左侧面的位置对应0.0,现在变成了0.5,那么,现在组件的位置就要向左移动width/2的距离,使左侧面的位置对应现在的0.0。

纵轴亦是如此,明白了吗?// OverlayTest.java// A test of the OverlayLayout manager allowing experimentation. //importimportimportpublic JFrame {public OverlayTest() {super("OverlayLayout Test");setSize(500, 300);setDefaultCloseOperation(EXIT_ON_CLOSE);final Container c = getContentPane();c.setLayout(new GridBagLayout());final JPanel p1 = new GridPanel();final OverlayLayout overlay = new OverlayLayout(p1);p1.setLayout(overlay);final JButton jb1 = new JButton("B1");final JButton jb2 = new JButton("B2");final JButton jb3 = new JButton("B3");Dimension b1 = new Dimension(60, 50);Dimension b2 = new Dimension(80, 40);Dimension b3 = new Dimension(100, 60);jb1.setMinimumSize(b1);jb1.setMaximumSize(b1);jb1.setPreferredSize(b1);jb2.setMinimumSize(b2);jb2.setMaximumSize(b2);jb2.setPreferredSize(b2);jb3.setMinimumSize(b3);jb3.setMaximumSize(b3);jb3.setPreferredSize(b3);SimpleReporter reporter = new SimpleReporter();jb1.addActionListener(reporter);jb2.addActionListener(reporter);jb3.addActionListener(reporter);p1.add(jb1);p1.add(jb2);p1.add(jb3);JPanel p2 = new JPanel();p2.setLayout(new GridLayout(2,6));p2.add(new JLabel("B1 X", JLabel.CENTER));p2.add(new JLabel("B1 Y", JLabel.CENTER));p2.add(new JLabel("B2 X", JLabel.CENTER));p2.add(new JLabel("B2 Y", JLabel.CENTER));p2.add(new JLabel("B3 X", JLabel.CENTER));p2.add(new JLabel("B3 Y", JLabel.CENTER));p2.add(new JLabel(""));final JTextField x1 = new JTextField("0.0", 4); // Button1 x alignmentfinal JTextField y1 = new JTextField("0.0", 4); // Button1 y alignmentfinal JTextField x2 = new JTextField("0.0", 4);final JTextField y2 = new JTextField("0.0", 4);final JTextField x3 = new JTextField("0.0", 4);final JTextField y3 = new JTextField("0.0", 4);p2.add(x1);p2.add(y1);p2.add(x2);p2.add(y2);p2.add(x3);p2.add(y3);GridBagConstraints constraints = new GridBagConstraints();c.add(p1, constraints);constraints.gridx = 1;JButton updateButton =updateButton.addActionListener( ActionListener() {actionPerformed(ActionEvent ae) {jb1.setAlignmentX(Float.valueOf(x1.getText().trim()).floatValue());jb1.setAlignmentY(Float.valueOf(y1.getText().trim()).floatValue());jb2.setAlignmentX(Float.valueOf(x2.getText().trim()).floatValue());jb2.setAlignmentY(Float.valueOf(y2.getText().trim()).floatValue());jb3.setAlignmentX(Float.valueOf(x3.getText().trim()).floatValue());jb3.setAlignmentY(Float.valueOf(y3.getText().trim()).floatValue());p1.revalidate();}});c.add(updateButton, constraints);constraints.gridx = 0;constraints.gridy = 1;constraints.gridwidth = 2;c.add(p2, constraints);}main(String args[]) {OverlayTest ot =ot.setVisible(}ActionListener {actionPerformed(ActionEvent ae) {System.out.println(ae.getActionCommand());}}JPanel {paint(Graphics g) {int w = getSize().width;int h = getSize().height;g.setColor(Color.red);g.drawRect(0,0,w-1,h-1);g.drawLine(w/2,0,w/2,h);g.drawLine(0,h/2,w,h/2);}}}最后提醒,使用OverlayLayout布局管理器关键要记住X,Y轴对应组件位置,和容器没有关系。

Java形界面SwingJavaFX和AWT

Java形界面SwingJavaFX和AWT

Java形界面SwingJavaFX和AWT Java形界面Swing、JavaFX和AWTJava是一种广泛应用的编程语言,其强大的图形界面(GUI)库使得开发者能够创建各种各样的用户界面。

在Java中,有三种主要的GUI库,它们分别是Swing、JavaFX和AWT。

本文将详细介绍这三种GUI库的特性和使用方法。

一、SwingSwing是Java提供的一套用于构建图形界面的库,它基于AWT库进行了扩展。

Swing提供了丰富的组件和布局管理器,使得开发者能够轻松地创建漂亮和交互性强的界面。

1.1 组件Swing提供了大量的组件,包括按钮、文本框、标签、列表框、表格等。

开发者可以通过组合这些组件来构建复杂的界面。

Swing组件的特点是可定制性高,开发者可以自定义组件的外观和行为。

1.2 布局管理器Swing通过布局管理器来自动调整组件的位置和大小。

常用的布局管理器有FlowLayout、BorderLayout、GridLayout和GridBagLayout。

开发者可以根据界面的需要选择合适的布局管理器。

1.3 事件处理Swing使用事件模型来处理用户的输入和其他操作。

开发者可以为组件添加事件监听器,响应用户的操作。

事件处理是Swing应用中的重要部分,可以使界面与用户产生交互。

二、JavaFXJavaFX是Oracle推出的新一代Java GUI库。

与Swing相比,JavaFX提供了更多的现代化特性,包括动画效果、3D支持和富文本等。

2.1 UI控件JavaFX提供了一套丰富的UI控件,包括按钮、标签、文本框、下拉框等。

这些控件样式多样,并且支持CSS样式表进行自定义。

2.2 布局JavaFX使用场景图(Scene Graph)来组织界面元素。

开发者可以使用各种布局容器来构建界面,如VBox、HBox、BorderPane等。

2.3 动画效果JavaFX内置了强大的动画框架,开发者可以轻松地创建平滑的过渡效果、缩放动画和旋转动画等。

setlayout的用法

setlayout的用法

setlayout的用法setLayout方法是Java的一个布局管理器重要的方法,也是GUI 编程的基础。

它的用法在实现Java程序制作的GUI界面中显得尤为重要,本文将对setLayout的用法及它的布局管理器包括FlowLayout、GridLayout和BorderLayout进行详细地剖析。

一、 setLayout的用法setLayout方法的作用是设置容器的布局管理器,在使用GUI编程时容器是必不可少的,而容器要想使用布局管理器来管理窗口中的组件,就必须调用setLayout方法。

在不同的操作系统上,setLayout方法的写法也有所不同,如果是在Java SE环境中,它的写法为:public void setLayout(LayoutManager manager)其中,LayoutManager是一个布局上下文,它指定容器中的组件的布局方式。

它允许程序员按照自己的意愿改变容器的布局。

一般地,调用setLayout方法的时候要指定布局管理器,因此在使用setLayout方法前,必须有一个布局管理器,在Java中有三种布局管理器:FlowLayout、GridLayout和BorderLayout。

二、局管理器1. FlowLayoutFlowLayout是一种比较简单的布局管理器,它使用组件的排列顺序来安排组件的位置,组件是水平排列的,当一行排满后,自动换行,它是容器的默认布局。

调用FlowLayout的方法如下:Container.setLayout(new FlowLayout())2. GridLayoutGridLayout可以同时安排多个控件,它的用法跟表格很类似,它将容器分成等大的网格,然后把组件按照行和列的方式排列,类似于表格。

调用GridLayout的方法如下:Container.setLayout(new GridLayout(4,2))其中,4表示行数,2表示列数。

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

前言随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。

而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。

现在的应用软件越来越要求界面友好、功能强大而又使用简单。

而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。

这也是很多Java程序员抱怨的事情。

但GUI 已经成为程序发展的方向,所以我们也必须了解Java的GUI设计方法和特点。

其实,采用Java提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比VB麻烦许多。

本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的Java痴迷者一些帮助。

2 Java中的布局管理器2.1 为什么要使用布局在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。

为了管理好这些组件的布局,我们就需要使用布局管理器。

比如说,设计一个简单的计算器,或一个文本编辑器等等。

这些组件是让JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。

将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。

在Java中,布局由布局管理器(LayoutManager) 来管理。

那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢?如果你写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。

不信,你可以新建一个Frame(或JFrame),通过setBounds()方法往其中添加几个Button(或JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。

为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。

为此,我们首先要知道Java的布局方式,Java提供的API中有些什么布局管理器,它们的布局特点是什么。

2.2 Java的布局方式我们都知道,Java的GUI界面定义是由AWT类包和Swing类包来完成的。

它在布局管理上采用了容器和布局管理分离的方案。

也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。

对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。

现在我们来看Java中布局管理器的具体实现。

我们前面说过,Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的add()方法向自己内部加入组件。

同时他记录这些加入其内部的组件的个数,可以通过container.getComponentCount()方法类获得组件的数目,通过container.getComponent(i)来获得相应组件的句柄。

然后LayoutManager类就可以通过这些信息来实际布局其中的组件了。

Java已经为我们提供了几个常用的布局管理器类,例如:FlowLayout、BorderLayout、GridLayout、GridBagLayout等。

下面列表说明它们的布局特点:包类特点java.awt CardLayout 将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见java.awt FlowLayout 将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置java.awt GridLayout 形似一个无框线的表格,每个单元格中放一个组件java.awt BorderLayout 将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件java.awt GridBagLayout 非常灵活,可指定组件放置的具体位置及占用单元格数目Javax.swing BoxLayout 就像整齐放置的一行或者一列盒子,每个盒子中一个组件Javax.swing SpringLayout 根据一组约束条件放置子组件Javax.swing ScrollPaneLayout 专用于JScrollPane,含一个Viewport,一个行头、一个列头、两个滚动条和四个角组件Javax.swing OverlayLayout 以彼此覆盖的形式叠置组件Javax.swing ViewportLayout JViewport的默认布局管理器事实上,在大多数情况下,综合运用好这些布局管理器已可以满足需要。

当然对于特殊的具体应用,我们可以通过实现LayoutManager或LayoutManager2接口来定义自己的布局管理器。

下面我们通过几个实例来了解几个常用的布局管理器的使用方法。

3 GUI设计应用实例3.1 FlowLayout/GridLayout/BorderLayout的应用实例3.1.1应用背景假设我们要编写一个简单的计算器JApplet,其基本界面如下3.1.2解决方法通过其界面要求可知,我们可以通过将"BackSpace"和"Clear"JButton放置在一个JPanel(1)中,采用FlowLayout布局;将显示结果的JTextField和该JPanel一起放置到另外一个JPanel(2),采用GridLayout布局;而将其它的JButton则放置在另外一个JPanel(3)中,采用GridLayout布局;再将JPanel(2)和JPanel(3)加入该JApplet,即可实现界面需求。

具体实现方法如下:/**以FlowLayout布局JPanel(1)*/JPanel p1 = new JPanel(new FlowLayout()); //默认组件从居中开始//加入"BackSpace"和"Clear"JButtonp1.add(backButton);p1.add(clearButton);/**以GridLayout布局JPanel(2)*/JPanel p2 = new JPanel(new GridLayout(2, 1)); //放置2行,每行1个组件//加入显示结果的JTextField和JPanel(1)p2.add(displayField);p2.add(p1);/**以GridLayout布局JPanel(3)*/JPanel p3 = new JPanel(new GridLayout(4, 5)); //放置4行,每行5个组件String buttonStr = "789/A456*B123-C0.D+=";for (int i = 0; i < buttonStr.length(); i++)this.addButton(p3, buttonStr.substring(i, i + 1));//addButton方法private void addButton(Container c, String s){JButton b = new JButton(s);if (s.equals("A"))b.setText("sqrt");else if (s.equals("B"))b.setText("1/x");else if (s.equals("C"))b.setText("%");else if (s.equals("D"))b.setText("+/-");b.setForeground(Color.blue);c.add(b);b.addActionListener(this);}/**以BorderLayout布局JApplet*/this.setLayout(new BorderLayout());this.add(p2, "North");this.add(p3, "Center");这样,就一切OK啦。

具体的实现代码可参见附件中的CalculateApplet.java文件。

3.2 带工具栏和状态栏的GridLayout/BorderLayout应用实例3.2.1实际问题在很多情况下我们需要动态设置工具栏和状态栏,看下面的应用实例:以上是在视图的工具栏和状态栏都被复选的时候,以下分别为某一个没选或都未选的情况。

3.2.2解决方法∙/**工具栏JToolBar采用从左开始的FlowLayout布局*/∙JToolBar toolBar = new JToolBar();∙toolBar.setBorderPainted(false); //不画边界∙ toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));∙∙/**窗体采用动态的BorderLayout布局,通过获取工具栏或状态栏的复选标记进行界面的动态调整*/∙JSplitPane splitPane = new JSplitPane();∙splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); //设置统计窗口分隔条的方向∙splitPane.setDividerLocation(300);//设置分隔条的位置∙splitPane.setOneTouchExpandable(true);∙JCheckBoxMenuItem toolBarItem = new JCheckBoxMenuItem("工具栏(T)", true);∙JLabel statusLabel = new JLabel("当前统计目标:");∙JCheckBoxMenuItem statusBarItem = new JCheckBoxMenuItem("状态栏(S)", true);∙∙/**设置系统窗体布局并动态设置工具栏和状态栏*/∙private void setLayout()∙ {∙if (toolBarItem.getState() &&am;' statusBarItem.getState()) ∙ {∙this.getContentPane().add(BorderLayout.NORTH, toolBar);∙this.getContentPane().add(BorderLayout.CENTER, splitPane);∙this.getContentPane().add(BorderLayout.SOUTH, statusLabel);∙ }∙else if (toolBarItem.getState() && !statusBarItem.getState()) ∙ {∙this.getContentPane().add(BorderLayout.NORTH, toolBar);∙this.getContentPane().remove(statusLabel);∙ }∙else if (statusBarItem.getState() && !toolBarItem.getState()) ∙ {∙this.getContentPane().add(BorderLayout.SOUTH, statusLabel);∙this.getContentPane().remove(toolBar);∙ }∙else if (!toolBarItem.getState() && !statusBarItem.getState()) ∙ {∙this.getContentPane().remove(toolBar);∙this.getContentPane().remove(statusLabel);∙ }∙this.show(); //添加或移去组件后刷新界面∙ }通过该方法即可实现界面的动态刷新与调整。

相关文档
最新文档