JAVA SWING重难点
更新时间:2023-12-05 02:31:01 阅读量: 教育文库 文档下载
- java是什么意思推荐度:
- 相关推荐
? 教学重点与难点: ? 框架的组成及外观 ? 在框架中显示文本和图形 ? 字体和颜色的设置 ? Java的事件处理机制
? 窗口事件、焦点事件、键盘事件、鼠标事件的处理 ? Swing各种组件的用法 ? 9.1图形用户界面设计概述 ? 9.1.1 GUI支持包和简单GUI程序例 ? 1.java.awt包
? Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置
字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。 ? 2. javax.swing包
? Swing包是Java基础类库(Java Foundation Classes,JFC)的一部分。Swing提供了从按钮到
可分拆面板和表格的所有组件。
? Swing组件是Java语言提供的第二代GUI设计工具包,它以AWT为基础,在AWT内容的基础上新
增或改进了一些GUI组件,使得GUI程序功能更强大,设计更容易、更方便。\是开发新组件的项目代码名,现在,这个名字常用来引用新组件和相关的API。
? AWT组件和对应的Swing组件,从名称上很容易记忆和区别。例如,AWT的框架类、面板类、按钮
类和菜单类,被命名为Frame、Panel、Button和Menu,而Swing对应的组件类被命名为JFrame、JPanel、JButton和JMenu。与AWT组件相比,Swing组件的名前多一个 “J” 字母。另外,AWT 组件在java.awt包中,而Swing组件在javax.swing包中。 ? 简单图形用户界面 ? 类 JFrame
? frame 是带有标题和边界的顶层窗口,frame 的大小包括边界指定的所有区域,frame 的默认布
局为 BorderLayout。
? 如前所述,与AWT组件不同,Swing组件不直接添加到顶层容器中,它必须添加到一个与Swing
顶层容器相关联的内容面板上。对JFrame添加组件有两种方式: ? ? 类 JFrame
? (1)使用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:
frame.getContentPane().add(childComponent); ? 其中“childComponent”为基本组件。
? (2)构造一个Jpanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用
setContentPane()方法把该容器置为JFrame的内容面板: ? Jpanel pnlMain=new Jpanel( );//构造一个面板为中间容器 ? ??//把其它组件添加到Jpanel中;
? frame.setContentPane(pnlMain);//把contentPane对象设置成为frame的内容面板 ? 构造方法 ? JFrame()
构造一个初始时不可见的新窗体。JFrame(String title) 创建一个新的、初始不可见的、具有指定标题的 Frame。 ? 方法
? getContentPane()
返回此窗体的 contentPane 对象(内容面板,组件要添加到此) ? getJMenuBar()
返回此窗体上设置的菜单栏。
? setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated)
提供一个关于新创建的 JFrame 是否应该具有当前外观为其提供的 Window 装饰(如边框、关闭窗口的小部件、标题等等)的提示。 ? setIconImage(Image image)
设置要作为此窗口图标显示的图像。 ? 方法
? setJMenuBar(JMenuBar menubar)
设置此窗体的菜单栏。 ? 其他继承的方法(和awt的frame一样)
? public void setBounds(int a,intb,int width,int heigth)
public void setSize(int width,int heigth) public void setLocation(int x,int y) public void setVisible(boolean b)
public void setResizable(boolean b)//是否允许调大小 jFrame.setUndecorated(true);
// 这样就可以去掉Jframe中对window的装饰了,无标题栏 ? 练习1建立一个有标题可以关闭的JFrame(ch9_1.java) ? import java.awt.*; ? import java.awt.event.*; ? import javax.swing.*;
? public class ch9_1 extends JFrame ? {
? public ch9_1() ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
//标题
super(\我的第一个JFrame窗口\//设置大小和位置
setBounds(20,20,500,300); //点击关闭按钮可以关闭窗口
addWindowListener(new WindowAdapter() { }); /*
//第二种方法 点击关闭按钮可以关闭窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); */
public void windowClosing(WindowEvent e) { }
System.exit(0);
? public static void main(String [] args) ? { ? ? ? } ? }
? 练习2建立一个带有左上角图标的窗口(ch9_2.java) ? import javax.swing.*;
? import javax.swing.ImageIcon.*; ? public class ch9_2 extends JFrame ? {
? public ch9_2() ? { ? ? ? ? ? ? ? ? ? ? }
? public static void main(String [] args) ? { ? ? ? } ? }
? 练习3建立一个没有最大化按钮的窗口(ch9_3.java) ? import javax.swing.*;
? public class ch9_3 extends JFrame ? {
? public ch9_3() ? { ? ? ? ? ? ? ? ? ?
//标题
super(\测试图标\//设置大小和位置
setBounds(20,20,500,300); //点击关闭按钮可以关闭窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //去掉最大化按钮 setResizable(false);
ch9_2 f=new ch9_2(); f.show(); //标题
super(\测试图标\//设置大小和位置
setBounds(20,20,500,300); //点击关闭按钮可以关闭窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //加入图标
ImageIcon icon=new ImageIcon(\setIconImage(icon.getImage()); ch9_1 f=new ch9_1(); f.show();
? }
? public static void main(String [] args) ? { ? ? ? } ? }
? 练习4去掉窗口的标题栏(ch9_4.java) ? import javax.swing.*;
? public class ch9_4 extends JFrame ? {
? public ch9_4() ? { ? ? ? ? ? ? ? ?
没有 ? }
? public static void main(String [] args) ? { ? ? ? } ? }
? swing的版面结构
? 每个使用Swing组件的程序至少是在一个顶层容器之上的。顶层容器是整个GUI程序的层次结构
中处于根的位置。
? 注:JApplet是基于Swing的applet中使用的顶层容器。
? 通过顶层容器可以得到一个内容面板(ContentPane)对象,用来放置图形组件。 frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
? 图形界面上的组件都是加载到这个面板上才得以显示的。 contentPane.add(someComponent, BorderLayout.CENTER);
? swing的版面结构
? 观察一下你常看到的windows系统中的软件,从理论上讲,每个软件的界面上都应该有一个菜单
栏。在Swing中我们通常是把JMenuBar对象加载到顶层容器中。
frame.setJMenuBar(greenMenuBar);
? 顶层容器包含一个透明的中间容器,叫做root面板。这个面板管理内容面板和菜单栏,在内容面
板上面我们还可以放置其他子面板,在面板上放置其他图形组件。它们的层次结构关系如下图所示:
ch9_4 f=new ch9_4(); f.show(); //标题
super(\测试图标\//设置大小和位置
setBounds(20,20,500,300); //点击关闭按钮可以关闭窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置外观
setUndecorated(true);//这句可以禁用最小化、最大化、关闭按钮,并且令窗体连边界也ch9_3 f=new ch9_3(); f.show();
? swing的版面结构 ? swing的版面结构
? RootPaneContainer这个界面(Interface),此界面定义了各种容器取得与设置并不是真实的容器,
它是由Glass Pane与Layered Pane所组成(Layered Pane里拥有Content Pane与Menu Bar,而Menu Bar可选择使用或不使用),我们不能在JRootPane上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层组件上加入组件,必须加在Layered Pane或是Layered Pane里的Content Pane上。以JFrame为例,一般我们要在JFrame上加入其他组件(如JButton、JLabel等)必须先取得JFrame的Content Pane,然后将要加入的组件放在此Content Pane中,而不是直接就加到JFrame上。因此若要在JFrame中加入一个按钮,一般要先取得JFrame的Content Pane,然后将按钮加入Content Pane中,如:
frame.getContentPane().add(button) ? 一个Java GUI简单程序
? 【例】一个简单的Swing GUI应用程序。在一个框架窗口中显示两个标签和一个按钮:上面的标
签显示一串固定的文字信息,选择按钮后在下面的标签上显示系统现在的时间。
? import java.awt.*; ? import java.awt.event.*; ? import javax.swing.*; ? import java.util.*;
? // 继承JFrame类并实现ActionListener接口 ? public class SwingDemo extends JFrame implements ? ActionListener{
? JButton b1; // 声明按钮对象 ? JLabel l1,l2; // 声明标签对象
? SwingDemo(){ // 定义构造方法
? super(\应用程序的例\调用父类的构造方法 ? l1=new JLabel(\一个GUI应用程序的例子\
? JLabel.CENTER); // 定义标签,文字居中 ? l2=new JLabel(\定义无文字标签 ? b1=new JButton(\现在时间[T]\定义按钮
? b1.setMnemonic(KeyEvent.VK_T);// 设置按钮的快捷键 ? b1.setActionCommand(\设置控制名 ? b1.addActionListener(this); // 注册按钮事件
? getContentPane().add(l1,BorderLayout.NORTH); // 添加标签l1 ? ? ? }
? // 对按钮引发事件编程
? public void actionPerformed(ActionEvent e){ ? // 捕获按钮事件
? Calendar c1 = Calendar.getInstance(); ? // 获取系统日期和时间
? if(e.getActionCommand().equals(\ ? // 判断是否为所需的按钮事件 ? l2.setText(“现在时间是”+
getContentPane().add(l2,BorderLayout.CENTER); // 添加标签l2 getContentPane().add(b1,BorderLayout.SOUTH); // 添加标签b1
? javax.swing.JPane类继承于javax.swing.JComponent类,其构造方法有:
? public JPanel() 创建具有缺省FlowLayout布局的JPanel对象。
? public JPanel(LayoutManager layout) 创建具有指定布局管理器的JPanel对象。
? 将JPanel作为画布的绘画区域使用时,要使用下面的两个步骤:首先,设置画布绘图区域的大小;
其次,使用paintComponent()方法(不是paint()方法)来绘图,在该方法体中,首先调用方法super.paintComponent()来清除显示区域。 ? 例如:
? public void paintComponent(Graphics g) { ? super.paintComponent(g); ? }
? JPanel可指定边界,可用的边界有TitledBorder(显示字符串标题的边框 )、EtchedBorder (浮
雕化边框 )、BeveledBorder(简单的双线斜面边框 ) 、LineBorder(单色、任意厚度线边框的类 )、MatteBorder (类似衬边的边框,衬边图案既可以是纯色也可以是平铺的图标 )等。创建自己的边界,可用JComponent类的setBorder()方法设置边界。其用法如下:
? public void setBorder(Border border)
? 其中,Border类的参数可用new对象或 javax.swing.BorderFactory类中的方法获得。获取各种
相应边界的方法为:
? createTitledBorder(String title)
创建一个新标题边框,使其具有指定的标题、默认的边框类型(由当前外观确定)、默认的文本位置(位于顶线上)、默认的调整 (leading),以及默认的字体和文本颜色(由当前外观确定)。createLineBorder(Color color, int thickness) 创建一个具有指定颜色和宽度的线边框。
? createMatteBorder(int top, int left, int bottom, int right, Color color)
使用纯色创建一个类似衬边的边框。 ? createEtchedBorder(Colorhighlight, Colorshadow)
使用指定的高亮显示颜色和阴影颜色创建一个具有“浮雕化”外观效果的边框。
? createTitledBorder(Border border, String title)
向现有边框添加一个标题,使其具有默认的位置(位于顶线上)、默认的调整 (leading),以及默认的字体和文本颜色(由当前外观确定)。 ? 【例9.7】使用JPanel。 ? import java.awt.*; ? import javax.swing.*;
? class JPanelDemo extends JPanel { ? JButton b1 = new JButton(\ ? JButton b2 = new JButton(\ ? public JPanelDemo() {
? setBackground(Color.white); ? add(b1); ? add(b2); ? }
? public static void main(String[] args) { ? JPanel jp = new JPanelDemo(); ? jp.setBorder(
? BorderFactory.createTitledBorder( ? \
? JFrame frame = new JFrame(\ ? frame.setSize(200, 150); ? frame.setContentPane(jp); ? frame.setDefaultCloseOperation( ? JFrame.EXIT_ON_CLOSE); ? frame.setVisible(true); ? } ? }
? 注:jp.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtched
Border(Color.red, Color.black),\
? 3.JApplet
? javax.swing.JApplet类是java.applet.Applet类的子类。使用Swing组件的小程序需继承
JApplet类。
? 除了所处的java包不同外,JApplet与Applet的主要区别还有: ? (1)缺省的布局管理器不同
? Applet缺省的布局管理器是FlowLayout,而JApplet(内容窗格)缺省的布局管理器是
BorderLayout。 ? (2)加入组件的方式不同
? Applet可直接加入组件,而JApplet缺省使用内容窗格ContentPane作为主容器。加入Swing组
件时,要先使用JApplet的方法getContentPane()获得一个Container对象,再调用这个对象的add()方法将Swing组件加入到JApplet的容器中。
见JAppletBorder.java 网页为JAppletBorder.htm
? 4.JTabbedPane
? javax. javax.swing.JTabbedPane类继承于javax.swing.JComponent,它的对象反映为一组带标
签的面板,每个面板都可以存放组件,因此JTabbedPane是一容器组件。 ? JTabbedPane类的构造方法有:
? JTabbedPane()创建空对象,该对象具有缺省的标签位置JTabbedPane.TOP和缺省的布
局策略JTabbedPane.WRAP_TAB_LAYOUT。
? JTabbedPane(int tabPlacement)创建空对象,该对象具有指定的标签位置:
JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT或JTabbedPane.RIGHT以及缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。
? JTabbedPane(int tabPlacement, int tabLayoutPolicy)创建空对象,该对象具有指定
的标签位置和布局策略。布局策略可以是以下两种之一:JTabbedPane.WRAP_TAB_LAYOUT 或 JTabbedPane.SCROLL_TAB_LAYOUT。加滚动条
? JTabbedPane类的方法有:
? addTab(String title, Component component)
添加一个由 title 表示,且没有图标的 component。 ? addTab(String title, Icon icon, Component component)
添加一个由 title 和/或 icon 表示的 component,其任意一个都可以为 null。 ? addTab(String title, Icon icon, Component component, String tip)
添加由 title 和/或 icon 表示的 component 和 tip,其中任意一个都可以为 null。参数为:标题、图标、单击此选项卡时要显示的组件、此选项卡提示信息
? getSelectedIndex():返回当前选择的此选项卡窗格的索引。
? JTabbedPane类实现的接口有:
? implements ChangeListener ? 注册事件为:
? addChangeListener(ChangeListener l)
将一个 ChangeListener 添加到此选项卡窗格中。 ? 例:jt.addChangeListener(this); ? Jt为JTabbedPane对象
? 【例9.8】使用JTabbedPane容器。
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class JTabbedPaneDemo{
public static void main(String args[]){ new MyTabbedPane(); } }
class MyTabbedPane extends JFrame implements ChangeListener,ActionListener{ JTabbedPane jt; JButton jb[]; int index = 0; MyTabbedPane(){
super(\使用标签面板容器\ jt = new JTabbedPane(); jb = new JButton[5]; for(int i = 0;i<5;i++){
jb[i] = new JButton(\第\页面板\ jb[i].addActionListener(this); jt.addTab(\页标签\ }
jt.addChangeListener(this);
getContentPane().add(jt,BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,200); setVisible(true); }
public void stateChanged(ChangeEvent e){ if(e.getSource()==jt){
int i = ((JTabbedPane)e.getSource()) .getSelectedIndex(); jb[index].setVisible(false); jb[i].setVisible(true);
index = i; } }
public void actionPerformed(ActionEvent e){ setTitle(“响应单击”
+((JButton)e.getSource()).getText()); } }
? 例9.8运行结果如下图所示。 ? 菜单组件 ? 类 JFrame方法 ? getJMenuBar()
返回此窗体上设置的菜单栏。 ? setJMenuBar(JMenuBar menubar)
设置此窗体的菜单栏。 ? 菜单组件
? JMenuBar添加到窗体的面板上 ? JMenu 添加到JMenuBar上 ? JMenuItem 添加到JMenu上 ? 菜单组件
? 菜单是GUI中非常重要和常见的组件。Swing的菜单组件件:
? JMenuBar JMenu ? JMuneItem JPopupMenu ? JCheckBoxMenuItem JRadioButtonMenuItem
? 菜单可分为下拉式菜单和弹出式菜单两种,
? 下拉式菜单:一般位于窗口的顶部,由菜单栏(JMenuBar)、菜单(JMenu)和菜单项
(JMuneItem)构成。
? 弹出式菜单(Jpopup Menu):不使用时是不可见的,需要时单击鼠标右键就可以弹出菜单。
? 菜单组件 (1)JMenuBar
? JMenuBar组件是摆放菜单的容器,可以使用其构造方法JMenuBar( )来创建菜单栏,但要把菜单
栏加入到容器中,与其他组件不同的,它不使用add( )方法,而使用专门设置菜单栏的方法setJMenuBar(JMenuBar menubar)。 ? 菜单栏不响应事件。 ? 菜单组件 (2)JMenu
? 菜单中包含若干菜单项,这些菜单项可随菜单添加到菜单栏中。如鼠标单击一个菜单时,就展开
该菜单,在菜单中显示一列菜单项,就会产生一个动作事件。JMenu的构造方法有:
● JMenu( ):创建一个没有文本的菜单。 ● JMenu(String s):创建一个有文本的菜单。 将菜单添加到菜单栏中使用add( )方法。 菜单不响应事件。
? 菜单组件 (3)JMenuItem
? 一个菜单项是包含在菜单中的一个字符串。当鼠标或键盘按键选中时,就触发一个动作事件,菜
单项可以是一个命令,也可以是另一个菜单(子菜单)。JMenuItem的构造方法有:
● JMenuItem( ):创建一个空的菜单项。
● JMenuItem(String text):创建一个具有指定文本的菜单项。 ● JMenuItem(Icon icon):创建一个有图标的菜单项。
● JMenuItem(String text, Icon icon):创建一个具有指定文本和图标的菜单项。 ● JMenuItem(String text,int mnemonic):创建一个具有指定文本且有快捷键的菜单项。
? 将菜单项加入到菜单中使用add( )方法。 ? 菜单组件 (4)下拉式菜单的创建
? 下拉式菜单的创建过程如下:
? ①首先创建菜单栏、创建菜单以及子菜单、创建菜单项,并将菜单项加入到子菜单或菜
单中,将子菜单加入到菜单中,将菜单加入到菜单栏中,将菜单栏加入到框架容器中。 ? ②设置菜单项的使用状态:通过setEnabled(Boolean b)方法设置菜单项是启用状态还
是禁用状态。
? 菜单组件:JMenuFrame.java (4)下拉式菜单的创建(续一)
? ③设置快捷键和加速器:快捷键显示为带有下画线的字母,加速器则显示为菜单项旁边的组合键。
? 可以通过setMnemonic(char mnemonic)设置快捷键,菜单项还可以在创建时利用构造方
法JMenuItem(String text,int mnemonic)设置快捷键。设置快捷键后,可以使用Alt+快捷键打开相应的菜单,在打开菜单后可以直接单击快捷键,实现对菜单项的选取。 ? 加速器可以在不打开菜单的情况下选择菜单项,当按下加速器组合键,相应的菜单项就
会被选中。加速器只能关联到菜单项,而不能关联到菜单,因为加速器从本质上讲是触发同菜单项相关联的事件监听器。可以利用方法setAccelerator(KeyStroke keystroke)设置菜单项的加速器。
? ④注册事件监听器,实现监听器接口
? swing的版面结构示例2:菜单界面的完整示例(ch9_49.java) ? import javax.swing.*; ? import java.awt.event.*;
? public class ch9_49 extends JFrame ? {
? public ch9_49() ? { ? ? ? ? ? } ?
? swing的版面结构示例2:菜单界面的完整示例(ch9_49.java) ? public static void main(String [] args) ? { ? ?
ch9_49 f=new ch9_49();
super(\菜单演示\
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(20,20,500,300);
正在阅读:
JAVA SWING重难点12-05
小眼镜店如何经营与管理06-02
2012届毕业生就业指导课平时作业07-29
2019高中物理第四章机械能和能源第3-4节势能;动能动能定理1势能03-01
卓越亚马逊分析08-26
教研员年度工作总结04-16
主要生产设备一览表2014.03.0306-24
行车百日安全活动总结02-26
朋友感人话语02-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 重难点
- SWING
- JAVA
- 劳动关系与劳动法试卷及参考答案(07.7)
- 高一地理四校联考试卷
- 喷射混凝土安全技术交底(冬施) - 图文
- 精通版小学四年级上册英语教案全册
- 2013学年下学期初中八年级期末考试英语试卷
- 2014年自考英语(二)资料( unit 5)
- 帮派答题(红色字体为答案)
- 三层交换机cisco3560 ios 丢失解决笔记
- 扬州工业职业技术学院 - 图文
- 湖北的名贵树木
- 规划、设计主题网站教案设计 精品
- 调速器BW(S)T-PLC说明书中文版 - 图文
- 优秀家长学校申报材料
- 小学毕业班 管理实施方案
- 2012英语专业英美文学模拟试题二
- 本地区旅游行业人才需求现状分析及未来需求预测
- 浅谈微课在中职机械制图教学中的应用
- 浅谈电信企业人力资源的利用
- 液压泵站操作规程
- 封山育林技术规程GBT 15163—2004