第八章 SWING组件按钮
经常用到的按钮
JButton(普通),JToggleButton(切换)、
JCheckBox(复选),JRadioButton(单选)
均是 AbstractButton的子类或间接子类
都可以设置文本、设置图标、注册事件监听程序
在 AbstractButton中定义了各种按钮所共有的一些方法,例如 addActionListener(),setEnabled()、
setText(),setIcon()等按钮类之间继承关系
AbstractButton
JButton JToggleButton JMenuItem
JCheckBox JRadioButton
普通按钮 JButton
构造方法
JButton() —— 创建一个既没有显示文本也没有图标的按钮
JButton(Icon icon) —— 创建一个没有显示文本但有图标的按钮
JButton(String text) —— 创建一个有显示文本但没有图标的按钮
JButton(String text,Icon icon) —— 创建一个既有显示文本又有图标的按钮普通按钮 JButton
构造显示文本为,Sample”的按钮
构造显示文本为,Sample”,带有钻石形状小图标的按钮
JButton b = new JButton(“Sample” );
JButton b = new JButton("Sample",new ImageIcon("icon.gif"));
使用 JButton的例子
程序运行时,每当按动按钮,就会在屏幕上交替显示出两条不同信息
程序 8-1
8-1结果
Jbutton方法
可以通过 setText()动态地改变按钮上的显示文本,通过 setEnabled()改变按钮的状态
程序 8-2
setMnemonic()方法可以为按钮设置快捷键
setActionCommand()方法为按钮设置一个命令名
getActionCommand()方法
因此当事件发生时,判断是在哪一个按钮上发生的
b1.setMnemonic(KeyEvent.VK_S);
切换按钮
JToggleButton是具有两种状态的按钮,即选中状态和未选中状态
JToggleButton的构造方法
JToggleButton() 创建一个既没有显示文本也没有图标的切换按钮
JToggleButton(Icon icon) 创建一个没有显示文本但有图标的切换按钮
JToggleButton(Icon icon,boolean selected) 创建一个没有显示文本但有图标和指定初始状态的切换按钮
JToggleButton(String text) 创建一个有显示文本但没有图标的切换按钮
JToggleButton(String text,boolean selected) 创建一个有显示文本和指定初始状态但没有图标的切换按钮
JToggleButton(String text,Icon icon) 创建一个既有显示文本又有图标的切换按钮
JToggleButton(String text,Icon icon,boolean selected) —— 创建一个既有显示文本又有图标和指定初始状态的切换按钮
JCheckBox,JRadioButton
都是 JToggleButton的子类,构造方法的格式与
JToggleButton相同,它们也都具有选中和未选中两种状态
isSelected()方法获知按钮的当前状态
当返回值为真( true) 时表示处于选中状态,而返回值为假( false) 时则表示处于未选中状态程序 8-3
程序 8-3
说明
JToggleButton,JCheckBox和 JRadioButton等具有两种状态的按钮可以注册 ItemEvent事件监听程序在 ItemListener接口中声明了如下方法:
public void itemStateChanged(ItemEvent e) ;
当按钮的状态发生改变时,该方法将会被调用程序 8-3说明
多个组件可以使用共同的事件处理程序
在 ActionEvent,ItemEvent等事件类对象中,都提供了 getSource()方法,可以获取事件源,该方法的返回类型为 Object
ItemEvent中另外提供了一个 getItem()方法,作用与 getSource()方法相同
public Object getSource()
需要进行类型转换,例如:
JRadioButton rb = (JRadioButton) e.getSource();
程序 8-3说明
按钮可以添加到按钮组( ButtonGroup) 中,
这时首先要创建一个按钮组对象,然后调用按钮组的 add()方法将按钮添加到按钮组
ButtonGroup group = new ButtonGroup();
group1.add(cb4);
group1.add(cb5);
group1.add(cb6);
当多个按钮被添加到同一个按钮组之后,
只能有一个按钮处于被选中状态标签
标签( JLabel) 对象通常用于显示提示性的文本信息或图标
构造方法有六种形式
JLabel()——构造一个既不显示文本信息也不显示图标的空标签
JLabel(Icon image) ——构造一个显示图标的标签
JLabel(Stringtext) ——构造一个显示文本信息的标签
JLabel(Icon image,int horizontalAlignment) ——构造一个显示图标的标签,水平对齐方式由 int型参数 horizontalAlignment指定
JLabel(String text,int horizontalAlignment) —— 构造一个显示文本信息的标签
JLabel(String text,Icon icon,int horizontalAlignment)——构造一个同时显示文本信息和图标的标签
将显示内容设置为水平居中、底部对齐
可以通过 setHorizontalTextPosition(int
textPosition) setVerticalTextPosition(int
textPosition)指定文本信息和图标的相对位置下面命令设置文本信息显示在图标的底部并且居中
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.BOTTOM);
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
程序 8-4
可以使用 setText(String text)方法修改显示在标签上的文本信息,也可以使用
setIcon(Icon icon)方法修改标签上的图标,
但是在程序运行过程中,用户不能对标签内容进行修改
程序 8-4
组合框
组合框 ( JComboBox) 是一个下拉式菜单,
它有两种形式:不可编辑的和可编辑的,
对不可编辑的 JComboBox,用户只能在现有的选项列表中进行选择;而可编辑的
JComboBox,用户既可以在现有选项中选择,也可以输入新的内容
JComboBox构造方法
JComboBox() —— 创建一个没有任何可选项的组合框
JComboBox(Object[] items) ——根据 Object
数组创建组合框,Object数组的元素即为组合框中的可选项创建一个具有五个可选项的组合框:
String[] itemList = { "One","Two","Three","Four","Five" };
JComboBox jcb = new JComboBox(itemList);
JComboBox类中方法
public void addItem(Object anObject) —— 在末尾位置添加新的可选项
public void insertItemAt(Object anObject,int
index) —— 在 index指定的位置添加新的可选项
anObject
public void removeAllItems() —— 删除所有可选项
public void removeItem(Object anObject) —— 删除由 anObject指定的可选项
public void removeItemAt(int anIndex) —— 删除指定位置(由 anIndex指定)的可选项程序 8-5
程序 8-5
每当用户在组合框 jcb1中进行选择,被选中的选项就会通过下面命令被插入到组合框 jcb2中的第一个位置:
getSelectedItem()方法可获得用户的当前选项 。 在插入选项时,选项的序号是从 0开始的
组合框上的用户事件既可以通过 ActionListener处理,也可以通过 ItemListener处理,但是用户的一次选择操作,会引发两个 ItemEvent事件,因此通常是使用 ActionListener处理
jcb2.insertItemAt(jcb1.getSelectedItem(),0);
列表
列表( JList) 是可供用户进行选择的一系列可选项
构造方法
JList() —— 构造一个空列表
JList(ListModel dataModel) —— 构造一个列表,
列表的可选项由 ListModel型参数 dataModel指定
JList(Object[] listData) —— 构造一个列表,列表的可选项由对象数组 listData指定
JList(Vector listData) —— 构造一个列表,列表的可选项由 Vector型参数 dataModel
列表
根据 String数组构造一个包含四个可选项的列表
String[] data = {"one","two","three","four"};
JList dataList = new JList(data);
Vector listData = new Vector();
listData.addElement("one ");
listData.addElement("two ");
listData.addElement("three ");
listData.addElement("four ");
JList list = new JList(listData);
ListModel
列表使用 ListModel保存它的可选项,
ListModel是一个接口,其定义为,
public interface ListModel {
int getSize(); //返回列表的长度
Object getElementAt(int index); //返回指定位置的可选项
void addListDataListener(ListDataListener l);
//注册事件监听程序,监听列表可选项的变化
void removeListDataListener(ListDataListener l);
//删除监听程序
}
创建列表
当根据数组或 Vector创建列表时,构造方法将自动地创建一个缺省的、实现了 ListModel接口的对象,该对象是不可变的
如果希望列表的可选项是动态改变的,需要在创建列表时提供一个 ListModel对象,在通常情况,
可以用一个 DefaultListModel对象
DefaultListModel类定义在 Swing包中,它给出了
ListModel的缺省实现。当有特殊需要时,也可以自定义一个子类继承 AbstractListModel,
AbstractListModel是定义者 Swing包中的抽象类,给出了 ListModel接口的部分实现程序 8-6
程序 8-6
首先创建一个 DefaultListModel对象,使用
addElement(Object obj)方法添加列表可选项
然后根据 DefaultListModel对象创建列表
listModel = new DefaultListModel();
listModel.addElement("one ");
listModel.addElement("two ");
……
list = new JList(listModel);
创建列表
可以使用 JList中定义的 setModel(ListModel model)
方法设置新的 ListModel
可以将列表对象放入 JScrollPane中以提供滚动功能
列表支持单多项选择,使用 JList中定义的
setSelectionMode(int selectionMode)方法对列表的选择模式进行设置
ListSelectionModel.SINGLE_SELECTION 只能进行单项选择
ListSelectionModel.SINGLE_INTERVAL_SELECTION
——可多项选择,但多个选项必须是连续的
ListSelectionModel.MULTIPLE_INTERVAL_SELECTIO
N ——多项选择,多个选项可以是间断的,这是选择模式的缺省值列表
在列表上选择时,将引发 ListSelectionEvent
事件
addListSelectionListener(ListSelectionListener
listener)方法注册对应的事件监听程序
ListSelectionListener接口中,只包含一个方法:
public void valueChanged(ListSelectionEvent e)
ListSelectionEvent和 ListSelectionListener均定义在 javax.swing.event包中程序 8-7
程序 8-7
文本组件
用于显示信息和提供用户输入功能
在 SWING中提供了文本域( JTextField)、
口令输入域( JPasswordField),文本区
( JTextArea) 等多个文本组件,都有一个共同的基类 ——JTextComponent
JTextComponent一些方法
getSelectedText()——从文本组件中提取被选中的文本内容
getText() ―― 从文本组件中提取所有文本内容
getText(int offs,int len)——从文本组件中提取指定范围的文本内容
select(int selectionStart,int selectionEnd) ―― 在文本组件中选中指定范围的文本内容
selectAll()―― 在文本组件中选中所有文本内容
setEditable(boolean b) ―― 设置为可编辑或不可编辑状态
setText(String t) ―― 设置文本组件中的文本内容
setDocument(Document doc)——设置文本组件的文档
copy()——复制选中的文本到剪贴板
cut()——剪切选中的文本剪贴板
paste()——将剪贴板的内容粘贴到当前位置文本域 JTextField
文本域是一个单行的文本输入框,可用于输入少量文本
五个构造方法
JTextField() —— 构造一个空文本域
JTextField(int columns) —— 构造一个具有指定列数的空文本域,
JTextField(String text) —— 构造一个显示指定初始字符串的文本域
JTextField(String text,int columns) —— 构造一个具有指定列数,并显示指定初始字符串的文本域
JTextField(Document doc,String text,int columns) ——
构造一个使用指定文档、具有指定列数、并显示指定初始字符串的文本域,doc可以为 null,此时一个缺省的 PlainDocument文档对象将会被创建
JTextField
构造一个列数为 30、初始字符串为,Single
Line”的文本域
在构造方法中所指定的列数,是一个希望的数值,由于组件的大小和位置通常是由布局管理器决定的,因此,指定的这些数据很有可能被忽略
JTextField tf = new JTextField(“Single Line”,30);
程序 8-8
程序 8-8
程序 8-9
程序 8-9是对文本域中 ActionEvent事件进行处理的一个例子
用 setEditable(boolean)方法将文本域设定为可编辑或不可编辑状态文本区 JTextArea
文本区是一个多行多列的文本输入框,有多种构造方法
JTextArea() —— 构造一个空文本区
JTextArea(String text) —— 构造一个显示指定初始字符串的文本区
JTextArea(int rows,int columns) —— 构造一个具有指定行数和列数的空文本区,
JTextArea(String text,int rows,int columns) —— 构造一个具有指定行数和列数,并显示指定初始字符串的文本区
JTextArea(Document doc) —— 构造一个使用指定文档的文本区
JTextArea(Document doc,String text,int rows,int
columns) —— 构造一个使用指定文档、具有指定行数和列数、并显示指定初始字符串的文本区文本区
构造一个 4行,30列、显示初始字符串
,Initial text”的文本区
对文本区进行操作的方法
用户按,Enter”或,Return”键的结果只是向缓冲区输入一个字符,并不能表示输入结束,因此,当需要识别用户,输入完成,
时,通常要在文本区旁放置一个,Apply”或
,Commit”之类的按钮
JTextArea ta = new JTextArea(“Initial text”,4,30)
append(String str)
将指定文本追加到文本区。
insert(String str,int pos)
将指定文本插入到文本区的特定位置。
replaceRange(String str,int start,int end)
指定文本替换文本区中的部分内容程序 8-10
程序 8-10
当用户单击 Copy按钮时,第一个文本区中选中的内容(或全部内容)
将被添加到第二个文本区中当用户单击 Clear按钮时,第二个文本区中的内容将被清空菜单组件
SWING包中提供的多种菜单组件
JMenuBar,JMenuItem,JMenu、
JCheckBoxMenuItem,JRadioButtonMenuItem和
JPopupMenu
菜单栏
菜单栏是窗口中的主菜单,用来包容一组菜单,只有一种构造方法
JMenuBar()
菜单栏
JFrame,JApplet和 JDialog等类中定义了
setJMenuBar(JMenuBar menu)方法,可以把菜单栏放到窗口的上方
JMenuBar上也可以注册事件监听程序,但通常情况下,对 JMenuBar上的用户事件都不进行处理
JFrame frame = new JFrame(“JMenuBar”);
JMenuBar mb = new JMenuBar();
frame.setJMenuBar(mb);
菜单
菜单是最基本的下拉菜单,用来包容一组菜单项或子菜单。构造方法如下
菜单加入菜单栏或者另一个菜单中
public JMenu(String label)
label指定了菜单上的文本。
JMenuBar menubar = new JMenuBar();
JMenu menu1 = new JMenu( "File");
JMenu menu2 = new JMenu( " Edit ");
menubar.add(menu1);
menubar.add(menu2);
菜单项
常用的菜单构造方法
JMenuItem(Icon icon) —— 构造一个只显示图标的菜单项,图标由 Icon型参数 icon指定
JMenuItem(String text) —— 构造一个只显示文本的菜单项,文本由 String型参数 text指定
JMenuItem(String text,Icon icon) —— 构造一个同时显示文本和图标的菜单项,文本由 String型参数 text指定,图标由 Icon型参数 icon指定
JMenuItem(String text,int mnemonic) —— 构造一个显示文本并且有快捷键的菜单项,文本由
String型参数 text指定,快捷键由 int型参数
mnemonic指定
JMenu m1 = new JMenu (“File”);
JMenuItem mi1 = new JMenuItem( "Save",KeyEvent.VK_S );
JMenuItem mi2 = new JMenuItem (“Load”);
JMenuItem mi3 = new JMenuIem (“Quit”);
m1.add(mi1);
m1.add(mi2);
m1.add(mi3);
构造了三个菜单项,分别显示文本,Save”、
“Load”和,Quit”,其中第一个菜单项的快捷键为
Ctrl+S,三个菜单项均被加入菜单 m1中快捷键也可以在菜单项被创建之后,通过
setMnemonic(char mnemonic)
方法进行设置菜单方法
setAccelerator(KeyStroke keyStroke)方法
为菜单项设置加速键
addSeparator ()和 insertSeparator(int index)
单项间加入分隔线创建了一个菜单项,然后为其设置快捷键和加速键:
JMenuItem menuItem = new JMenuItem( "Open..." );
menuItem.setMnemonic(KeyEvent.VK_O);
menuItem.setAccelerator(KeyStroke.getKeyStroke
(KeyEvent.VK_1,ActionEvent.ALT_MASK));
m1.add(mi1);
m1.add(mi2);
m1.addSeparator();
m1.add(mi3);
菜单方法
在 javax.swing包中定义的 JSeparator类,也可以加入分隔线:
ActionEvent事件
当菜单中的菜单项被选中时,将会引发一个
ActionEvent事件,因此通常需要为菜单项注册
ActionListener以便对事件作出反应
JMenu是 JMenuItem的子类,而 JMenuItem是
AbstractButton的子类,因此 JMenu和 JMenuItem
的使用方法均与按钮有类似之处
m1.add(mi1);
m1.add(mi2);
m1,add(new JSeparator());
m1.add(mi3);
复选和单选菜单项
这是两种特殊的菜单项,在复选菜单项前面有一个小方框,在单选菜单项前面有一个小圆圈,可以进行选中或不选中的操作,
使用方法与复选按钮和单选按钮类似
当菜单项的检验状态发生改变时,会引发
ItemEvent事件,使用 ItemListener中的
itemStateChanged()对此事件进行响应构造方法
boolean型参数指定菜单项的初始状态
复选菜单项构造方法
单选菜单项构造方法
JCheckBoxMenuItem(Icon icon)
JCheckBoxMenuItem(String text)
JCheckBoxMenuItem(String text,boolean b)
JCheckBoxMenuItem(String text,Icon icon)
JCheckBoxMenuItem(String text,Icon icon,boolean b)
JRadioButtonMenuItem(Icon icon)
JRadioButtonMenuItem(Icon icon,boolean selected)
JRadioButtonMenuItem(String text)
JRadioButtonMenuItem(String text,boolean selected)
JRadioButtonMenuItem(String text,Icon icon)
JRadioButtonMenuItem(String text,Icon icon,boolean selected)
程序 8-11
程序 8-11是建立菜单系统的一个例子,它使用到了我们前面介绍的几种菜单组件弹出式菜单
弹出式菜单( JPopupMenu) 是一种比较特殊的独立菜单,可以根据需要显示在指定位置。有两种构造方法
public JPopupMenu()——构造一个没有名称的弹出式菜单
public JPopupMenu(String label)——构造一个有指定名称的弹出式菜单弹出式菜单
构造一个名为,Popup”的弹出式菜单
加入菜单或菜单项
在显示弹出式菜单时,必须调用 show()方法
JPopupMenu p = new JPopupMenu (“Popup”)
JMenuItem s = new JMenuItem(“Save”);
JMenuItem l = new JMenuItem(“Load”);
p.add(s);
p.add(l);
public void show(Component origin,int x,int y)
需要有一个组件作参数,该组件的位置将作为显示弹出式菜单的参考原点程序 8-12
程序 8-12是一个创建并显示弹出式菜单的例子
该程序的运行结果对话框
对话框( JDialog) 是与框架类似的可移动窗口,
区别在于具有较少的修饰并且能够被设置为,模式( modal),窗口
对话框的构造方法
JDialog(Frame owner) ——构造一个没有标题的非模式对话框
JDialog(Frame owner,boolean modal) ——构造一个没有标题的对话框,boolean型参数 modal指定对话框是否为模式窗口
JDialog(Frame owner,String title) ——构造一个有标题的非模式对话框,
JDialog(Frame owner,String title,boolean modal) ——构造一个有标题的对话框对话框
构造一个标题为,Dialog”的模式对话框,该对话框为框架 frame所拥有
当对话框的拥有者被清除( destroyed) 时,对话框也会被清除
对话框在显示时,如果其拥有者被最小化,对话框也将变为不可见,当其拥有者再次显示时,对话框会随之变为可见
setVisible(true)方法显示,setVisible(false)方法可以将一个对话框隐藏起来
JDialog dialog = new JDialog(frame,“Dialog”,true)
对话框
对话框是一种可以反复使用的资源,当某个对话框不需要显示时,不要立即将其清除,而是继续保留它,等待以后再用
对话框可对各种窗口事件进行监听,例如激活窗口、关闭窗口等
对话框也是顶层容器,我们可以向对话框的内容窗格中添加各种组件程序 8-13
程序 8-13构造了一个对话框,当用户按框架中的按钮时,对话框将被显示出来标准对话框
SWING中还提供了用于显示标准对话框
( JOptionPane) 的 JOptionPane类
定义了多个 showXxxDialog形式的静态方法
showConfirmDialog —— 确认对话框,显示问题,要求用户进行确认( yes/no/cancel)
showInputDialog —— 输入对话框,提示用户进行输入
showMessageDialog —— 信息对话框,显示信息,告知用户发生了什么情况
showOptionDialog —— 选项对话框,显示选项,
要求用户进行选择
showXxxDialog方法的参数
Component parentComponent
对话框的父窗口对象,其屏幕坐标将决定对话框的显示位置;此参数也可以为 null,表示采用缺省的 Frame作为父窗口,此时对话框将设置在屏幕的正中
String title
对话框的标题
Object message
显示在对话框中的描述信息。该参数通常是一个 String对象,但也可以是一个图标、一个组件或者一个对象数组
showXxxDialog方法的参数
int messageType
对话框所传递的信息类型。可以为以下常量
除 PLAIN_MESSAGE之外,其他每种类型都对应于一个缺省图标
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE
question information warning error
showXxxDialog方法的参数
int optionType
对话框上按钮的类型,可以为以下常量:
DEFAULT_OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
Object[] options
对话框上的选项。在输入对话框中,通常以组合框形式显示,在选项对话框中,则指按钮的选项类型。该参数通常是一个 String数组,但也可以是图标或组件数组
showXxxDialog方法的参数
Icon icon
对话框上显示的装饰性图标,如果没有指定,
则根据 messageType 参数显示缺省图标
Object initialValue
初始选项或输入值实例
JOptionPane.showMessageDialog(frame,"File not found.",
"An error",JOptionPane.ERROR_MESSAGE);
实例
JOptionPane.showOptionDialog(frame,"Click OK to continue","Warning",
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,
null,options,options[0]);
showXxxDialog()返回类型
showMessageDialog()没有返回值
showConfirmDialog()和 showOptionDialog()
方法返回 int型数值,代表用户选择按钮的序号
( JOptionPane中定义了 YES_OPTION、
NO_OPTION,CANCEL_OPTION、
OK_OPTION和 CLOSED_OPTION等常量,分别代表用户选择了 YES,NO,CANCEL,OK
按钮以及未选择而直接关闭了对话框)
showInputDialog()方法的返回值为 String或
Object,代表用户的输入或选项
JOptionPane的例子
程序 8-14
该程序创建了四个按钮和一个文本域,当用户单击某个按钮,屏幕上将会显示出对应的标准对话框,用户在确认、输入和选项对话框中的操作结果将显示在文本域中文件对话框
专门用于对文件(或目录)进行浏览和选择的对话框,常用的构造方法,
JFileChooser() —— 根据用户的缺省目录创建文件对话框
JFileChooser(File currentDirectory) —— 根据 File
型参数 currentDirectory指定的目录创建文件对话框
JFileChooser(String currentDirectoryPath) ——
根据 String型参数 currentDirectoryPath指定的目录创建文件对话框文件对话框显示
showOpenDialog(Component parent)
显示一个,打开,文件对话框
showSaveDialog(Component parent)
显示,保存,文件对话框
showDialog(Component parent,String
approveButtonText)
显示一个自定义的文件对话框
标题和按钮上的文本由 String型参数 approveButtonText
指定
Component型参数,指定,父组件,,决定了文件对话框的显示位置,如果该参数为 null,则文件对话框显示在屏幕正中
通过 getSelectedFile()方法取得用户所选择的文件文件对话框的例子
程序 8-15
当用户单击 Open按钮时,,打开,文件对话框被显示出来;当用户单击 Save按钮时,
,保存,文件对话框被显示出来;当用户单击 Delete按钮时,,删除,文件对话框被显示出来。用户进行选择之后,所选文件的路径和文件名将被显示在窗口中部的文本区内控制组件外观
颜色
使用下面方法(在 Jcomponent中定义)设置组件的前景色和背景色
java.awt.Color类的一个实例作参数,我们可以使用 Color类中预定义的颜色常量,比如
Color.red和 Color.blue,也可以自己创建新的颜色:
public void setForeground(Color c)——设置前景色
public void setBackground(Color c)——设置背景色
int r = 255,g = 255,b = 0;
Color myColor = new Color(r,g,b)
字体
setFont(Font f)方法对组件中文本的字体进行设定
参数是 java.awt.Font类的一个实例
创建 Font对象
Font f = new Font(“Dialog”,Font.PLAIN,14);
字体名称字体的大小字体的风格
Font.BOLD
Font.ITALIC
Font.PLAIN
Font.BOLD+Font.ITALIC
字体
通过 java.awt包中 GraphicsEnvironment类的
getAvailableFontFamilyNames()方法,获得可用的字体名列表,
程序 8-16
GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
绘图
当组件被显示时,调用 java.awt.Component
类中定义 paint(Graphics g)方法
每当需要重绘组件时,调用 repaint()方法,
该方法将自动调用 paint(Graphics g)
javax.swing.JComponent继承
java.awt.Component,它的 paint(Graphics
g)方法中,会调用如下三个方法:
paintComponent(Graphics g) —— 绘制组件
paintBorder(Graphics g) —— 绘制组件的边框
paintChildren(Graphics g) —— 绘制组件中的子组件在组件上绘制图形,只需要改写这个方法
Graphics类的方法
drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)
drawLine(int x1,int y1,int x2,int y2)
drawOval(int x,int y,int width,int height)
drawPolygon(int[] xPoints,int[] yPoints,int nPoints)
drawRect(int x,int y,int width,int height)
drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)
drawString(String str,int x,int y)
fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)
fillOval(int x,int y,int width,int height)
fillPolygon(int[] xPoints,int[] yPoints,int nPoints)
fillRect(int x,int y,int width,int height)
fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)
绘制图形的例子
程序 8-17
自定义了一个 MyButton类和一个 MyPanel类,
分别继承 JButton和 JPanel。 这两个自定义类对 paintComponent(Graphics g)方法进行了改写
在改写 paintComponent(Graphics g)方法时,
需要先调用基类的 paintComponent(Graphics
g)方法