swing 技术总结
- 格式:doc
- 大小:106.50 KB
- 文档页数:13
斯维尔总结(Swivel)是一种用于数据可视化和数据分享的在线工具平台。
它允许用户将数据以多种形式呈现,如图表、表格、地图等,便于用户分析和探索数据背后的故事。
总结了大量数据可视化的方法和技巧,成为了数据分析领域的重要工具之一。
首先,提供了丰富多样的图表类型,用户可以根据自己的需求选择最合适的图表呈现数据。
这些图表包括线形图、柱状图、饼图等,适用于不同类型的数据分析。
通过图表的视觉化呈现,用户可以更直观地理解数据的规律和趋势。
同时,还允许用户在图表上添加标注、注释等,以便更清晰地传达数据的信息。
其次,还提供了灵活的数据处理和转换功能。
用户可以在平台上导入原始数据,并进行数据清洗、筛选、转换等操作,以便更好地展现数据的价值。
例如,用户可以通过将多维数据转换为二维表格,方便进一步分析。
同时,还提供了多种数据可视化技巧,如聚类、分类、相关性等,帮助用户挖掘隐藏在数据背后的规律和关系。
此外,还支持数据的在线分享和协作。
用户可以将自己创建的数据可视化作品分享给他人,并允许其他人进行查看、评论或共同编辑。
这种分享和协作的方式极大地促进了数据分析领域的合作和共享,使得大家可以从不同的视角和经验之中获得更全面的观点和见解。
同时,还提供了数据的安全保护措施,保障用户数据的隐私和安全。
的出现为数据分析者提供了一种简便、高效的数据可视化工具。
无论是个人用户还是企业用户,都可以通过将复杂的数据转化为易于理解和共享的图表形式。
与传统的数据分析软件相比,有着更友好的用户界面和更丰富的功能,使得数据分析变得更加直观和便捷。
然而,虽然的使用简单方便,但在使用过程中仍需注意一些问题。
首先,数据的准确性和完整性是数据分析的基础,因此在使用前应确保数据来源可信,并对数据进行合理的清洗和处理。
此外,选择合适的图表类型和展示方式也是关键,需要根据数据的特点和目的来进行选择,避免产生误导或无效的结论。
总的来说,作为一种数据可视化工具,为用户提供了便捷、高效的数据分析和分享方式。
1 Swing线程问题与解决过程让我们以一个最常用的Swing线程错误开始,然后我们使用标准的技术来修正这个问题。
在这个过程中,我们将看到实现正确的Swing线程的复杂性和常见困难。
假设我们在执行图书查找。
我们有一个简单的用户界面,包括一个查找文本域,一个查找按钮,和一个输出的文本区域。
如下图所示:图1. 基本查询用户界面用户输入书的标题,作者或者其它条件,然后显示一个结果的列表。
下面的代码例子演示了按钮的ActionListener在同一个线程中调用lookup()方法。
private void searchButton_actionPerformed(){outputTA.setText("Searching for: " + searchTF.getText());String[] results = lookup(searchTF.getText());outputTA.setText("");for (int i = 0; i < results.length; i++){String result = results[i];outputTA.setText(outputTA.getText() + '\n' + result);}}如果你运行这段代码,你会立即发现存在一些问题。
图2显示了查找运行中的一个屏幕截图。
图 2. 在Swing线程中进行查找注意Go按钮看起来是被按下了。
这是因为actionPerformed方法通知了按钮绘制为非按下外观,但是还没有返回。
你也会发现要查找的字串“abcde”并没有出现在文本区域中。
searchButton_actionPerformed的第1行代码将文本区域设置为要查找的字串。
但是,注意Swing重画并不是立即执行的。
而是把重画请求放置到Swing事件队列中等待Swing线程处理。
但是这儿,我们因查找处理占用了Swing线程,所以,它还不能马上进行重画。
Swing学习指南本文档意在将那些想学习swing的盆友引入swing的殿堂,至于swing的高深部分,还需自己不断努力。
(书上有路勤为径…)1、JFrame、JPanel、JDialog的学习使用1.1、JFrameSwing 的三个基本构造块:标签、按钮和文本字段;但是现在需要个地方安放它们,并希望用户知道如何处理它们。
JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。
比起它表面上的简单性,它实际上是Swing 包中最复杂的组件。
为了最大程度地简化组件,在独立于操作系统的Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。
JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。
1.2、JPanleJPanel 是一般轻量级容器.JPanel 为javax.swing包中的,为面板容器,可以加入到JFrame中, 它自身是个容器,可以把其他compont加入到JPanel中,如JButton,JTextArea,JTextFiled等,另外也可以在它上面绘图1.3、JDialog对话框与框架(JFrame)有一些相似,但它一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。
所以,在对话框中一般不需要菜单条,也不需要改变窗口大小。
此外,在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭1.4、笔者自己对于三者关系的理解(没准有一定参考价值)笔者不擅长理论知识,决定以生动的例子进行讲解。
比如我制作一个窗户,首先我需要一面墙,因为窗户应该放在墙上嘛(不要跟我说天花板也可以放窗户,严肃…),那么这堵墙就相当于一个JFrame容器,我把墙做出来JFrame frame = new JFrame();然后我需要在这面墙上放个窗户,先把窗户做出来(虽然现实里这个做窗户不可科学,不过是例子,意思传达到了就好了),JPanel panel = new JPanel();把窗户放墙上,frame.add(panel);这样就OK了,对于JDialog 就相当于打开窗户看到的新的墙。
java swing的近五年文献近五年来,Java Swing作为一种图形用户界面(GUI)工具包,一直在软件开发领域中被广泛应用。
它提供了丰富的组件和功能,使开发人员能够轻松构建各种用户界面。
在过去的几年中,Java Swing经历了一系列的更新和改进。
其中一个重要的改进是对界面外观的定制化。
开发人员可以通过使用Java 的外观和感觉(Look and Feel)来改变应用程序的外观,使其更符合用户的喜好和需求。
这为开发人员提供了更大的自由度和创造力。
近年来Java Swing还引入了更多的布局管理器,使界面的设计更加灵活和易于维护。
开发人员可以使用不同的布局管理器来实现不同的界面布局效果,如边界布局、网格布局等。
这使得开发人员能够更好地适应不同的应用场景和需求。
除了界面的定制化和布局的改进,近年来Java Swing还加强了对多线程编程的支持。
多线程编程是一种提高应用程序性能和响应性的重要技术。
通过在Swing应用程序中使用多线程,开发人员可以将耗时的任务放在后台线程中执行,从而避免界面的卡顿和不响应。
Java Swing还引入了更多的动画效果和过渡效果,使界面更加生动和吸引人。
开发人员可以通过使用Swing提供的动画库来实现各种动画效果,如淡入淡出、平移、缩放等。
这为应用程序的用户体验提供了更多可能性。
总的来说,近五年来Java Swing在功能和性能方面都有了显著的提升。
它不仅提供了丰富的组件和功能,还支持界面的定制化、布局的改进、多线程编程和动画效果。
这使得Java Swing成为了开发人员首选的GUI工具包之一。
无论是开发桌面应用程序还是企业级应用程序,Java Swing都能提供强大的支持,帮助开发人员实现各种复杂的界面需求。
[编辑本段]简介Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event [编辑本段]创建图形界面步骤(1)导入Swing包(2)选择界面风格(3)设置顶层容器(4)设置按钮和标签(5)将组件放到容器上(6)为组件增加边框(7)处理事件(8)辅助技术支持导入Swing包下面语句导入Swing包import javax.swing.*;大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个包:import java.awt.*;import java.awt.event.*;如果图形界面中包括了事件处理,那么还需要导入事件处理包:import javax.swing.event.*;选择界面风格Swing允许选择程序的图形界面风格常用的有java风格,windows风格等下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。
try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName( )); }catch (Exception e) { }设置顶层容器图形界面至少要有一个顶级Swing容器顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持常用的顶级容器:JFrame(框架):表示主程序窗口JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):在浏览器内显示一个小程序界面一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格窗格也可以看作是一种面板,但它是框架的一个组成部分组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板public static void main(String[ ]args){JFrame frame=new JFrame("SwingAp plication");JPanel panel1=new JPanel();frame.getContentPane().add(panel1,BorderLayout.CENTER);......//添加其他组件frame.pack();frame.setVisible(true);}Swing全屏幕模式使用关键是java.awt.*里面的两个与显示设备有关的类:GraphicsEnvironment和Gr aphicsDevice。
UI组件简介在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”。
但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义。
所以,我再次提出这个问题:什么是 UI?您可能把它定义成您按下的按钮、打字的地址栏、打开和关闭的窗口,等等,这些都是 UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是 UI 元素。
比如鼠标、键盘、音量、屏幕颜色、使用的字体,以及一个对象相对于另一个对象的位置,这些都包含在 UI 之中。
实际上,在计算机和用户的交互之中扮演角色的任何对象都是 UI 的组成部分。
这看起来足够简单,但是您应当惊讶的是,有许多人和大型公司已经为它努力了很多年。
实际上,现在有的大学专业的惟一课程就是研究这种交互。
Swing的角色Swing 是Java 平台的UI ——它充当处理用户和计算机之间全部交互的软件。
它实际上充当用户和计算机内部之间的中间人。
Swing 到底是如何做这项工作的呢?它提供了处理前面一节中描述的UI 各方面内容的机制:∙键盘:Swing 提供了捕捉用户输入的方法。
∙颜色:Swing 提供改变在屏幕上看到的颜色的方法。
∙打字的地址栏:Swing 提供了文本组件,处理所有普通任务。
∙音量:Swing 不太擅长。
无论如何,Swing 为您提供了创建自己的UI 所需要的所有工具MVCSwing 甚至走得更远一步,在基本的 UI 原则之上又放上了一个公共的设计模式。
这个设计模式叫做模型-视图-控制器(Model-View-Controller,MVC),它试图“把角色分开”。
MVC 让负责显示的代码、处理数据的代码、对交互进行响应并驱动变化的代码彼此分离。
有点迷惑?如果我为这个设计模式提供一个现实世界的非技术性示例,它就比较容易了。
请想像一次时装秀。
把秀场当成 UI,假设服装就是数据,是展示给用户的计算机信息。
四、实验方法和步骤
实验方法:
1、本系统是基于Java Swing+MySQL实现的图书管理系统。
2、采用Java Swing作为UI界面
3、MySQL数据库作为存储
4、JDBC原生方法操作
(封装了公共的增删改查方法,见src.model.access.Connect.java)
5、采用MVC模式分为Model层、View层、Controller层
6、采用了MD5进行密码加密
实验步骤:
1、需求分析
2、概念结构,绘制E-R图
3、逻辑结构设计:将E-R图转化为等价的关系模式
4、物理结构设计:数据库表的基本结构
5、功能实现
五、实验结果(截图)
1、登录界面
2、普通用户登录界面
3、管理员登录界面
4用户界面功能分别是
图书查询借阅、借阅归还信息、个人信息管理4.1借阅
4.3查询
4.4借阅信息
4.5归还
4.6个人信息管理4.7修改个人信息
4.8修改密码
5.登录界面功能5.1注册功能
6.忘记密码功能
7.管理端功能
图书信息管理、图书种类管理、读者类型管理、图书借阅信息、超级用户7.1界面
7.2添加图书
7.3删除图书
7.4修改图书
7.5图书类型管理7.6读者信息管理历史借阅信息
7.7超级管理员界面修改个人信息
修改个人密码
7.8超级管理员验证查询管理员信息
新增管理员
删除管理员
修改该管理员信息。
技术总结 1. 在TabbedPane1中添加panel. jTabbedPane1.insertTab("户主信息显示",null,queryShowUserPanel,null,2); 参数依次注释 在此选项卡中显示的标题 此选项卡中显示的图标 此选项卡时要显示的组件。 此选项卡要显示的工具提示 插入此新选项卡的位置 jTabbedPane1.add(welcomePanel,"欢迎使用"); 此选项卡时要显示的组件。 在此选项卡中显示的标题 jTabbedPane1.setSelectedIndex(2); 显示选项卡的位置死的panel 2. 判断是否是整数 boolean IsInt(String str) { try { int i = Integer.parseInt(str) ; System.out.println("你输入的整数是"+ i) ; return true ; } catch (NumberFormatException e) { System.out.println("你输入的不是整数……") ; return false ; } } 3. 标题上显示自己的图标 this.setIconImage(img); (构造函数里面) Toolkit kit = Toolkit.getDefaultToolkit(); Image img = kit.getImage(""); 4. 关闭窗口 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { try { Process process = Runtime.getRuntime().exec("cmd.exe /c start exe\\pskill.exe "+"demo_card.exe"); } catch(Exception exc) { exc.printStackTrace(); } System.exit(0); } }); 5. 判断数据库中某一字段的直的个数不能超过一定的个数 String adminsql ="SELECT count(*) FROM admin_user where 权限=3"; PreparedStatement prepared2=connection.prepareStatement(adminsql); ResultSet rs2=prepared2.executeQuery(); if(rs2.next()) { if(rs2.getInt(1) >= 10) { System.out.println("rs2.getInt(1) = " + rs2.getInt(1)); notice("管理员的人数不能超过10人"); admin_HIndex.setEnabled(false); return; } } 6. 浏览事件 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if(jTextField11.getText().equals("")) { notice("IC卡号不能为空"); admin_HIndex.setEnabled(false); return; } String ICCard = jTextField11.getText().toString(); JFileChooser jFileChooser = new JFileChooser(); jFileChooser.setCurrentDirectory(new File(".")); jFileChooser.showOpenDialog(this); String fromPath = jFileChooser.getSelectedFile().getPath(); String extendName = fromPath.substring(fromPath.lastIndexOf(".")); String toDir = "userPic\\"+ ICCard + extendName; //文件复制在某一个路径下,并更名 System.out.println("toDir "+toDir); try { int bytesum = 0; int byteread = 0; File oldfile = new File(fromPath); if (oldfile.exists()) { //文件存在时 InputStream inStream = new FileInputStream(fromPath); //读入原文件 FileOutputStream fs = new FileOutputStream(toDir); byte[] buffer = new byte[99999]; int length; while ( (byteread = inStream.read(buffer)) != -1) { bytesum += byteread; //字节数 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); } jTextField1.setText(ICCard+extendName);
} 7. 判断日期是否正确 if((jComboBox5.getSelectedItem().toString().equals("31"))) { if((jComboBox4.getSelectedItem().toString().equals("04"))|| (jComboBox4.getSelectedItem().toString().equals("06"))||(jComboBox4.getSelectedItem().toString().equals("09"))|| (jComboBox4.getSelectedItem().toString().equals("11"))) { notice("您出生日期格式不正确"); admin_HIndex.setEnabled(false); return; } }
if((jComboBox4.getSelectedItem().toString().equals("02"))) { int i = Integer.parseInt(jComboBox3.getSelectedItem().toString())%4; if(i!=0) { if((jComboBox5.getSelectedItem().toString().equals("29"))) { notice("您出生日期格式不正确"); admin_HIndex.setEnabled(false); return; } } if((jComboBox5.getSelectedItem().toString().equals("30")) || (jComboBox5.getSelectedItem().toString().equals("31"))) { notice("您出生日期格式不正确"); admin_HIndex.setEnabled(false); return; } } 8. 判断是否是数字 public boolean isNum(String msg) { if(java.lang.Character.isDigit(msg.charAt(0))) { System.out.println("是数字"); return true; } System.out.println("不是数字"); return false; } 9. 得到日期的类型 import java.util.*; import java.text.*; //时间转换类 public class DateChange {
/**返回当前时间的各种不同显示类型 *@return 当前时间的不同显示类别 */ public static String getdate() {
//日期 Date today;
//定义一个时间转换的操作 //Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 //日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法