- 浏览: 194743 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
ywbrj042:
互联网项目用处不大
Querydsl有趣的通用查询框架 -
qupei2u:
試過刪了還是不行~
ubuntu,eclipse下svn切换用户的方法 -
huixia0010:
感谢分享,已经转载到了我的博客,并附上了本文链接,非常感谢
php截取等长UFT8中英文混合字串 -
aiou:
mymoola 写道请问能不能在整理一下,看到写着有些代码不要 ...
旁门左道做joomla多级分类一 -
aiou:
imlyj 写道我的不行。有一个方法,可以让之前的用户的密码先 ...
ubuntu,eclipse下svn切换用户的方法
这个工程用于统计文件或代码行数,原来是帮朋友做的。
第一次用Java UI,swing,虽然是很粗糙的东西,但是还是挺有成就感的,
边学边做大概两天时间,原来什么东西只要认真去做,都可以的。
要求:
做一个如图所示界面的代码统计器。统计器中有一个包含File和Help两个条目的菜单,其中File菜单下面还包含两个子菜单——打开目录(快捷方式为 ctr+O)和退出(快捷方式为 ctr+E)。Help菜单中只包含一个子项——关于CodeNum,用来显示关于本程序的基本信息。文件统计器的主要作用是统计当前制定目录下,指定文件类型的各个文字的代码行数以及总的代码行数值。
结果:
没有指定后缀时,全部文件都统计
如果指定了后缀,只统计制定后缀文件
代码,很粗糙!!!!!!!!!!!!!!!!!!
第一次用Java UI,swing,虽然是很粗糙的东西,但是还是挺有成就感的,
边学边做大概两天时间,原来什么东西只要认真去做,都可以的。
要求:
做一个如图所示界面的代码统计器。统计器中有一个包含File和Help两个条目的菜单,其中File菜单下面还包含两个子菜单——打开目录(快捷方式为 ctr+O)和退出(快捷方式为 ctr+E)。Help菜单中只包含一个子项——关于CodeNum,用来显示关于本程序的基本信息。文件统计器的主要作用是统计当前制定目录下,指定文件类型的各个文字的代码行数以及总的代码行数值。
结果:
没有指定后缀时,全部文件都统计
如果指定了后缀,只统计制定后缀文件
代码,很粗糙!!!!!!!!!!!!!!!!!!
import java.awt.Color; import java.awt.Dimension; import java.awt.FileDialog; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.table.DefaultTableModel; public class UI extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; JTextField t1 = new JTextField(); JTextField t2 = new JTextField(); JTextField t3 = new JTextField(); JTextField t = new JTextField(); JMenu menu1 = new JMenu("File"); JMenu menu2 = new JMenu("Help"); Hashtable<String, Boolean> postfixTable = new Hashtable<String, Boolean>(); // String postfixes[] = new String[100]; JMenuBar menubar = new JMenuBar(); JButton ajb; JTextArea ta; DefaultTableModel dtm1; JButton djb; JButton b1; JTextField folder; int clickRow; JMenuItem exitMenuItem; JMenuItem open; Vector postfixVector = new Vector(); Vector columnIdentifiers = new Vector(); String currentFolder = ""; Vector fileInfo = new Vector(); Vector fileList = new Vector(); File[] fl = new File[100]; int total = 0; JTextArea lbnum; JButton okButton; JMenuItem about; final JTable table1 = new JTable() { public boolean isCellEditable(int row, int col) { return false; } }; final JTable table = new JTable() { public boolean isCellEditable(int row, int col) { return false; } }; public UI() { } public UI(String s) { super(s); showGUI(); pack(); } // public String[] getPostfixes(){ // Enumeration<String> keys = postfixTable.keys(); // int i = 0; // while(null != keys && keys.hasMoreElements()){ // postfixes[i] = keys.nextElement(); // i++; // } // return postfixes; // } public Vector<String> getPostfixVector() { Enumeration<String> keys = postfixTable.keys(); postfixVector.removeAllElements(); while (null != keys && keys.hasMoreElements()) { Vector v = new Vector(); v.add(keys.nextElement()); postfixVector.add(v); } return postfixVector; } public void addPostfix(String postfix) { ta.setText(""); if (null != postfix && !"".equals(postfix) && !postfixTable.containsKey(postfix)) { postfixTable.put(postfix, true); } getPostfixVector();// 获得向量 refreshTable1();// 刷新table } public void removePostfix(String postfix) { if (null != postfix && !"".equals(postfix) && postfixTable.containsKey(postfix)) { postfixTable.remove(postfix); } getPostfixVector();// 获得向量 refreshTable1();// 刷新table } private void refreshTable1() { columnIdentifiers.removeAllElements(); columnIdentifiers.add("代码文件格式"); dtm1.setColumnCount(1); dtm1.setDataVector(postfixVector, columnIdentifiers); table1.setModel(dtm1); dtm1.setRowCount(8); table1.repaint(); table1.updateUI(); } public void showGUI() { this.setTitle("code num counter"); this.setBounds(350, 50, 700, 650); // setPreferredSize(new Dimension(700, 650)); this.setJMenuBar(menubar); menu1.getPopupMenu().setLightWeightPopupEnabled(false); menubar.add(menu1); menu2.getPopupMenu().setLightWeightPopupEnabled(false); menubar.add(menu2); open = new JMenuItem("打开目录"); open.addActionListener(this); open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); menu1.add(open); exitMenuItem = new JMenuItem("退出"); exitMenuItem.addActionListener(this); exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK)); menu1.add(exitMenuItem); about = new JMenuItem("关于"); about.addActionListener(this); menu2.add(about); this.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); this.setBackground(Color.gray); JLabel jl = new JLabel(" 目录名称 :"); jl.setLocation(0, 0); c.fill = GridBagConstraints.BOTH; c.gridx = 0; c.gridy = 0; c.gridheight = 2; c.gridwidth = 1; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10, 10, 10, 10); this.add(jl, c); folder = new JTextField(""); folder.setPreferredSize(new Dimension(300, 22)); c.fill = GridBagConstraints.WEST; c.gridx = 1; c.gridy = 0; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10, 0, 10, 0); this.add(folder, c); b1 = new JButton(" 打开目录 "); b1.addActionListener(this); c.fill = GridBagConstraints.BOTH; c.gridx = 2; c.gridy = 0; c.insets = new Insets(10, 10, 10, 10); c.anchor = GridBagConstraints.EAST; this.add(b1, c); c.insets = new Insets(0, 0, 0, 0); // table.setAutoscrolls(true); table.setGridColor(Color.gray); table.setEnabled(true); // table.setPreferredScrollableViewportSize(new Dimension(500, 400)); DefaultTableModel dtm = new DefaultTableModel(); dtm.setColumnIdentifiers(new Object[] { "文件名", "代码行数" }); dtm.setColumnCount(2); table.setModel(dtm); JScrollPane pane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); pane.setBorder(BorderFactory.createTitledBorder("")); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; c.gridheight = 6; this.add(pane, c); // table.setAutoscrolls(true); table1.setGridColor(Color.gray); table1.setEnabled(false); // table.setPreferredScrollableViewportSize(new Dimension(500,400)); dtm1 = new DefaultTableModel(); dtm1.setColumnIdentifiers(new Object[] { "代码文件格式" }); dtm1.setColumnCount(1); dtm1.setRowCount(8); table1.setModel(dtm1); table1.updateUI(); table1.setPreferredSize(new Dimension(50, 130)); table1.setEnabled(true); MouseAdapter d = new MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { System.out.println("mouseClicked()"); // System.out.println("row numbers is :" + table1.getRowCount());// 获取表格的总行数 // 获取鼠标点击的行的位置(及行数) Point mousepoint; mousepoint = e.getPoint(); clickRow = table1.rowAtPoint(mousepoint); System.out.println(clickRow); } }; table1.addMouseListener(d); JScrollPane pane1 = new JScrollPane(table1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); pane1.setBorder(BorderFactory.createTitledBorder("")); pane1.setPreferredSize(new Dimension(80, 150)); c.gridx = 2; c.gridy = 2; c.weightx = 1; c.weighty = 1; c.gridwidth = 1; c.gridheight = 1; c.insets = new Insets(10, 10, 10, 10); c.fill = GridBagConstraints.BOTH; this.add(pane1, c); djb = new JButton("删除选中格式"); djb.addActionListener(this); c.gridx = 2; c.gridy = 4; c.weightx = 1; c.weighty = 1; c.gridwidth = 1; c.gridheight = 1; c.insets = new Insets(10, 10, 10, 10); c.fill = GridBagConstraints.BOTH; this.add(djb, c); JLabel dlb = new JLabel("Input New Postfix:"); c.gridx = 2; c.gridy = 5; c.weightx = 1; c.weighty = 1; c.gridwidth = 1; c.gridheight = 1; c.insets = new Insets(10, 10, 0, 10); c.fill = GridBagConstraints.BOTH; this.add(dlb, c); ta = new JTextArea(""); c.fill = GridBagConstraints.BOTH; c.gridx = 2; c.gridy = 6; c.gridwidth = 1; c.gridheight = 1; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(0, 10, 10, 10); this.add(ta, c); ajb = new JButton("添加格式"); ajb.addActionListener(this); c.gridx = 2; c.gridy = 7; c.weightx = 1; c.weighty = 1; c.gridwidth = 1; c.gridheight = 1; c.insets = new Insets(10, 10, 10, 10); c.fill = GridBagConstraints.BOTH; this.add(ajb, c); lbnum = new JTextArea("项目中代码行数:" + ""); c.fill = GridBagConstraints.BOTH; c.gridx = 0; c.gridy = 8; c.gridwidth = 1; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10, 10, 10, 10); this.add(lbnum, c); okButton = new JButton("开始统计"); c.fill = GridBagConstraints.BOTH; c.gridx = 1; c.gridy = 8; c.gridwidth = 1; c.gridheight = 2; c.anchor = GridBagConstraints.BASELINE; this.add(okButton, c); okButton.setMnemonic('D'); okButton.addActionListener(this); this.setResizable(false); this.setVisible(true); } @Override public void actionPerformed(ActionEvent arg0) { if (arg0.getSource().equals(ajb)) { addPostfix(ta.getText()); } if (arg0.getSource().equals(djb)) { String text = (String) table1.getValueAt(clickRow, 0); removePostfix(text); } if (arg0.getSource().equals(b1) || arg0.getSource().equals(open)) { openFolder(); } if (arg0.getSource().equals(exitMenuItem)) { System.exit(0); } if (arg0.getSource().equals(okButton)) { try { caculate(); } catch (IOException e) { e.printStackTrace(); } } if (arg0.getSource().equals(about)) { JOptionPane jop= new JOptionPane(); jop.showMessageDialog(null, "about me, 本程序的基本信息"); } } public void openFolder() { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { System.out.println("getCurrentDirectory(): " + chooser.getCurrentDirectory()); System.out.println("getSelectedFile() : " + chooser.getSelectedFile()); currentFolder = chooser.getSelectedFile().toString(); this.folder.setText(currentFolder); // getFileList(); // refreshTable(); lbnum.setText("项目中代码行数:" ); } else { System.out.println("No Selection "); } } public void getFileList() { fileInfo.removeAllElements(); fl = new File[1000]; if (!(null == currentFolder) && !"".equals(currentFolder)) { File d = new File(currentFolder);// 建立当前目录中文件的File对象 File[] fls = d.listFiles();// 取得目录中所有文件的File对象数组 int j = 0; for (int i = 0; i < fls.length; i++) { // 目录下的文件: File e = fls[i]; String name = e.getName(); if (e.isFile()) { String suffix = getSuffix(name); if(postfixTable.size() > 0 ){ if( postfixTable.containsKey(suffix)){ System.out.println(e.getName()); Vector v = new Vector(); v.add(e.getName()); v.add(""); fileInfo.add(v); fl[j] = fls[i]; j++; } }else{ System.out.println(e.getName()); Vector v = new Vector(); v.add(e.getName()); v.add(""); fileInfo.add(v); fl[j] = fls[i]; j++; } } // 目录下的目录: if (e.isDirectory()) { // System.out.println(e.getName()); } } } else { System.out.println("no folder"); } } private String getSuffix(String name) { if(!"".equals(name)){ System.out.println(name); String suffix = name.substring(name.lastIndexOf(".") , name.length()); System.out.println(suffix); return suffix; }else{ return "all"; } } public void refreshTable() { Vector columnIdentifiers = new Vector(); columnIdentifiers.removeAllElements(); columnIdentifiers.add("文件名"); columnIdentifiers.add("代码行数"); DefaultTableModel dtm1 = new DefaultTableModel(); dtm1.setColumnCount(2); dtm1.setDataVector(fileInfo, columnIdentifiers); table.setModel(dtm1); table.repaint(); table.updateUI(); } public void caculate() throws IOException { getFileList(); fileInfo.removeAllElements(); total = 0; for (int i = 0; i < fl.length; i++) { if (null != fl[i]) { int count = 0; InputStream input = new FileInputStream(fl[i]); BufferedReader b = new BufferedReader(new InputStreamReader(input)); String value = b.readLine(); while (value != null) { count++; value = b.readLine(); } b.close(); input.close(); total += count; Vector v = new Vector(); v.add(fl[i].getName()); v.add(count); fileInfo.add(v); } } refreshTable(); lbnum.setText("项目中代码行数:" + total); } public static void main(String[] args) { new UI(""); } }
发表评论
-
借助Spring监听接口为数据库初始化数据
2012-03-31 09:36 0在做WEB项目时,经常在 ... -
json遇到java关键字
2012-03-23 10:58 1273json-lib框架需要在jsonconfig里设置 http ... -
转载:JVM性能参数调优实践,不会执行Full GC,网站无停滞
2012-02-17 12:09 2232JVM参数调优是个很头痛 ... -
TaskManager故障分析解决
2012-02-16 19:19 24981.错误 TaskManager,频繁崩溃。 tomcat崩溃 ... -
Java调用linux scp操作 zz
2011-11-01 10:43 1892先来回顾下linux下scp命 ... -
Maven创建Web工程,把Maven项目变成Dynamic Web项目
2011-09-08 10:15 19873http://code.google.com/p/j2eewi ... -
Eclipse的Dynamic Web Project与Maven的的整合
2011-09-08 09:54 1808Eclipse的Dynamic Web Project支持直接 ... -
ADTV项目回忆
2011-06-21 13:38 1271其实是TV AD System 数字电视广告系统。 待续.. ... -
Taskmanager项目回忆
2011-02-12 18:08 1070待完成... -
Querydsl有趣的通用查询框架
2011-02-12 11:43 18362说起Querydsl这里不得不 ... -
多态调用顺序
2010-11-04 18:06 935方法调用的优先问题 ,优先级由高到低依次为: this.sho ... -
javamail 连接服务器一次发送可任意多封邮件,不是每次发送都要重新连接
2010-08-21 15:17 6617改编自网络 其中附件部分没有测试 import jav ... -
java截取中英文混合字符串 等宽显示
2010-08-16 12:06 7030import java.io.UnsupportedEnc ... -
Spring no matching editors or conversion strategy found 异常的一种情况
2010-08-09 20:44 8073有人说这样写可以 <tx:advice id=" ... -
Freemarker+Struts2 国际化应用
2010-07-14 15:21 1481Struts2使用FreeMarker作为 ... -
ognl.OgnlException: target is null for setProperty(null,
2010-06-07 20:12 1401出现这样的错误还可能是action的struts.xml没配置 ... -
struts2.x标签if test 的一个字符型值字符串比较
2010-05-06 22:05 5204例如这个语句 要判断struts堆栈里systemSettin ... -
ubuntu,eclipse下svn切换用户的方法
2010-05-06 21:53 2902ubuntu下eclipse使用svn 想更改用户,但上一个用 ... -
zz:Freemarker 内置函数 数字、字符串、日期格式化
2010-01-25 11:42 1624一、Sequence的内置函数 1 ... -
freemarker+struts2+ibatis入门学习摘要
2009-09-09 12:48 1370见附件,初级学习摘要+完整实例project。 欢迎批评指正v ...
相关推荐
总的来说,"Java_Swing_KTV工程"是一个利用Java Swing技术实现的KTV管理系统前端,它展示了Swing在构建复杂、美观用户界面方面的强大能力。通过深入学习和理解Swing的各种组件和机制,开发者能够创建出更加专业和...
通过这款Java魔方小游戏,我们可以学习到Swing库的使用、GUI设计、事件处理、算法实现以及软件工程中的许多实践原则。对于想要提升Java GUI编程能力或对游戏开发感兴趣的开发者来说,这是一个很好的学习项目。
- 创建一个简单的Swing应用程序,其中包含一个带有背景图片的`JButton`,并通过监听窗口大小变化事件来动态调整按钮大小及图片尺寸。 - 使用上述方法设置按钮图标,并添加异常处理逻辑,确保程序的健壮性。 #### ...
在本项目中,我们关注的是一个基于“软件工程课程设计”的教务考试系统,该系统是用JAVA SWING作为前端开发工具,与Oracle 11g数据库进行后端交互。这个系统涵盖了教务员、教师和学生三个角色,提供全方位的教务管理...
从网上一个博文上搜集来的一些Swing特效的例子,如xp折叠效果_foldered_pane,鼠标悬停提示_tooltip,玻璃效果闪烁_glassbox,日历组件,环形右键弹出菜单等等.....绝对物超所值! 其中部分例子为jar形式,可直接运行......
Matisse是Myeclipse集成的一个强大的Swing界面设计器,使得开发者无需编写复杂的布局代码,就能创建出美观的图形用户界面。 首先,开发图形界面在Windows上,Visual Studio提供了直观的可视化工具,使得拖放控件到...
Swing小系统开发是Java编程领域中的一个实践项目,它主要利用Java的Swing库来构建桌面应用程序。Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的组件库,用于创建用户界面。在这个项目中,开发者可以...
在本项目“用Swing做的超市管理系统”中,开发人员充分利用了Swing的组件库和事件处理机制,构建了一个完整的、功能丰富的管理软件,涵盖了超市运营的各个环节。 首先,Swing库提供了丰富的组件,如JFrame(主窗口...
总的来说,"Java操作系统管理软件(Swing)"是一个结合了理论与实践的项目,它展示了如何利用Java和Swing构建一个具有MVC架构的桌面应用。对于想要提升Java GUI编程技能或者对操作系统原理感兴趣的开发者和学生,这...
【Java Swing】 Java Swing是Java AWT(Abstract Window Toolkit)库的一部分,提供了一套图形用户界面(GUI)组件,用于构建桌面应用。...对于初学者来说,这是一个很好的实践平台,能够提升Java编程和软件工程能力。
【五子棋JavaSwing开发】是一个适合初学者的项目,它涵盖了客户端应用程序的开发以及数据库的使用。在这个项目中,我们将深入学习如何利用Java Swing库来构建图形用户界面(GUI),同时理解数据库与Java程序之间的...
这个系统展示了如何利用Java的Swing库来构建一个功能完善的用户界面,同时包含了数据库交互、业务逻辑处理等多个方面的知识。 1. **Java Swing**:Swing是Java提供的一种用于创建图形用户界面(GUI)的工具包,它是...
运行环境:Windows XP、JDK 6.0、SQL Server 2000、Oracle 9i、Eclipse...你可以在此基础上进一步修改,然后写成自己的代码生成小工具,或者参见Eclipse插件书写规范,把它写成一个Eclipse的插件来玩,方便小组的开发。
贪吃蛇是一款经典的休闲游戏,其Java Swing版本的实现展示了如何使用Java的图形用户界面库来构建一个桌面应用。在本项目中,我们将探讨以下几个关键知识点: 1. **Java Swing**: Java Swing是Java Foundation ...
总的来说,Java Swing DVD租赁系统是一个综合性的项目,涵盖了GUI设计、数据库操作、业务逻辑处理等多个方面,对于学习Java Swing和软件工程实践是一个很好的实例。用户可以通过研究这个系统来提升自己的Java GUI...
《Java Swing图形界面开发与案例详解》几乎涵盖了目前Java Swing图形开发必备的所有常用知识,拥有丰富的实例,且这些实例均来自于工程实践,《Java Swing图形界面开发与案例详解》适合Java程序语言的初学者阅读,也...
在本项目中,“基于Swing框架的KTV点歌系统”利用了Swing的这些特性,构建了一个用户界面,尽管作者提到界面美观程度不高,但Swing通过自定义布局管理和外观风格,依然可以实现复杂且美观的UI设计。 【MySQL数据库...
在提供的描述中,我们可以推断这可能是一个包含多个L&F库的压缩包,用户只需将其导入工程,就能立即看到界面的改变。这种便捷性使得开发过程更加高效,无需花费大量时间去设计和实现自定义的界面。 在提供的文件...
总的来说,这个Java+Swing+MySQL的酒店管理系统是一个综合运用多种技术的实例,展示了如何通过这些技术构建一个完整的业务应用。开发者需要具备扎实的Java基础,熟悉Swing界面设计,以及对数据库管理和软件工程实践...
总的来说,"Eclipse Swing AWT开发插件一(VE)"为Java GUI开发提供了一个强大的可视化工具,简化了界面设计过程,使开发者能够更加专注于业务逻辑的实现。结合"VE-runtime-1.2"和"VE-SDK-1.2",开发者不仅可以运行...