2.3 使用布局管理器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void addLayoutComponent(Strin 将指定的组件添加到布局中 g name, Component comp)
void 设置此布局的对齐方式 setAlignment(int align) void setHgap(int hgap) void setVgap(int vgap) int getAlignment() int getHgap() int getVgap() 设置组件之间以及组件与 Container 的边之间的水平间隙 设置组件之间以及组件与 Container 的边之间的垂直间隙 获取此布局的对齐方式 获取组件之间以及组件与 Container 的边之间的水平间隙 获取组件之间以及组件与 Container 的边之间的垂直间隙
nextMonth=new Button("下月"); previousMonth=new Button("上月"); nextMonth.addActionListener(this); previousMonth.addActionListener(this); Panel pNorth=new Panel(),pSouth=new Panel(); pNorth.add(previousMonth); pNorth.add(nextMonth); pSouth.add(showMessage); showMessage.setText("当前 是:"+calendar.getYear()+"年"+calendar.getMonth()+"月"); ScrollPane scrollPane=new ScrollPane(); scrollPane.add(pCenter); add(scrollPane,BorderLayout.CENTER); //在窗口中 心区域添加scrollPane add(pNorth,BorderLayout.NORTH); //在窗口北面区 域添加pNorth add(pSouth,BorderLayout.SOUTH); //在窗口南面 区域添加pSouth }
2.3 使用布局管理器
主讲教师:董婷
一、知识能力目标 知识能力目标
1. 理解容器的概念及层次; 2. 掌握常用布局管理器的使用; 3. 运用布局管理器设计布局美观的GUI程序
二、项目14 电子日历
显示2008年的电子日历
import java.util.Calendar; import java.util.*; import java.awt.*; import java.awt.event.*; import java.applet.*; public class CalendarMainClass { public static void main(String args[]){ CalendarFrame frame=new CalendarFrame(); frame.setBounds(100,100,360,300); //设置窗体位置大小 frame.setVisible(true); //设置窗体可见 frame.validate(); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); }}
public CalendarFrame(){ Panel pCenter=new Panel(); //创建pCenter面板 pCenter.setLayout(new GridLayout(7,7)); //将 pCenter的布局设置为7行7列的GridLayout布局 for(int i=0;i<7;i++){ titleName[i]=new Button(name[i]); pCenter.add(titleName[i]); } for(int i=0;i<42;i++){ labelDay[i]=new Label("",Label.CENTER); pCenter.add(labelDay[i]);} calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); String day[]=calendar.getCalendar(); for(int i=0;i<42;i++){ labelDay[i].setText(day[i]);}
for(int i=0;i<42;i++){ labelDay[i].setText(day[i]); } } showMessage.setText("当前 是:"+calendar.getYear()+"年 "+calendar.getMonth()+"月"); } }
2.相关知识
流布局(FlowLayout) 呈水平放置,直到同一条线上再也没有适合的控件 对齐方式由 align 属性确定。可能的值为: LEFT RIGHT CENTER LEADING TRAILING 方法 主要功能 FowLayout() 生成一个默认的流式布局 FlowLayout(int alignment) FlowLayout(int alignment,int horz,int vert) 可以设定每一行组件的对齐方 式 可以设定对齐方式以及通过参 数horz和vert分别设定组件的 水平和垂直间距
卡片布局(CardLayout)将容器中的每个组件看作一张卡片 方法 CardLayout() CardLayout(int hgap, int vgap) void addLayoutComponent(Co mponent comp, Object constraints) void next(Container parent) void previous(Container parent) void first(Container parent) void last(Container parent) void show(Container parent,String name) 主要功能 创建一个间距大小为 0 的新卡片布局 创建一个具有指定水平间距和垂直间距 的新卡片布局 将指定的组件添加到此卡片布局的内部 名称表 翻转到指定容器的下一张卡片 翻转到指定容器的前一张卡片 翻转到容器的第一张卡片 翻转到容器的最后一张卡片 翻转到使用addLayoutComponent添加 到此布局的具有指定name的组件
public void actionPerformed(ActionEvent e){ if(e.getSource()==nextMonth){ //单击下月按钮 时刷新日期 month=month+1; if(month>12) month=1; calendar.setMonth(month); String day[]=calendar.getCalendar(); for(int i=0;i<42;i++){ labelDay[i].setText(day[i]); } } else if(e.getSource()==previousMonth){ //单击上月 按钮时刷新日期 month=month-1; if(month<1) month=12; calendar.setMonth(month); String day[]=calendar.getCalendar();
1.程序代码
Fra Baidu bibliotek
class CalendarBean{//创建用于判断年月日之间关系的类 CalendarBean String day[]; int year=2008,month=0; public void setYear(int year){ //设置年份的方法 this.year=year; } public int getYear(){ //获得年份的方法 return year; } public void setMonth(int month){ //设置月份的方法 this.month=month; } public int getMonth(){ //获得月份的方法 return month; }
public String[] getCalendar(){ String a[]=new String[42]; Calendar 日历=Calendar.getInstance(); 日历.set(year,month-1,1); int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1; int day=0; if(month==1||month==3||month==5||month==7||month==8|| month==10||month==12){ day=31; } if(month==4||month==6||month==9||month==11){ day=30; } if(month==2){ //判断月份是否为2月 if(((year%4==0)&&(year%100!=0))||(year%400==0)){//判断 是否为闰年 day=29; }
网格布局(GridLayout)以矩形网格形式对容器的组件进行布置 容器被分成大小相等的矩形,一个矩形中放置一个组件 方法 GridLayout ( ) GridLayout(int row,int col) GridLayout(int row,int col,int horz,int vert) void addLayoutComponent( String name, Component comp) void setColumns(int cols) void setRows(int rows) int getColumns() int getRows() 主要功能 生成一个单列的网格布局。默认无间 隙。 生成一个设定行数和列数的网格布局 可以设置组件之间的水平和垂直间隔 将具有指定名称的指定组件添加到布 局 将此布局中的列数设置为指定值 将此布局中的行数设置为指定值 获取此布局中的列数 获取此布局中的行数
else{ day=28; } } for(int i=星期几,n=1;i<星期几+day;i++){ a[i]=String.valueOf(n); n++; } return a; } } class CalendarFrame extends Frame implements ActionListener{//创建 日历界面类CalendarFrame Label labelDay[]=new Label[42]; Button titleName[]=new Button[7]; String name[]={"日","一","二","三","四","五","六"}; Button nextMonth,previousMonth; int year=2008,month=2; CalendarBean calendar; Label showMessage=new Label("",Label.CENTER);
边界布局(BorderLayout) 对容器组件进行安排,并调整其大小,使其符合下列五个区 域:南、北、东、西和中间区域 方法 主要功能 BorderLayout( ) BorderLayout (int hgap, int vgap) void addLayoutComponent( Component comp, Object constraints) void setHgap(int hgap) void setVgap(int vgap) int getHgap() int getVgap() 构造一个组件之间没有间距的新边框布 局 构造一个具有指定组件间距的边框布局 使用指定的约束对象将指定组件添加到 布局中 设置组件之间的水平间隙 设置组件之间的垂直间隙 获取组件之间的水平间隙 获取组件之间的垂直间隙