【Java基础之Swing】万字详谈GUI,一篇文章搞懂Swing
Swing:编程🌈博客主页:强子的博客📅 发文时间:2022.3.30📕上篇文章-》awt实现弹球小游戏🎈 一定存在只有你才能做成的事🌹 博主水平有限,如有错误,欢迎指正欢迎给位👍收藏💎评论✉GUI之SwingSwing:编程📖📖3.1 Swing概述🍧🍧Swing的特征:🍩🍩3.2 Swing基本组件的用法🍭🍭3.3 Swing中的特殊容器🍱🍱3.4JProgr
Swing:编程
🌈博客主页:屠一乐的博客
📅 发文时间:2022.3.30
📕上篇文章-》awt实现弹球小游戏
🎈 一定存在只有你才能做成的事
🌹 博主水平有限,如有错误,欢迎指正
欢迎给位👍收藏💎评论✉
GUI之Swing
📖📖3.1 Swing概述
Swing是由100%纯Java实现的,不再依赖于本地平台的 GUI,因此可以在所有平台上都保持相同的界面外观。独立于本地平台的Swing组件被称为轻量级组件;而依赖于本地平台的 AWT 组件被称为重量级组件。
由于 Swing 的所有组件完全采用 Java 实现,不再调用本地平台的 GUI,所以导致 Swing 图形界面的显示速度要比 AWT 图形界面的显示速度慢一些,但相对于快速发展的硬件设施而言,这种微小的速度差别无妨大碍。
使用Swing的优势:
- Swing 组件不再依赖于本地平台的 GUI,无须采用各种平台的 GUI 交集 ,因此 Swing 提供了大量图形界面组件,远远超出了 AWT 所提供的图形界面组件集。
- Swing 组件不再依赖于本地平台 GUI,因此不会产生与平台 相关的 bug 。
- Swing组件在各种平台上运行时可以保证具有相同的图形界面外观。
Swing 提供的这些优势,让 Java 图形界面程序真正实现了“Write Once, Run Anywhere”的 目标。
🍧🍧Swing的特征:
Swing 组件采用 MVC(Model-View-Controller,即模型一视图一控制器)设计模式:
模型(Model):用于维护组件的各种状态;
视图(View):是组件的可视化表现;
控制器(Controller):用于控制对于各种事件、组件做出响应 。
当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据来更新自己。Swing使用uI代理来包装视图和控制器, 还有一个模型对象来维护该组件的状态。例如,按钮JButton有一个维护其状态信息的模型ButtonModel对象 。 Swing组件的模型是自动设置的,因此一般都使用JButton,而无须关心ButtonModel对象。
Swing在不同的平台上表现一致,并且有能力提供本地平台不支持的显示外观。由于 Swing采用 MVC 模式来维护各组件,所以 当组件的外观被改变时,对组件的状态信息(由模型维护)没有任何影响。因此,Swing可以使用插拔式外观感觉(Pluggable Look And Feel,PLAF)来控制组件外观,使得Swing图形界面在同一个平台上运行时能拥有不同的外观,用户可以选择自己喜欢的外观。相比之下,在 AWT 图形界面中,由于控制组件外观的对等类与具体平台相关 ,因此 AWT 组件总是具有与本地平台相同的外观 。
🍩🍩3.2 Swing基本组件的用法
3.2.1 Swing组件层次
大部分Swing 组件都是 JComponent抽象类的直接或间接子类(并不是全部的 Swing 组件),JComponent 类定义了所有子类组件的通用方法,JComponent类是AWT里java.awt. Container类的子类,这也是AWT和Swing的联系之一。 绝大部分Swing组件类继承了Container类,所以Swing 组件都可作为容器使用(JFrame继承了Frame 类)。
Swing组件和AWT组件的对应关系:
大部分情况下,只需要在AWT组件的名称前面加个,就可以得到其对应的Swing组件名称,但有几个例外:
- JComboBox: 对应于 AWT 里的 Choice 组件,但比 Choice 组件功能更丰富 。
- JFileChooser: 对应于AWT 里的FileDialog组件。
- JScrollBar: 对应于AWT里的Scrollbar组件,注意两个组件类名中 b 字母的大小写差别。
- JCheckBox:对应于AWT里的Checkbox组件,注意两个组件类名中b字母的大小写差别。
. JCheckBoxMenultem:对应于 AWT 里的 CheckboxMenultem 组件,注意两个组件类名中 b字母的大小写差别
Swing组件按照功能来分类:
1.顶层容器:JFrame、JApplet、JDialog和JWindow。
2.中间容器: JPanel、JScrollPane、JSplitPane、JToolBar等。
3.特殊容器:在用户界面上具有特殊作用的中间容器,如JIntemalFrame 、 JRootPane 、 JLayeredPane和JDestopPane等。
- 基本组件:实现人机交互的组件,如 JButton、 JComboBox、JList、JMenu、 JSlider等。
5.不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如JLabel、JProgressBar和JToolTip等。
6.可编辑信息的显示组件:向用户显示能被编辑的格式化信息的组件,如JTable 、 JTextArea和JTextField等
7.特殊对话框组件:可以直接产生特殊对话框的组件,如JColorChooser和JFileChooser等。
3.2.2 AWT组件的Swing实现
Swing 为除 Canvas 之外的所有AWT组件提供了相应的实现,Swing 组件比 AWT 组件的功能更加强大。相对于 AWT 组件,Swing 组件具有如下4个额外的功能:
1.可以为Swing组件设置提示信息。使用 setToolTipText()方法,为组件设置对用户有帮助的提示信息 。
2.很多 Swing 组件如按钮、标签、菜单项等,除使用文字外,还可以使用图标修饰自己。为了允许在 Swing 组件中使用图标,Swing为Icon 接口提供了一个实现类:Imagelcon,该实现类代表一个图像图标。
3.支持插拔式的外观风格。每个JComponent 对象都有一个相应的 ComponentUI 对象,为它完成所有的绘画、事件处理、决定尺寸大小等工作。 ComponentUI 对象依赖当前使用的 PLAF,使用 UIManager.setLookAndFeel()方法可以改变图形界面的外观风格。
4.支持设置边框。Swing 组件可以设置一个或多个边框。 Swing 中提供了各式各样的边框供用户边 用,也能建立组合边框或自己设计边框。 一种空白边框可以用于增大组件,同时协助布局管理器对容器中的组件进行合理的布局。
每个Swing组件都有一个对应的UI类,例如JButton组件就有一个对应的 ButtonUI 类来作为UI代理。每个Swing组件的UI代理的类名总是将该 Swing 组件类名的去掉,然后在后面添加 UI 后缀 。 UI代理类通常是一个抽象基类 ,不同的 PLAF 会有不同的UI代理实现类 。 Swing 类库中包含了几套UI代理,分别放在不同的包下,每套UI代理都几乎包含了所有 Swing组件的 ComponentUI实现,每套这样的实现都被称为一种PLAF实现。
3.2.3 为组件设置边框
很多情况下,我们常常喜欢给不同的组件设置边框,从而让界面的层次感更明显,swing中提供了Border对象
来代表一个边框,下图是Border的继承体系图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Kn3QsGM-1648647726512)(C:\Users\BRILIANT\AppData\Local\Temp\1648103107508.png)]
特殊的Border:
- TitledBorder:它的作用并不是直接为其他组件添加边框,而是为其他边框设置标题,创建该类的对象时,需要传入一个其他的Border对象;
- CompoundBorder:用来组合其他两个边框,创建该类的对象时,需要传入其他两个Border对象,一个作为内边框,一个作为外边框
给组件设置边框步骤:
1.使用BorderFactory或者XxxBorder创建Border的实例对象;
2.调用Swing组件的setBorder(Border b)方法为组件设置边框;
3.2.4 使用JToolBar创建工具条
Swing 提供了JToolBar类来创建工具条,并且可以往JToolBar中添加多个工具按钮。
JToolBar API:
方法名称 方法功能
JToolBar( String name , int orientation)
创建一个名字为name,方向为orientation的工具条对象,其orientation的是取值可以是SwingConstants.HORIZONTAL或SwingConstants.VERTICAL
JButton add(Action a)
通过Action对象为JToolBar工具条添加对应的工具按钮
addSeparator(Dimension size )
向工具条中添加指定大小的分隔符
setFloatable(boolean b )
设定工具条是否可以被拖动
setMargin(Insets m)
设置工具条与工具按钮的边距
setOrientation( int o)
设置工具条的方向
add(Action a)方法:
上述API中add(Action a)这个方法比较难理解,为什么呢,之前说过,Action接口是ActionListener的一个子接口,那么它就代表一个事件监听器,而这里add方法是在给工具条添加一个工具按钮,为什么传递的是一个事件监听器呢?
首先要明确的是不管是菜单条中的菜单项还是工具条中的工具按钮,最终肯定是需要点击来完成一些操作,所以ToolBar以及JMenu都提供了更加便捷的添加子组件的方法add(Action a),在这个方法的内部会做如下几件事:
- 创建一个适用于该容器的组件(例如,在工具栏中创建
一个工具按钮 ; - 从 Action 对象中获得对应的属性来设置该组件(通过 Icon 来设置按钮图标);
- 把Action监听器注册到刚才创建的组件上;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class JToolBarText {
JFrame jFrame = new JFrame("工具条");
JTextArea jTextArea = new JTextArea(6, 35);
JToolBar jToolBar = new JToolBar("j", SwingConstants.HORIZONTAL);
Action pre = new AbstractAction("上一首") {
@Override
public void actionPerformed(ActionEvent e) {
jTextArea.append("上一首\n");
}
};
Action pause = new AbstractAction("暂停") {
@Override
public void actionPerformed(ActionEvent e) {
jTextArea.append("暂停\n");
}
};
Action next = new AbstractAction("下一首") {
@Override
public void actionPerformed(ActionEvent e) {
jTextArea.append("下一首\n");
}
};
public void init() {
jToolBar.add(pre);
jToolBar.addSeparator();
jToolBar.add(pause);
jToolBar.addSeparator();
jToolBar.add(next);
jToolBar.setFloatable(true);
jFrame.add(jToolBar, BorderLayout.NORTH);
jFrame.pack();
jFrame.add(jTextArea);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new JToolBarText().init();
}
}
3.2.5JColorChooser和JFileChooser
Swing提供了]ColorChooser和JFileChooser这两种对话框,可以很方便的完成颜色的选择和本地文件的选择。
3.2.5.1JColorChooser
JColorChooser 用于创建颜色选择器对话框 ,该类的用法非常简单,只需要调用它的静态方法就可以快速生成一个颜色选择对话框:
public static Color showDialog(Component component, string title,color initialcolor)
/* 参数:
componet:指定当前对话框的父组件
title:当前对话框的名称
initialcolor:指定默认选中的颜色
返回值:
返回用户选中的颜色*/
package java2.swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class JColorChoseText {
JFrame jFrame = new JFrame("测试颜色选择");
JTextArea jTextArea = new JTextArea("变色", 5, 30);
JButton jButton = new JButton(new AbstractAction("改变背景颜色") {
@Override
public void actionPerformed(ActionEvent e) {
Color color = JColorChooser.showDialog(jFrame, "颜色选择器", Color.BLUE);
jTextArea.setBackground(color);
}
});
public void init() {
jFrame.add(jTextArea);
jFrame.add(jButton, BorderLayout.SOUTH);
jFrame.pack();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new JColorChoseText().init();
}
}
3.2.5.2 JFileChooser
JFileChooser 的功能与AWT中的 FileDialog 基本相似,也是用于生成"打开文件"、"保存文件“对话框。与FileDialog 不同的是 , JFileChooser无须依赖于本地平台的 GUI ,它由 100‰Java 实现,在所有平台 上具有完全相同的行为,并可以在所有平台上具有相同的外观风格。
JFileChooser使用步骤:
1.创建JFileChooser对象:
JFileChooser chooser = new JFileChooser(“D:\a”);//指定默认打开的本地磁盘路径
2.调用JFileChooser的一系列可选方法,进行初始化
setselectedFile(File file)/setselectedFiles(File[] selectedFiles):设定默认选中的文件
setMultiselectionEnabled(boolean b):设置是否允许多选,默认是单选
setFileselectionMode(int mode):设置可以选择内容,例如文件、文件夹等,默认只能选择文件
3.打开文件对话框
showopenDialog(Component parent):打开文件加载对话框,并指定父组件
showSaveDialog(Component parent):打开文件保存对话框,并指定父组件
4.获取用户选择的结果
File getSelectedFile():获取用户选择的一个文件
File[] getselectedFiles():获取用户选择的多个文件
3.2.6 使用JOptipnPane
3.2.6.1 基本概述
通过 JOptionPane 可以非常方便地创建一些简单的对话框, Swing 已经为这些对话框添加了相应的组件,无须程序员手动添加组件。JOptionPane 提供了如下4个方法来创建对话框。
方法名称 方法功能
showMessageDialog/showinternalMessageDialog消息对话框 ,告知用户某事己发生 ,用户只能单击"确定"按钮,类似于JavaScript的alert函数。
showConfirmDialog/showlnternalConfirmDialog确认对话框,向用户确认某个问题,用户可以选择yes 、no - cancel 等选项。类似于 JavaScript 的comfirm 函数 。该方法返回用户单击了哪个按钮
showinputDialog/showlnternallnputDialog输入对话框,提示要求输入某些信息,类似于JavaScript的 prompt 函数。该方法返回用户输入的字符串 。
showOptionDialog/showlnternalOptionDialog自定义选项对话框,允许使用自 定义选项,可以取代showConfirmDialog 所产生的对话框,只是用起来更复杂。
上述方法都有都有很多重载形式,选择其中一种最全的形式,参数解释如下
showXxxDialog(Component parentComponent,
object message,
string titlel,
int optionType,
int messageType,
Icon icon,
object[] options,
object initialValue)
参数解释:
parentcomponent:当前对话框的父组件
message:对话框上显示的信息,信息可以是字符串、组件、图片等
title∶当前对话框的标题
optionType:当前对话框上显示的按钮类型:DEFAULT_OPTION、YES_NO_OPTION/YES_NO_CANCEL_OPTION、
OK_CANCEL_OPTION
messageType:当前对话框的类型:ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、
QUESTION_MESSAGE、PLAIN_MESSAGE
icon:当前对话框左上角的图标
options:自定义下拉列表的选项
initialValue:自定义选项中的默认选中项
当用户与对话框交互结束后,不同类型对话框的返回值如下:
showMessageDialog:无返回值。
showlnputDialog:返回用户输入或选择的字符串。
showConfirmDialog: 返回 一个整数代表用户选择的选项。
showoptionDialog:返回 一个整数代表用户选择的选项,如果用户选择第一项,则返回 0; 如果选择第二项,则返回1…依此类推。
对 showConfirmDialog 所产生的对话框,有如下几个返回值:
· YES OPTION: 用户 单击了“是"按钮后返回 。
·NO OPTION:用户单击了"否"按钮后返回。
· CANCEL OPTION: 用户单击了"取消"按钮后返回。
OK OPTION:用户单击了"确定"按钮后返回。
CLOSED OPTION: 用户 单击了对话框右上角的“x”按钮后返回。
🍭🍭3.3 Swing中的特殊容器
Swing提供了一些具有特殊功能的容器,这些特殊容器可以用于创建一些更复杂的用户界面。
3.3.1 使用JSplitPane
JSplitPane 用于创建一个分割面板,它可以将 一个组件(通常是一个容器)分割成两个部分,并提供一个分割条用户可以拖动该分割条来调整两个部分的大小。
JSplitPane使用步骤:
1.创建JSplitPane对象
通过如下构造方法可以创建JSplitPane对象
JSplitPane(int newOriertation, Component newLeftcomponent,Component newRightcomponent)
newOrientation:指定JSplitPane容器的分割方向:
如果值为JSplitPane.VERTICAL_SPLIT,为纵向分割;
如果值为JSplitPane.HORIZONTAL_SPLIT,为横向分割;
newLeftcomponent:左侧或者上侧的组件;
newRightcomponent:右侧或者下侧的组件;
- 设置是否开启连续布局的支持(可选)
setContinuousLayout(boolean newContinuousLayout):
默认是关闭的,如果设置为true,则打开连续布局的支持,但由于连续布局支持需要不断的重绘组件,所以效率会
低一些(就是拖动边框改变布局)
- 设置是否支持"一触即展"的支持(可选)
setOneTouchExpandable(boolean newValue):
默认是关闭的,如果设置为true,则打开"一触即展"的支持
4.其他设置
setDividerLocation(double proportionalLocation):设置分隔条的位置为JSplitPane的某个百分比
setDividerLocation(int location):通过像素值设置分隔条的位置
setDividerSize(int newSize):通过像素值设置分隔条的大小
setLeftcomponent(Component comp)/setTopComponent(Component comp)/setRightComponent(Component
comp)/setBottomComponent(Component comp):设置指定位置的组件
3.3.2 使用TabledPane
JTabbedPane可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器具有相同大小的组件摆放区域。通过这种方式, 就可以在一个容器里放置更多的组件 , 例如右击桌面上的" 我的电脑 "图标,在弹出的快捷菜单里单击"属性"菜单页 ,就可以看 到 一个"系统属性“对话框,这个对话框里包含了 若干个标签页。
如下步骤进行:
1.创建JTabbedPane对象
JTabbedPane(int tabPlacement, int tabLayoutPolicy):
tabPlacement:
指定标签标题的放置位置,可以选择 SwingConstants中的四个常量:TOP、LEFT、BOTTOM、RIGHT
tabLayoutPolicy:
指定当窗口不能容纳标签页标题时的布局策略,可以选择JTabbedPane .WRAP_TAB_LAYOUT和JTabbedPane.SCROLL_TAB_LAYOUT
- 通过JTabbedPane对象堆标签进行增删改查
addTab(String title,Icon icon, Component component, String tip):添加标签
title:标签的名称
icon:标签的图标
component:标签对应的组件
tip:光标放到标签上的提示
insertTab(String title, Icon icon, Component component, String tip, int index):插入标签页
title:标签的名称
icon:标签的图标
component:标签对应的组件
tip:光标放到标签上的提示
index:在哪个索引处插入标签页
setcomponentAt(int index, component component):修改标签页对应的组件
index:修改哪个索引处的标签
component:标签对应的组件
removeTabAt(int index):
index:删除哪个索引处的标签
- 设置当前显示的标签页
setSelectedIndex(int index):设置哪个索引处的标签被选中 - 设置JTabbedPane的其他属性
setDisabledIconAt(int index, Icon disabledIcon):将指定位置的禁用图标设置为 icon,该图标也可以是null表示不使用禁用图标。
setEnabledAt(int index, boolean enabled):设置指定位置的标签页是否启用。
setTitleAt(int index, string title):设置指定位置标签页的标题为 title,该title可以是null,这表明设置该标签页的标题为空。
setToolTipTextAt(int index, string toolTipText):设置指定位置标签页的提示文本 。
5.为JTabbedPane设置监听器
addChangeListener(ChangeListener l)
🍱🍱3.4JProgressBar、ProgressMonitor、BoundedRangeModel实现进度条
进度条是图形界面中广泛使用的GUI 组件,当复制一个较大的文件时,操作系统会显示一个进度条,用于标识复制操作完成的比例:当启动 Eclipse 等程序时,因为需要加载较多的资源 ,故而启动速度较慢 ,程序也会在启动过程中显示一个进度条 ,用以表示该软件启动完成的比例
3.4.1 创建进度条
使用IProgressBar创建进度条的步骤:
1.创建JProgressBar对象
public JProgressBar(int orient, int min, int max):
orient:方向
min:最小值
max:最大值
- 设置属性
setBorderPainted(boolean b):设置进度条是否有边框
setIndeterminate(boolean newValue):设置当前进度条是不是进度不确定的进度条,如果是,则将看到一个滑块在
进度条中左右移动
setstringPainted(boolean b):设置进度条是否显示当前完成的百分比 - 获取和设置当前进度条的进度状态
setValue(int n):设置当前进度值
double getPercentComplete():获取进度条的完成百分比String getString();返回进度字符串的当前值
Swing组件大都将外观显示和内部数据分离,JProgressBar 也不例外, JProgressBar 组件有一个内置的用于保存其状态数据的Model对象,这个对象由BoundedRangeModel对象表示,程序调用IProgressBar对象的方法完成进度百分比的设置,监听进度条的数据变化,其实都是通过它内置的BoundedRangeModel对象完成的。下面的代码是对之前代码的改进,通过BoundedRangeModel完成数据的设置,获取与监听。
3.4.2 创建进度对话框
ProgressMonitor的用法与JProgressBar 的用法基本相似,只是ProgressMonitor可以直接创 建一个进度对话框,它提供了下面的构造器完成对话框的创建:
public ProgressMonitor(Component parentComponent,Object message,String note, int min,int max):
parentComponent:对话框的父组件,可为null
message:对话框的描述信息
note:进度的提示信息
min:进度条的最小值
max:进度条的最大值
使用 ProgressMonitor 创建的对话框里包含的进度条是非常固定的,程序甚至不能设置该进度条是否包含边框(总是包含边框),不能设置进度不确定,不能改变进度条的方向(总是水平方向)。
🍥🍥3.5 JList、JComboBox实现列表框
无论从哪个角度来看,JList和JComboBox都是极其相似的,它们都有一个列表框,只是JComboBox的列表框需要以下拉方式显示出来;JList和JComboBox都可以通过调用setRenderer()方法来改变列表项的表现形式。
甚至维护这两个组件的 Model都是相似的,JList使用ListModel,JComboBox使用ComboBoxModel而ComboBoxModel 是 ListModel 的子类 。
3.5.1 简单列表框
使用IList或]ComboBox实现简单列表框的步骤:
- 创建JList或JComboBox对象
JList(final E[] listData):创建JList对象,把listData数组中的每项内容转换成一个列表项展示
JList(final Vector<P extends E> listData):创建JList对象,把listData数组中的每项内容转换成一个列表项
展示
JComboBox(E[] items):
JComboBox(Vector<E> items):
2.设置JList或JComboBox的外观行为
JList
addSelectionInterval(int anchor,int lead):在已经选中列表项的基础上,增加选中从anchor到lead索引范围内的所有列表项
setFixedCellHeight(int height)/setFixedCellWidth(int width):设置列表项的高度和宽度setLayoutorientation(int layoutorientation):设置列表框的布局方向
setselectedIndex(int index):设置默认选中项
setSelectedIndices(int[] indices):设置默认选中的多个列表项
setSelectedValue(object anobject,boolean shouldscroll):设置默认选中项,并滚动到该项显示
setSelectionBackground(Color selectionBackground):设置选中项的背景颜色
setselectionForeground(color selectionForeground):设置选中项的前景色
setselectionInterval(int anchor, int lead):设置从anchor到lead范围内的所有列表项被选中
setselectionMode(int selectionMode):设置选中模式,默认没有限制,也可以设置为单选或者区域选中
setVisibleRowCount(int visibleRowCount):设置列表框的可视高度足以显示多少行列表项
JComboBox
setEditable(boolean aFlag):设置是否可以直接修改列表文本框的值,默认为不可以
setMaximumRowCount(int count):设置列表框的可视高度足以显示多少行列表项
setselectedIndex(int anIndex):设置默认选中项
setselectedItem(object anobject):根据列表项的值,设置默认选中项
3.设置监听列表项的变化,JList通过addListSelectionListener完成,JComboBox通过additemListener完成
3.5.2 不强制存储列表项的ListModel和ComboBoxModel与JProgressBar一样,JList和JComboBox也采用了MVC的设计模式,JList和JComboBox只负责外观的显示,而组件底层的状态数据则由对应的Model来维护。JList对应的Model是ListModel接口,JComboBox对应的Model是ComboBox接口,其代码如下:
public interface ListModel<E>{
int getsize();
E getElementAt(int index);
void addListDataListener(ListDataListener l);
void removeListDataListener(ListDataListener l);
}
public interface ComboBoxModel<E> extends ListModel<E> {
void setselectedItem(object anItem);
object getselectedItem();}
从上面接口来看,这个ListModel不管JList里的所有列表项的存储形式,它甚至不强制存储所有的列表项,只要ListModel的实现类提供了getSize()和getElementAt()两个方法,JList就可以根据该ListModel对象来生成列表框ComboBoxModel 继承了 ListModel ,它添加了"选择项"的概念,选择项代表 ]ComboBox 显示区域内可见的列表项 。
在使用JList和JComboBox时,除了可以使用jdk提供的Model实现类,程序员自己也可以根据需求,自己定义Model的实现类,实现对应的方法使用。
更多推荐
所有评论(0)