资源预览内容
第1页 / 共78页
第2页 / 共78页
第3页 / 共78页
第4页 / 共78页
第5页 / 共78页
第6页 / 共78页
第7页 / 共78页
第8页 / 共78页
第9页 / 共78页
第10页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
主讲教师 张 智 计算机学院网络工程系Java编程技术9 Swing UI编程9.1 JFrame框架 9.2 布局管理器 9.3 常用组件Java编程技术9.1 JFrame框架n JFrame是一个顶层容器,主要用来设计应用程序的图形 用户界面。 n JFrame支持多线程。Java编程技术创建过程1. New Other MyEclispe Swing Matisse Form 2. 选择JFrame。Java编程技术public class helloJFrame extends javax.swing.JFrame public helloJFrame() initComponents(); private void initComponents() setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane();getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400,Short.MAX_VALUE);layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 300,Short.MAX_VALUE);pack();public static void main(String args) java.awt.EventQueue.invokeLater(new Runnable() public void run() new helloJFrame().setVisible(true); ); 构造函数javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane();getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400,Short.MAX_VALUE);layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 300,Short.MAX_VALUE);pack();布局管理启动多线程显示窗口继承JFramehelloJFrame.javaJava编程技术属性方法功能构造函数:JFrame()创建一个没有标题的框架构造函数:JFrame(String title)创建一个有标题的框架titlesetTitle()设置窗口标题defaultCloseOperationsetDefaultCloseOperation(int option)设置窗口关闭时执行的操作,取值: EXIT_ON_CLOSE (结束程序) 默认 DISPOSE_ON_CLOSE (回收窗口) HIDE_ON_CLOSE (隐藏窗口) DO_NOTHING_ON_CLOSE (无作为)alwaysOnTopsetAlwaysOnTop(true)设置窗口显示是总是最前端backgroundsetBackground(new Color(255, 0, 0); 或者直接 setBackground(Color.Red);设置窗口背景色cursorsetCursor( new Cursor(Cursor.HAND_CURSOR);设置光标JFrame常用属性和方法注意:设置JFrame的背景颜色,仍然会被内容面板盖住,不如设置内容面板的背景颜色: getContentPane().setBackground(Color.Red);Java编程技术属性方法功能resizablesetResizable(boolean)设置窗口是否可以调整大小,默认可调 注: 为false时窗口最大化不能用setVisible(boolean)显示(true)和(false)隐藏窗口 (不推荐使用show()/hide()方法)setSize(int width, int height)设置窗口大小,窗口的默认位置(0,0)。setBounds(int x, int y,int width, int height)设置出现在屏幕上的位置,前两个参数( x,y)坐标,后两个参数是宽度和高度pack()按照组件的大小自动适配容器大小getContentPane()获得窗口的内容面板JFrame常用属性和方法(续)单独使用setSize()时 ,是按照设置的大小 显示的;此时不能使 用pack(),否则自动适 配内容面板:JFrame一旦创建,在其中就 已经包含一个内容面板,一般往JFrame 中添加组件时,都加在内容面板中Java编程技术补充:JFrame屏幕居中/全屏代码import java.awt.Dimension; import java.awt.Toolkit;Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); t.setSize(400,400); / t为JFrame对象 Dimension frameSize = t.getSize(); t.setLocation( (screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); t.setVisible(true); 全屏显示: t.setBounds(0, 0, screenSize.width, screenSize.height);Java编程技术补充:JFrame无边框代码setUndecorated(true); 注意:setUndecroated方法必须在setVisible之前被执行,一定要确 保Frame窗口是新创建并且没有做过任何显示,甚至是pack动作也不能做过,否则会得到一个异常。Java编程技术多窗口示例n 再新建一个JFrame(命名为JFrame2.java),设置n 在第一个JFrame中添加一个成员变量,如:n private newJFrame =new JFrame2 ();n 在第一个JFrame中添加一个JButton,右击按钮添,加一个单击事件 (Events Action actionPerformed方法)和代码:n newJFrame.setTitle(“第二个窗口“);n newJFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);n newJFrame.setVisible(true); 【Return】Java编程技术9.2 布局管理器n 容器中可以容纳组件,在往容器中添加多个组件时,要考 虑这些组件在容器中的布局。 n 由于Java是跨平言,使用绝对坐标会导致问题:即在 不同平台、不同分辨率下的显示效果不一样。 n 为了实现跨平台的特性并且获得动态的布局效果,Java将 容器内的所有组件安排给一个“布局管理器”负责管理。Java编程技术Java提供的布局管理器类n BorderLayout n FlowLayout n GirdLayout n CardLayout n BoxLayout n GirdBagLayout n GroupLayout (Matisse Form默认)【Return】Java编程技术BorderLayout布局n BorderLayout 把容器空间划分为东、西、南、北、中5个区域。n BorderLayout.EAST BorderLayout.WESTn BorderLayout.SOUTH BorderLayout.NORTHn BorderLayout.CENTERn BorderLayout是顶层容器(JFrame/Jdialog/JApplet)默认的布局管理器。Java编程技术BorderLayout布局用法示例n BorderLayout构造函数: n BorderLayout():创建一个组件之间没有水平和垂直间距的 BorderLayout布局。 n BorderLayout(int hgap, int vgap):通过参数hgap和vgap分别设定 组件的水平和垂直间距。n JFrame使用 setLayout(new BorderLayout() 方法来创建 布局管理器。n 当需要在使用BorderLayout布局的容器中添加组件时,可 用add方法,例如:add(组件, BorderLayout.EAST); /将组件放在东边Java编程技术testBorderLayout.javapackage testSwing; import java.awt.BorderLayout; import javax.swing.*; public class testBorderLayout extends JFrame public testBorderLayout()/ this.setLayout(new BorderLayout(5,5); 设置组件间水平和垂直间距this.add(new JButton(“东“),BorderLayout.EAST);this.add(new JButton(“西“),BorderLayout.WEST);this.add(new JButton(“南“),BorderLayout.SOUTH);this.add(new JButton(“北“),BorderLayout.NORTH);this.add(new JButton(“中“),BorderLayout.CENTER);public static void main(String args) testBorderLayout frame=new testBorderLayout();frame.setTitle(“testBorderLayout“); /设置标题frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置窗口关闭操作/frame.setSize(300,400); /设置窗口的宽和高frame.setBounds(100,100,300,400); /设置窗口初始位置和宽高frame.setVisible(true); /显示窗口 手工写的class不使用 Matisse Form创建往容器中添加组件 并配置布局【Return】Java编程技术FlowLayout布局n FlowLayout布局管理器把容器看成一个行集,好象平时在一张纸上写字一样,一行写满就换下一行。n 默认情况下组件按添加的先后顺序从左至右摆放,如果一 行排满,则在下一行中继续。默认情况下,容
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号