版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,2.3 使用布局管理器,主讲教师:董婷,2,一、知识能力目标,1. 理解容器的概念及层次; 2. 掌握常用布局管理器的使用; 3. 运用布局管理器设计布局美观的GUI程序,3,二、项目14 电子日历,显示2008年的电子日历,4,1.程序代码,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 a
2、rgs) 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); ); ,5,class CalendarBean/创建用于判断年月日之间关系的类CalendarBean String
3、 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; ,6,public String getCalendar() String a=new String42; Calendar 日历=Cal
4、endar.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) ,7,else day=28; for(int i=星期几,n=1;i星期几+day;i+) ai=Str
5、ing.valueOf(n); n+; return a; class CalendarFrame extends Frame implements ActionListener/创建日历界面类CalendarFrame Label labelDay=new Label42; Button titleName=new Button7; String name=日,一,二,三,四,五,六; Button nextMonth,previousMonth; int year=2008,month=2; CalendarBean calendar; Label showMessage=new Labe
6、l(,Label.CENTER);,8,public CalendarFrame() Panel pCenter=new Panel(); /创建pCenter面板 pCenter.setLayout(new GridLayout(7,7); /将pCenter的布局设置为7行7列的GridLayout布局 for(int i=0;i7;i+) titleNamei=new Button(namei); pCenter.add(titleNamei); for(int i=0;i42;i+) labelDayi=new Label(,Label.CENTER); pCenter.add(lab
7、elDayi); calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i42;i+) labelDayi.setText(dayi);,9,nextMonth=new Button(下月); previousMonth=new Button(上月); nextMonth.addActionListener(this); previousMonth.addActionListener(this);
8、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); /在窗口中心区域
9、添加scrollPane add(pNorth,BorderLayout.NORTH); /在窗口北面区域添加pNorth add(pSouth,BorderLayout.SOUTH); /在窗口南面区域添加pSouth ,10,public void actionPerformed(ActionEvent e) if(e.getSource()=nextMonth) /单击下月按钮时刷新日期 month=month+1; if(month12) month=1; calendar.setMonth(month); String day=calendar.getCalendar(); for(
10、int i=0;i42;i+) labelDayi.setText(dayi); else if(e.getSource()=previousMonth) /单击上月按钮时刷新日期 month=month-1; if(month1) month=12; calendar.setMonth(month); String day=calendar.getCalendar();,11,for(int i=0;i42;i+) labelDayi.setText(dayi); showMessage.setText(当前是:+calendar.getYear()+年+calendar.getMonth(
11、)+月); ,12,2.相关知识,流布局(FlowLayout) 呈水平放置,直到同一条线上再也没有适合的控件 对齐方式由 align 属性确定。可能的值为: LEFT RIGHT CENTER LEADING TRAILING,13,14,边界布局(BorderLayout) 对容器组件进行安排,并调整其大小,使其符合下列五个区域:南、北、东、西和中间区域,15,网格布局(GridLayout)以矩形网格形式对容器的组件进行布置 容器被分成大小相等的矩形,一个矩形中放置一个组件,16,卡片布局(CardLayout)将容器中的每个组件看作一张卡片,17,三、项目15 使用网格袋布局,使用网格
12、袋布局管理器,将窗体中的控件进行如图布局设计,18,1.程序代码,import java.awt.*; import java.awt.event.*; import javax.swing.*; class GBC extends GridBagConstraints private static final long serialVersionUID = 6657272964185905015L; /设置网格座标参数 public GBC(int x, int y) this.gridx = x; this.gridy = y; /设置网格座标和占的网格数 public GBC(int g
13、ridx, int gridy, int gridwidth, int gridheight) this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight;,19,public GBC setAnchor(int anchor) this.anchor = anchor; return this; public GBC setFill(int fill) this.fill = fill; return this; /设置单元网格大小 public GBC se
14、tWeight(double weightx, double weighty) this.weightx = weightx; this.weighty = weighty; return this; /设置网格之间的相互距离 public GBC setInset(int distance) this.insets = new Insets(distance, distance, distance, distance); return this;,20,/设置网格之间的相互距离 public GBC setInset(int top, int left, int bottom, int ri
15、ght) this.insets = new Insets(top, left, bottom, right); return this; /设置网格的初始位置 public GBC setIpad(int ipadx, int ipady) this.ipadx = ipadx; this.ipady = ipady; return this; public class GridBagLayoutTest extends JFrame /* 序列化序号 private static final long serialVersionUID = 6763277356654198370L; pub
16、lic GridBagLayoutTest() this.setTitle(“GridBagLayoutTest”); / 窗体标题 this.setSize(400, 150); / 窗体大小,21,/ 设置窗体居中显示在屏幕上 Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation(int) (size.getWidth() - this.getWidth() / 2, (int) (size.getHeight() - this.getHeight() / 2); / 初始化窗口面板 t
17、his.initial(); / 设置窗体为不可改变大小 this.setResizable(false); / 设置窗体为显示 this.setVisible(true); /初始化窗体上的面板 public void initial() JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout(); / 设置所有控件所占网格的大小,位置,座标,对齐方式,22,panel.add(new JScrollPane(new JTextArea(), new GBC(0, 0, 2, 3) .setWeight(10, 0).se
18、tFill(GBC.BOTH); panel.add(new JButton(按钮一), new GBC(2, 0, 2, 1).setWeight(5, 0) .setFill(GBC.BOTH); panel.add(new JButton(按钮二), new GBC(2, 1).setWeight(5, 0).setFill( GBC.BOTH); panel.add(new JButton(按钮三), new GBC(3, 1).setWeight(5, 0).setFill( GBC.BOTH); panel.add(new JComboBox(new String 组合框 ), n
19、ew GBC(2, 2, 2, 1) .setWeight(5, 0).setFill(GBC.BOTH); panel.add(new JTextField(单行文本框), new GBC(0, 3, 4, 1).setWeight(5, 0).setFill(GBC.BOTH); this.setLayout(new BorderLayout(); this.getContentPane().add(panel, BorderLayout.CENTER); ,23,public static void main(String args) / 匿名内部类,为窗口注册事件 new GridBa
20、gLayoutTest().addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); ,24,2.相关知识GridBagLayout类,25,GridBagConstraints类,26,27,28,fill NONE:不调整组件大小。 HORIZONTAL:加宽组件,使它在水平方向上得以填满其显示区域,但是不改变高度。 VERTICAL:加高组件,使它在垂直方向上得以填满其显示区域,但是不改变宽度。 BOTH:使组件完全填满其显示区域 anchor 可能的值有两种:相对和绝对 相对值的解释是相对于容器的组件方向属性 PAGE_START、PAGE_END、LINE_START、LINE_END、FIRST_LINE_START、FIRST_LINE_END、LAST_LINE_START 和 LAST_LINE_END。 绝对值则不然 CENTER、NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST 和 NORTHWEST 默认值为 CENTER,29,Insets 对象是容器边界的表示形式 它指定容器必须在其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 质量监控供货无忧
- 购销合同的简单写法
- 购销合同管理的方法探讨
- 超值木板购销合同
- 车辆服务合同的续签
- 践行禁毒责任的承诺
- 连带责任担保借款合同格式
- 退役军人的服务承诺书
- 采购合同中的合规培训
- 采购质量保证书解析
- 2024茶山茶叶种植基地合作协议
- 北京市朝阳区农村集体资产租赁合同书
- 浙江省初中名校发展共同体期中联考2024-2025学年七年级上学期11月期中数学试题(含答案)
- 2023年广州市白云区在珠海招聘中小学事业编制教师笔试真题
- 2024-2030年全球及中国松香药芯焊锡丝行业产销状况及投资前景预测报告
- 宪法课件幻灯教学课件
- 新修订《中华人民共和国保守国家秘密法》竞赛题库
- 幼儿园园安全培训
- 高中英语完形填空试题(有答案和解析)及解析
- 旧平房拆除施工方案
- RBA管理体系程序文件(系列)
评论
0/150
提交评论