局域网通信JAVA课程设计.docx_第1页
局域网通信JAVA课程设计.docx_第2页
局域网通信JAVA课程设计.docx_第3页
局域网通信JAVA课程设计.docx_第4页
局域网通信JAVA课程设计.docx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科生课程设计课程名称Java程序设计 课程设计题 目局域网通信学 号201440930236学生姓名王小冬所在专业信息工程所在班级信工2班成 绩 课程设计时间:2017年5月 日-2017年5月 日目录摘 要- 1 -引 言- 1 -设计目的与任务- 1 -系 统 设 计- 1 -1.系统目标- 1 -2.系统功能结构- 2 -3.数据库设计- 2 -1数据库分析- 2 -2数据库逻辑结构设计- 3 -3 文件夹组织结构- 3 -4.主窗体设计- 4 -5.公共模块设计- 4 -6.系统托盘模块设计- 4 -7.系统操作模块设计- 5 -8. 用户管理模块设计- 6 -9. 通讯模块设计- 7 -课程设计总结- 8 -参考文献- 8 -附录- 9 -EQ.JAVA- 9 -Dao.JAVA- 24 -UserTreeRanderer接口- 29 -局域网内部通信摘 要局域通信使亲友的沟通突破时空极限,使人与人的沟通突破上下级极限,使陌生人的沟通突破环境极限,使自我与外界的沟通突破心理极限。作为使用频率最高的网络软件,类似QQ软件已经突破了作为技术工具的极限,被认为是现代交流方式的象征,并构建起一种新的社会关系。它是迄今为止对人类社会生活改变最为深刻的一种网络新形态,没有极限的沟通将带来没有极限的生活。引 言Java语言是SUN公司于1995年5月推出的新一代面向对象的计算机通用编程语言,是继WWW之后又一引起世界轰动的产品。Java语言的特点是跨平台和强大的网络编程功能。在Java语言诞生之前,Internet已存在,所以Java语言本身就封装了大量进行网络编程的类库,使得网络编程功能强大,同时又简化了网络编程的操作。因此利用Java语言可以开发出功能强大的网络应用程序。本次课程设计的是局域网中的通信程序设计,能够实现局域网的内部通讯、增添好友、群聊功能。程序设计有点复杂,逻辑性很强,而且代码量超多,但是此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的逻辑能力。因此,我觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。设计目的与任务本课程设计的目的和任务:通过Java程序设计的一些重要理论基础来实现“局域网内通信”, 该程序具有添加删除好友、局域网自动识别在线用户、即时通讯、群聊功能。实现技术:Java、Eclipse及JAVA数据库,本设计操作简单、方便,快捷、准确、数据存储安全可靠,针对自身特点去除了不必要的冗余东西,使系统负担最小,速度最快;采用更高的安全机制,使数据更加安全,用户可以放心的使用。系 统 设 计1.系统目标 根据企业对内部通讯系统的要求,本系统可以实现以下目标: 操作简单方便、界面简洁美观。 在通讯窗口显示对方 IP 信息。 局域网内用户自动搜索。 系统运行稳定、安全可靠。 2.系统功能结构 企业内部通讯系统信息通讯用户管理系统设置用户搜索访问对方主机发送信史 企业内部通讯系统的功能结构如图 1 所示。 图 1 企业内部通讯系统的功能结构图 3.数据库设计 1数据库分析 本系统是一个桌面应用程序,它可以直接在本地计算机上运行,而不需要像 Web 应用那样部署到指定的服务器中。所以企业内部通讯系统的数据库应该随系统存在,即数据库和企业内部通讯系统在同一个计算机中,将数据库和应用程序捆绑在一起,可以节省开销、提升系统安全性。本系统采用 JavaDB 数据库。其数据库运行环境如下: 硬件平台 CPU:P4 1.6GHz。 内存:128MB 以上。 硬盘空间:100MB。 软件平台。 操作系统:Windows 2003。 数据库:JavaDB。 Java 虚拟机:JDK 6.0。 2企业内部通讯系统的 ER 图 企业内部通讯系统包含用户实体,该实体用于记录用户信息。 用户实体是企业内部通讯系统的通讯用户,它记载了系统搜索或添加的所有用户信息。用户实体主要包括用户 IP 地址、主机名称、用户名称、提示文本和头像信息,如图 2 所示。 用户 IP地址 头像用户名称提示文本主机名称 图2 用户实体ER图 2数据库逻辑结构设计 在本系统中创建了一个数据库 db_EQ,该数据库只包含一张用户信息数据表,下面介绍该数据表的逻辑结构。 用户信息表(tb_users)主要用来保存企业内的通讯用户,即职工信息。表 tb_users 的结构如表 1 所示。 表 1 表 tb_users 的结构 字 段 名 数 据 类 型 是 否 为 空是 否 主 键 默 认 值 描 述 ip varchar(16) No Yes 用户 IP 地址 host varchar(30) Yes No Null 主机名称 name varchar(20) Yes No Null 姓名 tooltip varchar(50) Yes No Null 提示文本 icon varchar(50) Yes No Null 头像 3 文件夹组织结构 图 3在进行系统开发之前,需要规划文件夹组织结构。也就是说,建立多个文件夹,对各个功能模块进行划分,实现统一管理,这样做的好处是易于开发、管理和维护。本系统的文件夹组织结构如图 3 所示。- 33 -4.主窗体设计主窗体界面也是企业内部通讯系统的用户列表,它由用户列表、系统选项卡等组成。其中系统选项卡用于切换不同的管理界面。主窗体的运行效果如图 4 所示。 图 45.公共模块设计 在本系统的项目空间中,有一部分模块是公用的,它们被多个模块重复调用完成指定的业务逻辑,或者是多个模块甚至整个系统的配置信息,本系统定义的公共类包括操作数据库的 Dao 类和 Resource 系统工具类。其中 Dao 类位于 com.lzw.dao 包,Resource 类位于 com.lzw.system 包。这些公共类的详细代码可参见本书附带光盘中的源代码。6.系统托盘模块设计 系统托盘模块用于定义系统栏图标,企业内部通讯系统的主窗体是继承对话框窗体编写的,该窗体在系统任务栏中不会显示相应的任务标题,主窗体最小化之后将会隐藏,这时必须使用系统托盘中的图标执行显示窗体的命令。本系统在系统托盘中的效果如图 23.5 所示。 图 5系统托盘模块使用了 JDK 6.0 提供的新功能,这些功能中包含SystemTray 类和 TrayIcon 类,它们分别用于创建系统托盘和系统栏图标对象。另外,系统栏图标使用了弹出菜单技术,为企业内部通讯系统提 图 23.5 系统托盘效果图供了部分快捷操作。创建弹出菜单和菜单项由 PopupMenu 类和MenuItem 类实现,一个 PopupMenu 对象可以使用 add()方法添加多个 MenuItem 对象,每个 MenuItem 对象必须使用 addActionListener()方法添加实现指定菜单项业务逻辑的监听器,其监听器的实现和普通按钮相同。 7.系统操作模块设计 企业内部通讯系统的系统操作模块主要用于用户搜索、指定 IP 搜索范围等功能。在企业内部通讯系统第一次运行时,用户搜索功能可以搜索内部网络中所有正在运行的计算机,并使用计算机的信息创建用户对象,然后将该用户对象保存到数据库中。系统工具模块的运行效果如图 6 所示。 图 6 系统工具模块的运行图8. 用户管理模块设计用户管理模块类似聊天软件的好友列表,它包含了所有用户信息。另外,在用户名称上单击鼠标右键,会弹出管理菜单,菜单中包括更名、添加用户、删除用户、信史群发和访问主机资源,其中访问主机资源是访问该用户的共享文件夹,如果该用户没有共享文件夹或者禁止访问,将导致访问失败。用户管理模块的运行效果如图 7 所示。 图 7 用户管理模块的运行效果 用户管理模块主要用于显示用户列表,这个用户列表是使用 JTree 树控件实现的。JTree 控件的树节点默认的界面效果,难以满足用户列表的外观,用户列表需要绘制当前选择用户的边框、头像、状态图标等信息。为提高用户列表的美观性,用户管理模块必须实现 TreeCellRenderer 接口,创建实现显示自定义图标的树单元格渲染器,这样就可以自定义树节点的样式。 TreeCellRenderer 接口只定义了一个 getTreeCellRendererComponent()方法,该方法将关于绘制树节点的全部信息作为参数,在实现自己的树单元格渲染器时,可以忽略不需要的参数,也可以直接访问树节点 value 参数。getTreeCellRendererComponent()方法的语法格式如下: Component getTreeCellRendererComponent(JTree tree,Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) 语法中涉及的参数说明如表 2 所示。 表 2 参数说明 参 数 名 称 说 明 tree JTree 树对象 value 当前树单元格的值 selected 树单元格(也就是树节点)是否被选中 expanded 节点是否展开 leaf 是否是树的叶子节点 row 当前节点所做行号 hasFocus 当前节点是否拥有焦点 9. 通讯模块设计 通讯模块是企业内部通讯系统的核心模块,它用于不同职工之间的通讯,这种通讯方式能够实现多个职工之间的通话,而不存在类似电话的占线问题,增加了任务分配的新方式,从而提高企业的工作效率。该模块可以使用 UDP 协议和系统信史两种方式发送通讯信息。通讯模块的界面运行效果如图 8 所示。 图 8 通讯模块的界面运行效果 通讯模块使用基于 UDP 协议的数据报和套接字实现计算机之间的信息通讯。UDP(User Datagram Protocol)协议就是“用户数据报协议”,它是一种无连接协议,在用该协议进行数据传输时,发送方只需要知道对方的 IP 地址和端口号就可以发送数据,并不需要进行连接,当连接的远程主机端口号处于监听状态时,UDP 必须处于连接状态。 Java 中对 UDP 数据报的发送和接收是通过 DatagramSocket 类实现的,DatagramPacket 类表示 UDP 数据包,它封装了数据报的属性和数据,这两个类的工作流程如图 9 所示。 DatagramSocket : 端口 1234 DatagramSocket : 端口 1234 DatagramSocket: 端口 4321 DatagramSocket: 端口 4321 DatagramPacket目的:host:4321DatagramPacket目的:host:4321DatagramPacket目的:host:4321DatagramPacket目的:host:4321 图 9 DatagramSocket 类和 DatagramPacket 类的工作流程课程设计总结十天来忙碌紧张的课程设计,使我有机会对本专业的基本理论、专业知识和基本技术有了更深入的了解和体会,使我在三年中所学到的知识得到了系统和升华,真正达到了学以致用。局域网即时通信利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本。本设计基于C/S结构,在Java开发环境下,使用Java编程语言进行开发。主要实现了聊天软件的部分功能,即文字聊天、文件传输等功能。由于水平有限,对于数据库的操作还不是相当的熟练,有时会出现信息不能及时更新到数据库的问题,导致错误。在做需求分析的时候,由于考虑欠佳,等到做软件的时候又出现了问题,在返工为时太晚,尽管已经想办法补救,但难免出现漏洞。准确分析了整个通讯过程,是这次系统设计的一大收获。参考文献1结城浩日.Java多线程设计模式M.博硕文化译,北京:中国铁道出版社,20032Dreamtech软件研发组美.即时消息传递系统源代码解析M.李军译,北京电子工业出版社,3哈罗德美.Java网络编程M.刘东华译,北京:中国电力出版社,2000,4软件工程,李代平编,清华大学出版社;计算机软件开发文档编写指南,5李春葆,曾平编著.数据库原理与应用.北京:清华大学出版社,2005。附录以下列出程序设计中使用到的主要类名与相关介绍:EQ.JAVAEQ类用来实现主窗体的设计包括:(1)创建JXCFrame类,在类中创建对象,为窗体添加选项卡面板,并添加用户列表、系统工具、系统设置3个选项卡和状态栏标签、公告按钮等属性。(2)在构造方法中初始化窗体上的控件、数据库操作类、首选项对象等属性,另外为窗体和公告信息按钮添加事件监听器等。(3)初始化Socket服务器,指定端口使用1111,如果初始化失败,提示用户服务器端口被占用,或则是本软件已经运行,并退出程序。该步骤很关键,它用于接收其他用户发送的通信信息,如果启动失败将无法接收信息,所以必须退出系统。(4)编写initUserInfoButton()方法,用于初始化本地用户信息,并在主窗体左上角显示本地用户的头像和名称,在用户修改本地用户名时,它会同步更新。(5)编写main()方法,该方法是主程序的入口方法,在该方法中首先获取用户设置的界面外观,其中包括“当前系统”和“JAVA默认”两种外观,然后调用UIManager类的setLookAndFeel()方法设置指定的外观,并生成主窗体对象,最后初始化服务端口和系统栏图标。详细代码:package com.lzw;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dialog;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.Image;import java.awt.Insets;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.Rectangle;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.TrayIcon.MessageType;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ComponentAdapter;import java.awt.event.ComponentEvent;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeEvent;import java.beans.VetoableChangeListener;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;import .UnknownHostException;import java.util.Date;import java.util.Scanner;import java.util.Stack;import java.util.prefs.Preferences;import javax.swing.BoxLayout;import javax.swing.DefaultComboBoxModel;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JPopupMenu;import javax.swing.JProgressBar;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextField;import javax.swing.JToggleButton;import javax.swing.ScrollPaneConstants;import javax.swing.SwingConstants;import javax.swing.UIManager;import javax.swing.border.BevelBorder;import javax.swing.border.EmptyBorder;import javax.swing.border.TitledBorder;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.text.InternationalFormatter;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath;import com.lzw.dao.Dao;import com.lzw.frame.TelFrame;import com.lzw.system.Resource;import com.lzw.userList.ChatTree;import com.lzw.userList.User;public class EQ extends Dialog private JTextField ipEndTField;private JTextField ipStartTField;private JTextField userNameTField;private JPasswordField passwordTField;private JTextField placardPathTField;private JTextField updatePathTField;private JTextField pubPathTField;public static EQ frame = null;private ChatTree chatTree;private JPopupMenu popupMenu;private JTabbedPane tabbedPane;private JToggleButton searchUserButton;private JProgressBar progressBar;private JList faceList;private JButton selectInterfaceOKButton;private DatagramSocket ss;private final JLabel stateLabel;private static String user_dir;private static File localFile;private static File netFile;private String netFilePath;private JButton messageAlertButton;private Stack messageStack;private ImageIcon messageAlertIcon;private ImageIcon messageAlertNullIcon;private Rectangle location;public static TrayIcon trayicon;private Dao dao;public final static Preferences preferences = Preferences.systemRoot();private JButton userInfoButton;public static void main(String args) try String laf = preferences.get(lookAndFeel, java默认);if (laf.indexOf(当前系统)-1)UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();EQ frame = new EQ();frame.setVisible(true);frame.SystemTrayInitial();/ 初始化系统栏frame.server();frame.checkPlacard(); catch (Exception e) e.printStackTrace();public EQ() super(new Frame();frame = this;dao = Dao.getDao();location = dao.getLocation();setTitle(局域网通信 作者:王小冬_);setBounds(location);progressBar = new JProgressBar();progressBar.setBorder(new BevelBorder(BevelBorder.LOWERED);tabbedPane = new JTabbedPane();popupMenu = new JPopupMenu();chatTree = new ChatTree(this);user_dir = System.getProperty(user.dir); / 程序执行路径用于系统更新localFile = new File(user_dir + File.separator + EQ.jar);/ 本地EQ文件stateLabel = new JLabel(); / 状态栏标签addWindowListener(new FrameWindowListener();/ 添加窗体监视器addComponentListener(new ComponentAdapter() public void componentResized(final ComponentEvent e) saveLocation();public void componentMoved(final ComponentEvent e) saveLocation(););try / 启动通讯服务端口ss = new DatagramSocket(1111); catch (SocketException e2) if (e2.getMessage().startsWith(Address already in use)showMessageDialog(服务端口被占用,或者本软件已经运行。);System.exit(0); / 初始化公共信息按钮messageAlertIcon = new ImageIcon(EQ.class.getResource(/image/messageAlert.gif);messageAlertNullIcon = new ImageIcon(EQ.class.getResource(/image/messageAlertNull20.gif);messageStack = new Stack();messageAlertButton = new JButton();messageAlertButton.setHorizontalAlignment(SwingConstants.RIGHT);messageAlertButton.setContentAreaFilled(false);final JPanel BannerPanel = new JPanel();BannerPanel.setLayout(new BorderLayout();add(BannerPanel, BorderLayout.NORTH);userInfoButton = new JButton();BannerPanel.add(userInfoButton, BorderLayout.WEST);userInfoButton.setMargin(new Insets(0, 0, 0, 10);initUserInfoButton();/ 初始化本地用户头像按钮BannerPanel.add(messageAlertButton, BorderLayout.CENTER);messageAlertButton.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent e) if (!messageStack.empty() showMessageDialog(messageStack.pop(););messageAlertButton.setIcon(messageAlertIcon);showMessageBar();add(tabbedPane, BorderLayout.CENTER);tabbedPane.setTabPlacement(SwingConstants.LEFT);ImageIcon userTicon = new ImageIcon(EQ.class.getResource(/image/tabIcon/tabLeft.PNG);tabbedPane.addTab(null, userTicon, createUserList(), 用户列表);ImageIcon sysOTicon = new ImageIcon(EQ.class.getResource(/image/tabIcon/tabLeft2.PNG);tabbedPane.addTab(null, sysOTicon, createSysToolPanel(), 系统操作);ImageIcon sysSTicon = new ImageIcon(EQ.class.getResource(/image/tabIcon/tabLeft3.png);tabbedPane.addTab(null, sysSTicon, createSysSetPanel(), 系统设置);setAlwaysOnTop(true);private JScrollPane createSysSetPanel() final JPanel sysSetPanel = new JPanel();JScrollPane scrollPane = new JScrollPane(sysSetPanel);sysSetPanel.setLayout(new BoxLayout(sysSetPanel, BoxLayout.Y_AXIS);scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0);final JPanel sysPathPanel = new JPanel();sysPathPanel.setMaximumSize(new Dimension(600, 200);sysPathPanel.setBorder(new TitledBorder(系统路径);sysPathPanel.setLayout(new GridLayout(0, 1);sysSetPanel.add(sysPathPanel);sysPathPanel.add(new JLabel(程序升级路径:);updatePathTField = new JTextField(preferences.get(updatePath, 请输入路径);sysPathPanel.add(updatePathTField);sysPathPanel.add(new JLabel(系统公告路径:);placardPathTField = new JTextField(preferences.get(placardPath,请输入路径);sysPathPanel.add(placardPathTField);sysPathPanel.add(new JLabel(公共程序路径:);pubPathTField = new JTextField(preferences.get(pubPath, 请输入路径);sysPathPanel.add(pubPathTField);final JButton pathOKButton = new JButton(确定);pathOKButton.setActionCommand(sysOK);pathOKButton.addActionListener(new SysSetPanelOKListener();sysSetPanel.add(pathOKButton);final JPanel loginPanel = new JPanel();loginPanel.setMaximumSize(new Dimension(600, 90);loginPanel.setBorder(new TitledBorder(登录升级服务器);final GridLayout gridLayout_1 = new GridLayout(0, 1);gridLayout_1.setVgap(5);loginPanel.setLayout(gridLayout_1);sysSetPanel.add(loginPanel);final JPanel panel_7 = new JPanel();panel_7.setLayout(new BoxLayout(panel_7, BoxLayout.X_AXIS);loginPanel.add(panel_7);panel_7.add(new JLabel(用户名:);userNameTField = new JTextField(preferences.get(username, 请输入用户名);panel_7.add(userNameTField);final JPanel panel_8 = new JPanel();panel_8.setLayout(new BoxLayout(panel_8, BoxLayout.X_AXIS);loginPanel.add(panel_8);panel_8.add(new JLabel(密码:);passwordTField = new JPasswordField(*);panel_8.add(passwordTField);final JButton loginOKButton = new JButton(确定);sysSetPanel.add(loginOKButton);loginOKButton.setActionCommand(loginOK);loginOKButton.addActionListener(new SysSetPanelOKListener();final JPanel ipPanel = new JPanel();final GridLayout gridLayout_2 = new GridLayout(0, 1);gridLayout_2.setVgap(5);ipPanel.setLayout(gridLayout_2);ipPanel.setMaximumSize(new Dimension(600, 90);ipPanel.setBorder(new TitledBorder(IP搜索范围);sysSetPanel.add(ipPanel);final JPanel panel_5 = new JPanel();panel_5.setLayout(new BoxLayout(panel_5, BoxLayout.X_AXIS);ipPanel.add(panel_5);panel_5.add(new JLabel(起始IP:);ipStartTField = new JTextField(preferences.get(ipStart, );panel_5.add(ipStartTField);final JPanel panel_6 = new JPanel();panel_6.setLayout(new BoxLayout(panel_6, BoxLayout.X_AXIS);ipPanel.add(panel_6);panel_6.add(new JLabel(终止IP:);ipEndTField = new JTextField(preferences.get(ipEnd, 55);panel_6.add(ipEndTField);final JButton ipOKButton = new JButton(确定);ipOKButton.setActionCommand(ipOK);ipOKButton.addActionListener(new SysSetPanelOKListener();sysSetPanel.add(ipOKButton);return scrollPane;private JScrollPane createUserList() / 用户列表面板JScrollPane scrollPane = new JScrollPane();scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);addUserPopup(chatTree, getPopupMenu();/ 为用户添加弹出菜单scrollPane.setViewportView(chatTree);scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0);chatTree.addMouseListener(new ChatTreeMouseListener();return scrollPane;private JScrollPane createSysToolPanel() / 系统工具面板JPanel sysToolPanel = new JPanel(); / 系统工具面板sysToolPanel.setLayout(new BorderLayout();JScrollPane sysToolScrollPanel = new JScrollPane();sysToolScrollPanel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);sysToolScrollPanel.setBorder(new EmptyBorder(0, 0, 0, 0);sysToolScrollPanel.setViewportView(sysToolPanel);sysToolPanel.setBorder(new BevelBorder(BevelBorder.LOWERED);JPanel interfacePanel = new JPanel();sysToolPanel.add(interfacePanel, BorderLayout.NORTH);interfacePanel.setLayout(new BorderLayout();interfacePanel.setBorder(new TitledBorder(界面选择-再次启动生效);faceList = new JList(new String当前系统, java默认);interfacePanel.add(faceList);faceList.setBorder(new BevelBorder(BevelBorder.LOWERED

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论