1、swing组件分类
有swing组件简介知道Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。
基本组件如下:
JLabel(标签) JButton(按钮) JRadioButton(单选按钮)
JCheckBox(复选框) JToggleButton(开关按钮) JTextField(文本框)
JPasswordField(密码框) JTextArea(文本区域) JComboBox(下拉列表框)
JList(列表框) JProgressBar(进度条) JSlider(滑块)
面板组件为:
JPanel(面板) JScrollPane(滚动面板) JSplitPane(分隔面板)
JTabbedPane(选项卡面板)JLayeredPane(层级面板) JDesktopPane(桌面面板类 )
其他组件:
JFrame(窗口) JDialog、JOptionPane(对话框) JFileChooser(文件选择器)
JColorChooser(颜色选择器)JMenuBar(菜单栏) JToolBar(工具栏)
JPopupMenu(弹出菜单) JTable(表格) JTree(树)
JInternalFrame(内部窗口)
这些组件安装功能划分顶层容器、中间容器、基本组件
顶层容器:JFrame JDialog
中间容器:JPanel JScrollPane JSplitPane JTabbedPane JLayeredPane
JMenuBar JToolBar JPopupMenu JInternalFrame
基本组件:JLabel JButton JRadioButton JCheckBox JToggleButton JTextField JPasswordField
JTextArea JComboBox JList JProgressBar JSlider
JFileChooser JColorChooser JTable JTree
之前的学习中介绍了一部分的组件,下面来介绍一些高级组件。
2、JSplitPane(分隔面板)
分割面板由javax.swing.JSplitPane类实现,用来将其所在的区域分割成两部分,程序员可以根据实际情况决定是在水平方向上分割还是在垂直方向上分割。在这两部分之间存在一个分隔条,通过调整分隔条的位置,可以改变这两部分的相对大小,用户可以根据实际情况自行调整。该功能可以有效地增加界面的可用空间,这也是分割面板的主要特点。
// 创建一个水平方向的分割面板
final JSplitPane hSplitPane = new JSplitPane();
// 分隔条左侧的宽度为40像素
hSplitPane.setDividerLocation(40);
// 添加到指定区域
getContentPane().add(hSplitPane, BorderLayout.CENTER);
// 在垂直面板左侧添加一个标签组件
hSplitPane.setLeftComponent(new JLabel(" 1"));
setDividerLocation 设置分隔条一侧的宽度
setLeftComponent 分隔条左侧添加组件
setDividerSize 设置分隔条宽度
setOneTouchExpandable(true);// 由小三角进行隐藏
3、JTabbedPane(选项卡面板)
选项卡面板由javax.swing.JTabbedPane类实现,它实现了一个多卡片的用户界面,通过它可以将一个复杂的对话框分割成若干个选项卡,实现对信息的分类显示和管理,使界面更简洁大方,还可以有效地减少窗体的个数。
final JTabbedPane tabbedPane = new JTabbedPane();
// 设置选项卡标签的布局方式
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);//选项卡多的时候,一行显示右边可以滚动
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
// 获得被选中选项卡的索引
int selectedIndex = tabbedPane.getSelectedIndex();
// 获得指定索引的选项卡标签
String title = tabbedPane.getTitleAt(selectedIndex);
System.out.println(title);
}
});
getContentPane().add(tabbedPane, BorderLayout.CENTER);
URL resource = ExampleFrame_02.class.getResource("/tab.JPG");
ImageIcon imageIcon = new ImageIcon(resource);
final JLabel tabLabelA = new JLabel();
tabLabelA.setText("选项卡11A");
// 将标签组件添加到选项卡中
tabbedPane.addTab("选项卡A", imageIcon, tabLabelA, "点击查看选项卡A");
声明好选项卡面板后,添加新的选项卡函数
tabbedPane.addTab("选项卡A", imageIcon, tabLabelA, "点击查看选项卡A");
* title: 选项卡的标题
* icon: 选项卡的图标
* tip: 当鼠标移到该选项卡时,悬浮提示的文本
* component: 选中该选项卡时显示的内容组件
void addTab(String title, Icon icon, Component component, String tip)
// 设置当前选中的选项卡
void setSelectedIndex(int index)
// 获取当前选中的选项卡索引
int getSelectedIndex()
// 添加选项卡选中状态改变的监听器
void addChangeListener(ChangeListener l)
4、JDesktopPane(桌面面板类 )和JInternalFrame(内部窗口)
用于创建多文档界面或虚拟桌面的容器。用户可创建 JInternalFrame 对象并将其添加到 JDesktopPane。JDesktopPane 扩展了 JLayeredPane,以管理可能的重叠内部窗体。它还维护了对 DesktopManager 实例的引用,这是由 UI 类为当前的外观(L&F)所设置的。注意,JDesktopPane 不支持边界。
多个JInternalFrame可以放到一个JDesktopPane里面
// 创建一个桌面面板对象
final JDesktopPane desktopPane = new JDesktopPane();
getContentPane().add(desktopPane, BorderLayout.CENTER);
final JLabel backLabel = new JLabel(); // 创建一个标签组件对象
// 获得背景图片的路径
URL resource = this.getClass().getResource("/back.JPG");
ImageIcon icon = new ImageIcon(resource); // 创建背景图片对象
backLabel.setIcon(icon); // 令标签组件显示背景图片
// 设置组件的显示位置及大小
backLabel.setBounds(0, 0, icon.getIconWidth(), icon
.getIconHeight());
// 将标签组件添加到指定索引位置
desktopPane.add(backLabel, new Integer(Integer.MIN_VALUE));
// 创建一个内部窗口 JInternalFrame internalFrame = new JInternalFrame(
"内部窗口", // title
true, // resizable
true, // closable
true, // maximizable
true // iconifiable );
// 设置窗口的宽高
internalFrame.setSize(200, 200);
// 设置窗口的显示位置
internalFrame.setLocation(50, 50);
// 内部窗口的关闭按钮动作默认就是销毁窗口,所有不用设置
// internalFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
// 创建内容面板
JPanel panel = new JPanel();
// 添加组件到面板
panel.add(new JLabel("Label001"));
panel.add(new JButton("JButton001"));
// 设置内部窗口的内容面板
internalFrame.setContentPane(panel);
5、JMenuBar(菜单栏)和JPopupMenu(弹出菜单)
JMenuBar menuBar = new JMenuBar();// 创建菜单栏对象
setJMenuBar(menuBar);// 将菜单栏对象添加到窗体的菜单栏中
JMenu menu = new JMenu("菜单名称");// 创建菜单对象
menuBar.add(menu);// 将菜单对象添加到菜单栏对象中
JMenuItem menuItem = new JMenuItem("菜单项名称");// 创建菜单项对象
menuItem.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu.add(menuItem);// 将菜单项对象添加到菜单对象中
JMenu sonMenu = new JMenu("子菜单名称");// 创建菜单的子菜单对象
menu.add(sonMenu);// 将子菜单对象添加到上级菜单对象中
JMenuItem sonMenuItem = new JMenuItem("子菜单项名称");// 创建子菜单的菜单项对象
sonMenuItem.addActionListener(new ItemListener());// 为菜单项添加事件监听器
sonMenu.add(sonMenuItem);// 将子菜单的菜单项对象添加到子菜单对象中
private class ItemListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JMenuItem menuItem = (JMenuItem) e.getSource();
System.out.println("您单击的是菜单项:" + menuItem.getText());
}
}
代码运行效果如下图:
弹出式菜单 如下图效果
首先声明定义好弹出式菜单,这个跟普通菜单一样,然后在监测到鼠标右击的时候进行显示
final JPopupMenu popupMenu = new JPopupMenu();// 创建弹出式菜单对象
// 为窗体的顶层容器添加鼠标事件监听器
getContentPane().addMouseListener(new MouseAdapter() {
// 鼠标按键被释放时触发该方法
public void mouseReleased(MouseEvent e) {
// 判断此次鼠标事件是否为该组件的弹出菜单触发事件
// 如果是则在释放鼠标的位置弹出菜单
if (e.isPopupTrigger())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
});
个性化定制菜单
fileMenu.setMnemonic('F');// 设置快捷键
eRadioButtonItem.setAccelerator(KeyStroke.getKeyStroke(VK_E,CTRL_MASK | ALT_MASK));// 设置加速器为“Ctrl+Alt+E”
fileMenu.addSeparator();// 添加分隔线
cutItem.setIcon(icon);//设置图标
6、JToolBar(工具栏)
JToolBar 提供了一个用来显示常用控件的容器组件。
工具栏中提供了快速执行常用命令的按钮,可以将它随意拖拽到窗体的四周,甚至是脱离窗体
final JToolBar toolBar = new JToolBar("工具栏");// 创建工具栏对象
toolBar.setFloatable(true);// 设置为允许拖动
getContentPane().add(toolBar, BorderLayout.NORTH);// 添加到网格布局的上方
final JButton newButton = new JButton("新建");// 创建按钮对象
newButton.addActionListener(new ButtonListener());// 添加动作事件监听器
toolBar.add(newButton);// 添加到工具栏中
7、JFileChooser(文件选择器)
JFileChooser类提供了一个供用户选择文件的对话框。利用该类创建文件选择对话框以及获取用户选择文件的基本步骤如下:
(1)创建一个JFileChooser类的对象。
(2)默认情况下每次只能选择一个文件,如果希望允许同时选择多个文件,可以通过调用方法setMultiSelectionEnabled(boolean b)设置,将入口参数设为true即表示允许多选。
(3)默认情况下只允许选择文件,如果希望允许选择文件夹,可以通过调用方法setFileSelection- Mode(int mode)设置,入口参数可选的静态常量有FILES_ONLY(只允许选择文件)、DIRECTORIES_ ONLY(只允许选择路径)和FILES_AND_DIRECTORIES(均可选择)。
(4)如果只希望在对话框中列出指定类型的文件,可以调用setFileFilter(FileFilter filter)方法设置文件过滤器。
// 创建文件选择对话框
fileChooser = new JFileChooser();
// 设置文件过滤器,只列出JPG或GIF格式的图片
FileFilter filter = new FileNameExtensionFilter(
"图像文件(JPG/GIF)", "JPG", "JPEG", "GIF");
fileChooser.setFileFilter(filter);
(5)设置完成后调用showOpenDialog(Component parent)方法显示对话框,该方法将返回一个int型值,用来判断用户是否选择了文件或路径。
(6)如果用户选择了文件或路径,可以通过方法getSelectedFile()或getSelectedFiles()获得,方法getSelectedFile()返回的是File对象,方法getSelectedFiles()返回的是File型数组。
下面代码是定义一个按钮button,点击后弹出文件选择窗口,选择文件后把文件名字显示到文本控件textField上
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();// 创建文件选择对话框
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
// 显示文件选择对话框
int i = fileChooser.showOpenDialog(getContentPane());
// 判断用户单击的是否为“打开”按钮
if (i == JFileChooser.APPROVE_OPTION) {
// 获得选中的文件对象
File selectedFile = fileChooser.getSelectedFile();
// 显示选中文件的名称
textField.setText(selectedFile.getName());
}
}
});
8、JProgressBar(进度条)
利用JProgressBar类可以实现一个进度条。进度条是一个矩形组件,通过填充它的部分或全部来指示一个任务的执行情况。
创建进度条对象
final JProgressBar progressBar = new JProgressBar();// 创建进度条对象
progressBar.setStringPainted(true);// 设置显示提示信息
progressBar.setIndeterminate(false);// 设置采用确定进度条
progressBar.setString("升级进行中......");// 设置提示信息
final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
gridBagConstraints_1.insets = new Insets(5, 0, 0, 0);
gridBagConstraints_1.gridy = 1;
gridBagConstraints_1.gridx = 0;
getContentPane().add(progressBar, gridBagConstraints_1);
然后把进度条作为一个参数传入到一个线程类里面
new Progress(progressBar, button).start();// 利用线程模拟一个在线升级任务
在线程里面各个地方设置进度值
progressBar.setValue(10);// 设置任务完成百分比
9、TrayIcon(系统托盘)
程序默认没有系统托盘图标,可以用下面方法添加:
if (SystemTray.isSupported()) {// 判断系统是否支持系统托盘功能
URL resource = this.getClass().getResource("/img.JPG");// 获得图片路径
ImageIcon icon = new ImageIcon(resource);// 创建图片对象
PopupMenu popupMenu = new PopupMenu();// 创建弹出菜单对象
MenuItem item = new MenuItem("退出");// 创建“退出”菜单项目对象
// 为菜单项目添加动作监听器
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);// 退出系统
}
});
popupMenu.add(item);// 将“退出”菜单项目添加到弹出菜单中
TrayIcon trayIcon = new TrayIcon(icon.getImage(), "使用系统托盘",
popupMenu);// 创建托盘图片对象
// 获得系统托盘对象
SystemTray systemTray = SystemTray.getSystemTray();
systemTray.add(trayIcon);// 将托盘图片添加到系统托盘中
}
并且在托盘上添加了一个菜单
10、Desktop(桌面集成控件)
利用Desktop类可以在Java应用程序中启动已经在本机上注册的应用程序,如通过启动默认的浏览器显示指定的网站、打开或编辑指定的文件等。
通过Desktop类的静态方法isDesktopSupported()可以判断当前系统是否提供了对该类的支持,如果支持则返回true,否则将返回false。
Desktop类提供的每一种操作都属于Desktop.Action类表示的一种动作类型,所以在执行具体操作之前,还可以通过方法isSupported(Action action)判断是否支持相应的动作。
if (Desktop.isDesktopSupported()) { // 判断系统是否提供了对该类的支持
Desktop desktop = Desktop.getDesktop();// 获得该类的对象
// 判断是否支持“浏览”动作
if (desktop.isSupported(Desktop.Action.BROWSE))
desktop.browse(new URI(
"http://www.mrbccd.com"));// 浏览网站
}