Java语言程序设计(一) 第9章 Swing组件
第9章 Swing组件
1 组合框与列表
组合框 JComboBox
JComboBox 是一个下拉式菜单,他有两种形式,不可编辑的和可编辑的
构造方法有两个,无参构造方法创建一个没有任何可选项的默认组合框。只有一个数组参数的构造方法,根据Object 数组创建组合框,Object 数组的元素即为组合框中的可选项。
组合框创建之后默认是不可编辑的,可以通过 setEditable(true) 方法将其设置为可编辑的。
可以添加和删除可选项
public JComboBox()
public JComboBox(E[] items)
public void addItem(E item)// 在末尾位置添加新的可选项
public E getItemAt(int index) //返回指定索引序号 index 处的可选项
public int getItemCount() //返回列表中的项数
public void insertItemAt(E item, int index) //在 index 指定的位置添加新的可选项 item
public int getSelectedIndex() //返回列表中与给定项匹配的第一个选项的索引序号
public Object getSelectedItem() //返回当前所选项
public void removeAllItems() //删除所有可选项
public void removeItem(Object anObject) //删除由anObject 指定的可选项
public void removeItemAt(int anIndex) //删除由 index 指定处的可选项
组合框上的用户事件既可以通过 ActionListener 处理,又可以通过 ItemListener处理。用户输入项目后按 <Enter>
键,对应的是 ActionListener ,而用户选定项目,对应的接口是 ItemListener 不过用户的一次选择操作,会引发两个 ItemEvent 事件,因此通常使用 ActionListener 处理比较方便
选项的索引序号从0开始。
列表 JList
JList 是可供用户进行选择的一系列可选项。
空构造方法 构造一个空列表
还有数组和 Vector 参数的两个构造方法,构造函数和常用方法如下
public JList()
public JList(final E[] listData)//构造一个列表,使其显示数组中的元素
public JList(final Vector<? extends E> listData)//构造一个列表,使其显示集合中的元素
public int getSelectedIndex()//返回所选项第一次出现的索引,如果没有所选项,则返回-1
public E getSelectedValue()//返回所选的第一个值,如果选择为null,则返回null
public void setVisibleRowCount(int visibleRowCount)//设置不使用滚动条可以在列表中显示的首选行数
当用户在列表上进行选择时,将引发 ListSelectionEvent 事件,在JList 中提供了 addListSelectionListener(ListSelectionListener listener) 方法,用于注册对应的事件侦听程序
public interface ListSelectionListener extends EventListener
{
/**
* 每当所选内容的值更改时调用。
* @param e具有变化特征的事件。
*/
void valueChanged(ListSelectionEvent e);
}
列表对象创建之后,也可以使用 JList 中定义的 setModel(ListModel model) 方法设置新的 ListModel,列表对象本身并不带滚动条,但是当列表可选项较多时,可以将列表对象放入 JScrollPane 中以提供滚动功能。
列表既支持单项选择又支持多项选择,可以使用 JList 中定义的 setSelectionMode(int selectionMode) 方法对列表的选择模式进行设置,其中int型selectionMode可以是以下常量。
ListSelectionModel.SINGLE_SELECTION//只能单项选择
ListSelectionModel.SINGLE_INTERVAL_SELECTION//可多项选择,但多个选项必须是连续的
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION//可多项选择,多个选项可以是间断的,这是选择模式的默认值。
2 文本组件
文本组件可用于显示信息和提供用户输入功能,在 swing 中提供了 文本域JTextField,口令输入域 JPasswordField,文本区 JTextArea 等多个文本组件,这些文本组件都有一个共同的父类 JTextComponent
JTextComponent 中定义了文本组件所公有的一些方法
//JTextComponent 类
public String getSelectedText()//从文本组件中提取被选中的文本内容
public String getText()//从文本组件中提取所有文本内容
public String getText(int offs, int len)//从文本组件中提取指定范围的文本内容
public void select(int selectionStart, int selectionEnd)//在文本组件中选中指定的起始和结束位置之间的文本内容
public void selectAll()//在文本组件中选中所有文本内容
public void setEditable(boolean b)//设置为可编辑或不可编辑状态
public void setText(String t)//设置文本组件的文本内容
public void setDocument(Document doc)//设置文本组件的文档
public void copy()//复制选中的文本到剪贴板
public void cut()//剪切选中的文本到剪贴板
public void paste()//将剪贴板的内容粘贴到当前位置
// JComponent 类 常用方法
public boolean requestFocusInWindow()//请求当前组件获得输入焦点
文本域
文本域是一个单行的文本输入域,可用于输入少量文本,常用的构造方法如下
public JTextField()//构造一个空文本域
public JTextField(int columns)//构造一个具有指定列数的空文本域,int型参数 columns 指定文本域的列数
public JTextField(String text)//构造一个显示指定初始字符串的文本域,String 型参数 text 指定要显示的初始字符串
public JTextField(String text, int columns)//构造一个具有指定列数并显示指定初始字符串的文本域,String型参数 text 指定要显示的初始字符串,int 型参数 columns 指定文本域的列数
//常用方法
public synchronized void addActionListener(ActionListener l)//添加指定的操作侦听器,接收操作事件
public synchronized void removeActionListener(ActionListener l)//移除指定的操作侦听器,不再接收操作事件
public void setFont(Font f)//设置当前字体
public void setHorizontalAlignment(int alignment)//设置文本的水平对齐方式。
/**
有效值包括
JTextField.LEFT
JTextField.CENTER
JTextField.RIGHT
JTextField.LEADING leading edge 前沿
JTextField.TRAILING trailing edge 后沿
*/
public int getColumns()//返回文本域的列数
public void setEditable(boolean b)//设置为可编辑或不可编辑状态
文本区
文本区是一个多行多列的文本输入框,常用的构造方法如下
public JTextArea()//构造一个空文本区
public JTextArea(String text)//指定初始字符串的文本区
public JTextArea(int rows, int columns)//指定行数列数的空文本区
public JTextArea(String text, int rows, int columns)//构造一个具有指定行数和列数并显示指定初始字符串的文本区
与文本域类似,构造方法中指定的行数和列数只是希望的数值,文本区的大小仍然是由布局管理器决定的。
文本区本身不带滚动条,由于文本区内显示的内容通常比较多,因此一般将其放入滚动窗格 JscrollPane 中
JTextArea 类常用方法
public void append(String str)//将指定文本 str 追加到文本区
public void insert(String str, int pos)//将指定文本str插入到文本区的特定位置pos处
public void replaceRange(String str, int start, int end)//用指定文本str替换文本区中从起始位置start到结尾end的内容
可以为文本区注册普通的事件侦听程序,但是由于文本区中可输入的文本是多行的,用户按 <Enter>
键的结果只是向缓冲区输入一个字符,并不能表示输入的结束。因此,当需要识别用户输入完成的时,通常要在文本区旁放置一个 Apply 或 Commit 之类的按钮。
3 菜单组件
菜单也是最常用的GUI组件之一,Swing 包中提供了多种菜单组件,包括 JMenuBar,JMenuItem,JMenu,JCheckBoxMenuItem,JRadioButtonMenuItem 和 JPopupMenu 等。
菜单有下拉式菜单和弹出式菜单两种。
菜单栏 JMenuBar 和菜单 JMenu
菜单栏只有中构造方法,即 JMenuBar() JFrame JApplet JDialog 等类中都定义了 setJMenuBar(JMenuBar menu) 方法,可以把菜单栏放到窗口的上方。
JMenuBar 上也可以注册一些事件侦听程序,但通常情况下,对于 JMenuBar 上的用户事件,都不进行处理
菜单的常用构造方法如下
public JMenu()//没有文本的新菜单
public JMenu(String s)//构造具有指定标签的新菜单,String型参数 s 指定了菜单上的文本
public JMenu(String s, boolean b)//构造具有指定标签的新菜单,指示该菜单是否可以分离。
菜单可以被加入到菜单栏或者另一个菜单中。
菜单项 JMenuItem
如果将整个菜单系统看作是一棵树,那么菜单项就是这棵树的叶子,是菜单系统的最下面一级。
常用的菜单项构造方法如下
public JMenuItem()//创建不带设置文本或图标的菜单项
public JMenuItem(Icon icon)//创建一个只显示图标的菜单项,图标由 Icon 型参数icon指定
public JMenuItem(String text)//创建一个只显示文本的菜单项,文本由 String 型参数 text指定
public JMenuItem(String text, Icon icon)//创建一个同时显示文本和图标的菜单项
public JMenuItem(String text, int mnemonic)//创建一个显示文本并且有快捷键的菜单项,快捷键由int型参数 mnemonic 指定 KeyEvent.VK_S(ctrl S)
快捷键也可以在菜单项被创建之后,通过 setMnemonic(char mnemonic) 方法进行设置。
在类中还定义了一个 setAccelerator(KeyStroke keyStroke) 方法,使用该方法可以为菜单项设置加速键。
在Menu 类中定义有 addSeparator() 和 InsertSeparator(int index) 方法,通过这些方法可以在某个菜单的各个菜单项间加入分割线。此外,javax.swing 包中还定义了一个 JSeparator 类,也可以通过创建该对象添加到菜单中。
菜单项还可以含有菜单项,组成嵌套的菜单。
当菜单中的菜单项被选中时,将会引发一个 ActionEvent 事件,因此通常需要为菜单项注册 ActionListener 以便对事件做出响应
复选菜单项和单选菜单项
//复选菜单项 boolean 型参数指定菜单项的初始状态
public JCheckBoxMenuItem()
public JCheckBoxMenuItem(Icon icon)
public JCheckBoxMenuItem(String text)
public JCheckBoxMenuItem(String text, boolean b)
public JCheckBoxMenuItem(String text, Icon icon)
public JCheckBoxMenuItem(String text, Icon icon, boolean b)
//单选菜单项
public JRadioButtonMenuItem()
public JRadioButtonMenuItem(Icon icon)
public JRadioButtonMenuItem(Icon icon, boolean selected)
public JRadioButtonMenuItem(String text)
public JRadioButtonMenuItem(String text, boolean selected)
public JRadioButtonMenuItem(String text, Icon icon)
public JRadioButtonMenuItem(String text, Icon icon, boolean selected)
当菜单项的状态发生改变时,会引发 ItemEvent 事件,可以使用 ItemListener 中的 itemStateChanged() 对此事件进行响应。
通常在建立菜单系统时,可以首先创建一个菜单栏,并通过 setMenuBar() 方法将其放入某个框架中。然后创建若干个菜单,通过add() 方法将他们加入菜单栏中。最后创建各个菜单项,通过 add() 方法将他们加入不同的菜单中。
4 对话框
对话框
是一个临时的可移动窗口,且要依赖于其他窗口,当他所依赖的窗口消失或最小化时,对话框也将消失。当窗口还原时,对话框会自动恢复。
对话框分为强制性和非强制性两种。强制性对话框被关闭之前,其它窗口无法接受任何形式的输入,也就是该对话过程不能中断,这样的窗口也称为模式窗口。非强制型对话框可以中断对话过程,去响应对话框之外的事件。
构造方法
public JDialog(Dialog owner)
public JDialog(Dialog owner, boolean modal)
public JDialog(Dialog owner, String title)
public JDialog(Dialog owner, String title, boolean modal)
public JDialog(Frame owner)
public JDialog(Frame owner, boolean modal)
public JDialog(Frame owner, String title)
public JDialog(Frame owner, String title, boolean modal)
/**
owner 将指定的对话框作为其所有者的对话框
modal 指定对话框是有模式或无模式 默认 false
title 对话框标题,默认空字符串
*/
刚刚创建的对话框是不可见的,需要调用 setVisible(true) 方法才能将其显示出来。
对话框可对各种窗口事件进行侦听,对话框也是顶层容器,可以像对话框的内容窗格添加各种组件
标准对话框
JDialog 类通常用于创建自定义的对话框,除此之外,在 Swing 中还提供了用于显示标准对话框的 JOptionPane 类,在 JOptionPane 类中定义了多个 showXxxDialog 形式的静态方法。
可以分为以下4种类型
showConfirmDialog 确认对话框 显示问题,要求用户进行确认(yes/no/cancel)
showInputDialog 输入对话框 提示用户进行输入
showMessageDialog 信息对话框 显示信息,告知用户发生了什么情况
showOptionDialog 选项对话框 显示选项,要求用户进行选择
除了 showOptionDialog 之外 其他3种方法都定义有若干个不同格式的同名方法
public static void showMessageDialog(Component parentComponent,Object message)
public static void showMessageDialog(Component parentComponent,Object message, String title, int messageType)
public static void showMessageDialog(Component parentComponent,Object message, String title, int messageType, Icon icon)
public static int showConfirmDialog(Component parentComponent,Object message, String title, int optionType,int messageType, Icon icon)
public static Object showInputDialog(Component parentComponent,Object message, String title, int messageType, Icon icon,Object[] selectionValues, Object initialSelectionValue)
/**
1 parentComponent 对话框的父窗口对象 其屏幕坐标将决定对话框的显示位置,此参数可以是null,表示采用默认的 Frame 作为父窗口,此时对话框将设置在屏幕的正中
2 message 显示在对话框中的描述信息,该参数通常是一个String对象,但也可以是一个图标,一个组件或者一个对象数组
3 title 对话框的标题
4 showConfirmDialog optionType 对话框上按钮的类型
JOptionPane.YES_NO_OPTION
JOptionPane.YES_NO_CANCEL_OPTION
JOptionPane.OK_CANCEL_OPTION
5 messageType 对话框所传递的信息类型
JOptionPane.ERROR_MESSAGE
JOptionPane.INFORMATION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.QUESTION_MESSAGE
JOptionPane.PLAIN_MESSAGE
除 PLAIN_MESSAGE 外,其他每种类型都对应于一个默认图标
6 showInputDialog Object[] selectionValues 对话框上的选项,该参数通常是一个String数组,也可以是图标或组件数组
7 icon 对话框上显示的装饰性图标,如果没有指定,则根据 messageType参数显示默认图标
8 showInputDialog initialSelectionValue 初始选择项或输入项
*/
文件对话框
文件对话框是专门用于对文件或目录进行浏览和选择的对话框,常用的构造方法有3种形式
public JFileChooser()//指向用户默认目录的文件对话框
public JFileChooser(File currentDirectory)
public JFileChooser(String currentDirectoryPath)
/**
currentDirectory 给定的File文件作为路径
currentDirectoryPath 给定路径
*/
//刚刚创建的文件对话框是不可见的,可以调用以下方法将其显示出来。
public int showOpenDialog(Component parent)//弹出一个打开文件对话框
public int showSaveDialog(Component parent)//弹出一个保存文件对话框
上述两个方法中都有一个 Component 型参数,该参数指定文件对话框的 父组件,父组件决定了文件对话框的显示位置,如果该参数为null,则文件对话框显示在屏幕正中
对于文件对话框的事件,一般都无需进行处理,当用户进行文件选择之后,可以通过 getSelectedFile() 方法取得用户所选择的文件