java高级组件GUI设计.ppt
《java高级组件GUI设计.ppt》由会员分享,可在线阅读,更多相关《java高级组件GUI设计.ppt(83页珍藏版)》请在三一办公上搜索。
1、第11章 高级组件GUI设计,第11章 高级组件GUI设计,11.1 界面布局管理11.2 键盘事件(KeyEvent)11.3 鼠标事件(MouseEvent)11.4 窗口与面板11.5 菜单设计11.6 对话框设计,11.1 界面布局管理,布局管理是对容器上组件的位置进行布置5种布局管理FlowLayoutBorderLayoutCardLayoutGridLayoutBoxLayout其它:DefaultMenuLayout,GridBagLayout,GroupLayout.,11.1.1 FlowLayout,类是类的直接子类。FlowLayout的布局策略是将容器中的组件按照加入
2、的先后顺序从左向右排列,当一行排满之后就转到下一行继续从左至右排列,每一行中的组件都居中排列。FlowLayout是Applet缺省使用的布局编辑策略。,FlowLayout的构造方法,FlowLayout()FlowLayout(int align)FlowLayout(int align,int hgap,int vgap)align的值:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEADING 或 FlowLayout.TRAILING,11.1.2 BorderLayout,BorderLayout布局策
3、略是把容器内的空间划分为东、西、南、北和中五个区域。这五个区域分别用字符串常量EAST、WEST、SOUTH、NORTH和CENTER表示。BorderLayout类有两个构造方法BorderLayout()BorderLayout(int hgap,int vgap),public class c11_1 extends JApplet implements ActionListener JButton bt1=new JButton(北部),bt2=new JButton(西部),bt3=new JButton(东部),bt4=new JButton(南部);JLabel lb1=new
4、JLabel(中部);Container cp=getContentPane();public void init()cp.setLayout(new BorderLayout(10,10);cp.add(North,bt1);/将bt1放置北部bt1.addActionListener(this);cp.add(West,bt2);/obsoletebt2.addActionListener(this);cp.add(East,bt3);/将bt3放置东部bt3.addActionListener(this);,【示例程序c11_1.java】,cp.add(South,bt4);/将bt4
5、放置南部bt4.addActionListener(this);cp.add(Center,lb1);public void actionPerformed(ActionEvent e)if(e.getSource()=bt1)lb1.setText(按钮1);else if(e.getSource()=bt2)lb1.setText(按钮2);else if(e.getSource()=bt3)lb1.setText(按钮3);else lb1.setText(按钮4);,【示例程序c11_1.java】,11.1.3 CardLayout,CardLayout的版面布局方式是将每个组件看成
6、一张卡片,如同扑克牌一样将组件堆叠起来,而显示在屏幕上的每次只能是最上面的一个组件,这个被显示的组件将占据所有的容器空间。构造方法CardLayout()CardLayout(int hgap,int vgap),表11.1 CardLayout类的常用成员方法,public class c11_2 extends JApplet implements ActionListener JButton bt1=new JButton(按钮A);JButton bt2=new JButton(按钮B);JButton bt3=new JButton(按钮C);Container cp=getCont
7、entPane();CardLayout card=new CardLayout(20,20);public void init()cp.setLayout(card);cp.add(a,bt1);cp.add(b,bt2);cp.add(c,bt3);card.next(cp);/显示按钮B bt1.addActionListener(this);bt2.addActionListener(this);bt3.addActionListener(this);,【示例程序c11_2.java】,public void actionPerformed(ActionEvent e)if(e.get
8、ActionCommand()=按钮A)|(e.getSource()=bt2)|(e.getSource()=bt3)card.next(cp);,【示例程序c11_2.java】,11.1.4 GridLayout,GridLayout的布局策略是把容器的空间划分为若干行、若干列的网格区域,而每个组件按添加的顺序从左向右、从上向下地占据这些网格。三个构造方法如下:GridLayout():默认1行1列GridLayout(int rows,int cols)GridLayout(int rows,int cols,int hgap,int vgap):,public class c11_3
9、 extends JApplet Container cp=getContentPane();public void init()/设置GridLayout布局 GridLayout myLayout=new GridLayout(2,2,20,30);cp.setLayout(myLayout);cp.add(new JButton(按钮A);cp.add(new JButton(按钮B);cp.add(new JButton(按钮C);cp.add(new JTextArea(文本区);,11.1.5 BoxLayout,BoxLayout是swing所提供的布局管理器BoxLayout只
10、有两种排列方式,一种是水平,另一种是垂直。我们可以使用BoxLayout所提供的两个常量X_AXIS、Y_AXIS来指明组件在容器中是水平还是垂直排列的。BoxLayout类与Box类结合,Box容器的默认布局是BoxLayout,而且只能使用这个布局构造方法:BoxLayout(Container target,int axis)Box(int axis),表11.2 BoxLayout类常用的成员方法,Box类,Box类提供了4种透明组件Glue、Strut、Rigid和Filler,可以将这些透明组件插入其他组件的中间,使这些组件产生分开的效果。Glue:将Glue两边的组件挤到容器的两
11、端。Strut:将Strut两端的组件按水平或垂直方向指定的大小分开。Rigid:可以设置二维的限制,将组件按水平或垂直方向指定的大小分开。Filler:不仅可以设置二维的限制,将组件按水平或垂直方向指定的大小分开,而且还可以设置最大、较佳、最小的长宽大小。,使用BoxLayout时需要注意的事项,(1)当组件按BoxLayout布局排列好后,不管窗口缩小或放大都不会变动。(2)当使用水平排列方式时,若放进去的组件不等高,则系统将会使所有的组件与最高组件等高。(3)当放在同一行的组件超出容器的宽度时,系统不会自动换行,需要用户自行处理。,public class c11_4 extends J
12、Applet public void init()Container cp=getContentPane();Box bBox=Box.createHorizontalBox();cp.add(bBox);/将bBox容器添加到cp对象中/bBox中放入vBox1容器 Box vBox1=Box.createVerticalBox();JLabel lb=new JLabel(这是标签);vBox1.add(lb);/添加标签到vBox1中 JButton bt1=new JButton(这是按钮1);bt1.setMaximumSize(new Dimension(100,200);vBox
13、1.add(bt1);/添加按钮到vBox1中 bBox.add(vBox1);/添加vBox1到bBox中,/bBox中放入vBox2容器 Box vBox2=Box.createVerticalBox();bBox.add(vBox2);JTextField tf1=new JTextField(这是文本框,10);/设置文本框在容器中沿X方向居中对齐 tf1.setAlignmentX(Component.CENTER_ALIGNMENT);tf1.setMaximumSize(new Dimension(150,50);vBox2.add(tf1);/vBox2容器中放入vBox2h容
14、器 Box vBox2h=Box.createHorizontalBox();vBox2.add(vBox2h);/vBox2h容器中放入vBox2h1 Box vBox2h1=Box.createVerticalBox();,/加入垂直透明组件Strut,间隔为20像素 vBox2h1.add(Box.createVerticalStrut(20);vBox2h1.add(new JTextArea(这是文本区域,15,10);vBox2h1.add(Box.createVerticalStrut(20);vBox2h.add(vBox2h1);/vBox2h容器中放入vBox2h2 Box
15、 vBox2h2=Box.createVerticalBox();vBox2h2.add(new JButton(这是按钮2);vBox2h2.add(Box.createVerticalGlue();vBox2h2.add(new JButton(这是按钮4);vBox2h.add(vBox2h2);,图11.5 图形层次结构,11.2 键盘事件(KeyEvent),KeyEvent事件接口:KeyListener,或者是继承KeyAdapter的子类。注册监听器方法:addKeyListener(KeyListener l)KeyListener接口中有如下三个事件:keyPressed(
16、KeyEvent e);代表键盘按键被按下的事件。keyReleased(KeyEvent e);代表键盘按键被放开的事件。keyTyped(KeyEvent e);代表按键被敲击的事件。,11.2 键盘事件(KeyEvent),KeyEvent类中的常用方法有:public char getKeyChar()方法,它返回引发键盘事件的按键对应的Unicode字符。如果这个按键没有Unicode字符与之对应,则返回KeyEvent类的一个静态常量KeyEvent.CHAR-UNDEFINED。public String getKeyText()方法,它返回引发键盘事件的按键的文本内容。,pub
17、lic class c11_5 extends Japplet String s,s1;JLabel lb1=new JLabel(请按键盘);JLabel lb2=new JLabel(复制结果);JTextField tf1=new JTextField(10);/用来输入文字 JTextArea tf2=new JTextArea(5,10);Container cp=getContentPane();FlowLayout flow=new FlowLayout(FlowLayout.CENTER,5,5);public void init()cp.setLayout(flow);cp.
18、add(lb1);cp.add(tf1);cp.add(lb2);cp.add(tf2);tf1.addKeyListener(new koLis();,【示例程序c11_5.java】,class koLis extends KeyAdapter public void keyTyped(KeyEvent e)s=tf1.getText()+e.getKeyChar();if(e.getKeyChar()=n)s1=tf2.getText()+s;tf1.setText();tf2.setText(s1);,【示例程序c11_5.java】,抽象适配器类:KeyAdapter,11.3 鼠标
19、事件(MouseEvent),鼠标事件MouseEvent接口MouseListener和MouseMotionListener,或者是继承MouseAdapter的子类。,表11.5 MouseEvent类的常用成员方法,public class c11_6 extends JApplet int x,y;JLabel lb1=new JLabel(X:),lb2=new JLabel(Y:),lb3=new JLabel();JTextField tf1=new JTextField(5),tf2=new JTextField(5);Container cp=getContentPane(
20、);FlowLayout flow=new FlowLayout(FlowLayout.CENTER,5,5);public void init()cp.setLayout(flow);cp.add(lb1);cp.add(tf1);cp.add(lb2);cp.add(tf2);cp.add(lb3);,【示例程序c11_6.java】,addMouseListener(new mouseListener();addMouseMotionListener(new koLis();class mouseListener implements MouseListener public void
21、mouseClicked(MouseEvent e)lb3.setText(点击鼠标);public void mousePressed(MouseEvent e)lb3.setText(鼠标按钮按下);public void mouseEntered(MouseEvent e)lb3.setText(鼠标进入窗口);public void mouseExited(MouseEvent e)lb3.setText(鼠标不在窗口);public void mouseReleased(MouseEvent e)lb3.setText(鼠标按钮松开);,【示例程序c11_6.java】,class
22、koLis implements MouseMotionListener public void mouseMoved(MouseEvent e)x=e.getX();y=e.getY();tf1.setText(String.valueOf(x);tf2.setText(String.valueOf(y);public void mouseDragged(MouseEvent e)lb3.setText(拖动鼠标);,【示例程序c11_6.java】,11.4 窗 口 与 面 板,11.4.1 JFrame容器JFrame是Java Application程序的图形用户界面容器,是一个有边框
23、的容器。主要方法JFrame()、JFrame(String title);getTitle()、setTitle(String);setSize(int x,int y)、show()、setVisible(boolean),11.4.1 JFrame容器,JFrame类可以引发WindowEvent类代表的所有七种窗口事件(见表11.8)关闭窗口的操作不能通过点击关闭图标来实现,需要调用System.exit(0)或调用方法setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,public class c11_7 implements Action
24、Listener public c11_7()JFrame.setDefaultLookAndFeelDecorated(true);JFrame f=new JFrame(这是一个JFrame);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cp=f.getContentPane();JButton bt1=new JButton(请点击);bt1.addActionListener(this);cp.add(bt1);f.pack();/调整窗口 f.setVisible(true);/视窗口为可见,【示例程序c11_
25、7.java】,public void actionPerformed(ActionEvent e)JLabel lb=new JLabel(这是第二个窗口);JFrame.setDefaultLookAndFeelDecorated(true);JFrame nf=new JFrame();Container cp1=nf.getContentPane();nf.setTitle(这是一个新JFrame);nf.setSize(180,100);/设置窗口大小 nf.setVisible(true);cp1.add(lb);nf.addWindowListener(new WinLis();



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 高级 组件 GUI 设计

链接地址:https://www.31ppt.com/p-6510346.html