﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-因爱而生</title><link>http://www.blogjava.net/zhukuanglong/</link><description>矿矿的生活</description><language>zh-cn</language><lastBuildDate>Fri, 04 Jul 2008 21:05:02 GMT</lastBuildDate><pubDate>Fri, 04 Jul 2008 21:05:02 GMT</pubDate><ttl>60</ttl><item><title>中国地震局：震前未收到任何短临预报意见 </title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/21/201882.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Wed, 21 May 2008 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/21/201882.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/201882.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/21/201882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/201882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/201882.html</trackback:ping><description><![CDATA[<div class="post" id="content_body">
<p style="text-indent: 2em">新华网北京５月２０日电（记者 隋笑飞杨维汉）这次地震前，中国地震局没有作出短临预报，同时也没有收到任何单位、个人或团体提交的有关这次地震的短临预报意见。至于网上发布曾经有人提出过关于这次地震的预报意见的信息，是不符合实际的。中国地震局对于个人或团体的地震短临预报意见，有专门的管理办法和处理程序。中国地震局监测预报司是具体负责这项工作的部门。</p>
<p style="text-indent: 2em">２０日上午，中国地震局监测预报司副司长车时接受中国地震信息网专访时作上述表示。</p>
<p style="text-indent: 2em">车时同时介绍了中国地震局对个人或团体的地震短临预报意见的管理办法。他说，中国地震局监测预报司从２０世纪８０年代后期开始对个人、学术团体的短临地震预报意见实施管理，具体管理工作由中国地震台网中心统一管理。具体办法是，指定专门的地震预报专家管理个人、学术团体等提出的短临预报意见。由专家收集、整理，并及时在地震部门的周、月会商中，介绍预测意见的主要依据、结论等，供震情跟踪判定时参考。每年年底，对一年中的所有短临预报意见进行评估，对其中预报准确或预报效果较好的给予奖励。</p>
<p style="text-indent: 2em">车时还指出，中国防震减灾法和地震预报管理条例中，有关于地震短临预报的明确规定。防震减灾法第十六条规定：国家对地震预报实行统一发布制度。地震短期预报和临震预报，由省、自治区、直辖市人民政府按照国务院规定的程序发布。任何单位或者从事地震工作的专业人员关于短期地震预测或者临震预测的意见，应当报国务院地震行政主管部门或者县级以上地方人民政府负责管理地震工作的部门或者机构按照前款处理，不得擅自向社会扩散。</p>
<p style="text-indent: 2em">车时表示，地震预报管理条例规定，国家鼓励和扶持地震预报的科学技术研究。中国地震局监测预报司本着对人民、对国家高度负责的态度，严格遵照该规定，支持地震预报科学研究，高度重视个人和团体提出的短临预测意见，但是对这些预测意见的处理是有严格程序的，要组织专家按照有关规定对预测意见的科学性和可能性进行审定。同时，由于地震预报既具有科学性，又具有社会性，政府发布地震预测意见是非常慎重的。</p>
<p style="text-indent: 2em">关于个人或团体有了地震预报意见后应如何提交给地震部门的问题，车时表示，任何单位和个人根据地震观测资料和研究成果，提出了短临地震预测意见，可向所在地或者所预测地区的县级以上地方人民政府负责管理地震工作的机构提出书面报告，也可以直接向国务院地震工作主管部门书面报告。但是，不得向社会散布。并且，任何单位和个人不得向国（境）外提出地震预测意见。个人或团体对地震活动趋势的长期和中期预测研究成果除外，可以进行学术交流讨论。</p>
<p style="text-indent: 2em">车时还谈了个人或团体提交的地震短临预报意见的具体情况。他说，现在有很多个人或团体开展地震预报探索，每年都收到几十至上百份的正式短临预报意见。但是，当前地震预报是公认的世界科学难题，总体水平是很低的。准确的短临预报意见是非常少的，２０００年以来，中国地震台网中心（前分析预报中心）共收到７００多份地震短临预报意见，其中基本上准确的预报意见有７份。２００８年以来，共收到２６份短临预报意见，尚没有正确预报的短临预报意见。尽管这些意见的准确性非常低，但作为地震主管部门，根据有关法律，欢迎和鼓励个人和团体继续开展地震预报探索。</p>
</div>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/201882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-21 13:18 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/21/201882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA电子邮件登陆界面</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/20/201718.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Tue, 20 May 2008 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/20/201718.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/201718.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/20/201718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/201718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/201718.html</trackback:ping><description><![CDATA[<p>package Pro123;</p>
<p>import java.awt.Color;<br />
import java.awt.Container;<br />
import java.awt.Dimension;<br />
import java.awt.Toolkit;<br />
import java.awt.event.ActionEvent;<br />
import java.awt.event.ActionListener;<br />
import java.awt.event.WindowAdapter;<br />
import java.awt.event.WindowEvent;</p>
<p>import javax.swing.JButton;<br />
import javax.swing.JFrame;<br />
import javax.swing.JLabel;<br />
import javax.swing.JOptionPane;<br />
import javax.swing.JPanel;<br />
import javax.swing.JPasswordField;<br />
import javax.swing.JTextField;</p>
<p>public class Demo extends JFrame{<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;private static final long serialVersionUID = 1L;<br />
&nbsp;JOptionPane pane1 = new JOptionPane();<br />
&nbsp;JFrame frame = new JFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp; Container contentPane = frame.getContentPane();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLabel Message = new JLabel("请输入邮箱和密码");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用户名、密码以及其输入框<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLabel Name = new JLabel("用户名");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLabel Password = new JLabel("密&nbsp;&nbsp; 码");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTextField tName = new JTextField(12);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPasswordField pPwd = new JPasswordField(12);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //按扭<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JButton btnDl = new JButton("登陆");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JButton btnCz = new JButton("重置");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPanel pToppane = new JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPanel pCenterpane = new JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPanel pCenterpaneName = new JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPanel pCenterpanePwd = new JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPanel pButton = new JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Demo(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setTitle("邮件登陆");//窗口标题<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //以下为加入面版<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpaneName.add(Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpaneName.add(tName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpanePwd.add(Password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpanePwd.add(pPwd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpane.add(pCenterpaneName,"North");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCenterpane.add(pCenterpanePwd,"South");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pToppane.add(Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pButton.add(btnDl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pButton.add(btnCz);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btnDl.addActionListener(new neibu1());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btnCz.addActionListener(new neibu2());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(pToppane,"North");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(pCenterpane,"Center");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(pButton,"South");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setSize(250,180);//设置大小<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setVisible(true);//设置可见<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setResizable(false);//禁止拉动窗口大小<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //居中窗口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();<br />
&nbsp;&nbsp;&nbsp; setLocation((screen.width - getSize().width)/2,(screen.height - getSize().height)/2 );<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // this.setDefaultCloseOperation(3);//关闭窗口<br />
&nbsp;&nbsp;&nbsp; this.addWindowListener(new WindowClose());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对邮箱的输入格式进行判断<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean validateEmailName(String name){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String emailName = name.substring(0,name.indexOf('@'));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boolean booFormat = true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int temp = -1;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;emailName.length();i++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; temp = name.charAt(i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; A:if(temp&lt;65){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(temp&gt;48 &amp;&amp; temp&lt;57)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break A;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; booFormat = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; B:if(temp&gt;90 &amp;&amp; temp&lt;97){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(temp == 95)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break B;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; booFormat = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return booFormat;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //邮箱检测<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean validateStationName(String name){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String stationName = name.substring(name.indexOf('@')+1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boolean boo = true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(stationName.indexOf('.') == -1){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; boo = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else if(stationName.indexOf('.') == 0){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; boo = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return boo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //事件<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp; neibu1 implements ActionListener {<br />
&nbsp;&nbsp;&nbsp; &nbsp; public void actionPerformed(ActionEvent e){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; String name = tName.getText().trim();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; String password = new String(pPwd.getPassword()).trim();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; int first = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; @SuppressWarnings("unused")<br />
&nbsp;&nbsp;&nbsp;boolean booFromat = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; boolean boo = false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; boolean booFormat = false;<br />
&nbsp;&nbsp;&nbsp;if(name.length()&gt;0){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; first = name.charAt(0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(name.indexOf("@")!= -1){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; booFormat = validateEmailName(name);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; boo = validateStationName(name);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; if(name.equals("")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("请输入邮箱");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// tName.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(name.indexOf("@")== -1){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("您输入邮箱格式错误，不包含&#8220;@&#8221;");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //tName.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(first&lt;65 || (first&gt;90 &amp;&amp; first &lt;97)||first&gt;122){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("邮箱首字母应为英文字母");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// tName.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(!booFormat){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("邮箱名不和法：只能包含字母、数字、下划线");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //tName.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(!boo){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("邮箱后缀不和法");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //tName.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(password.equals("")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("密码不能为空");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(password.length()&lt;6){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("密码必须为6位，请检查后重新输入");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else if(name.equals("java@svse.com")&amp;&amp;password.equals("jackrose")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.blue);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("欢迎"+name+"登陆");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setForeground(Color.red);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message.setText("邮箱或密码错误！请重新输入！");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pPwd.setText("");//清空输入内容<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tName.grabFocus();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
//&nbsp;&nbsp;&nbsp; 重置键清空输入内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class neibu2 implements ActionListener {<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; public void actionPerformed(ActionEvent e){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; pPwd.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; tName.setText("");<br />
&nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class WindowClose extends WindowAdapter{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void windowClosing(WindowEvent e){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; System.exit(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //MAIN方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[]args){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new Demo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;<br />
}<br />
</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/201718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-20 18:11 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/20/201718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中常用的一些方法</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/16/200979.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Fri, 16 May 2008 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/16/200979.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/200979.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/16/200979.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/200979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/200979.html</trackback:ping><description><![CDATA[字符串<br />
1、获取字符串的长度 <br />
length() <br />
2 、判断字符串的前缀或后缀与已知字符串是否相同 <br />
前缀 startsWith(String s) <br />
后缀 endsWith(String s) <br />
3、比较两个字符串 <br />
equals(String s) <br />
4、把字符串转化为相应的数值 <br />
int型 Integer.parseInt(字符串) <br />
long型 Long.parseLong(字符串) <br />
float型 Folat.valueOf(字符串).floatValue() <br />
double型 Double.valueOf(字符串).doubleValue() <br />
4、将数值转化为字符串 <br />
valueOf(数值) <br />
5、字符串检索 <br />
indexOf(Srting s) 从头开始检索 <br />
indexOf(String s ,int startpoint) 从startpoint处开始检索 <br />
如果没有检索到，将返回-1 <br />
6、得到字符串的子字符串 <br />
substring(int startpoint) 从startpoint处开始获取 <br />
substring(int start,int end) 从start到end中间的字符 <br />
7、替换字符串中的字符,去掉字符串前后空格 <br />
replace(char old,char new) 用new替换old <br />
trim() <br />
8、分析字符串 <br />
StringTokenizer(String s) 构造一个分析器，使用默认分隔字符（空格，换行，回车，Tab，进纸符） <br />
StringTokenizer(String s,String delim) delim是自己定义的分隔符
<div class="Tuu310"></div>
<br />
nextToken() 逐个获取字符串中的语言符号 <br />
boolean hasMoreTokens() 只要字符串还有语言符号将返回true，否则返回false <br />
countTokens() 得到一共有多少个语言符号 <br />
<br />
<br />
文本框和文本区 <br />
<br />
1、文本框 <br />
TextField() 构造文本框，一个字符长 <br />
TextField(int x) 构造文本框，x个字符长 <br />
TextField(String s) 构造文本框，显示s <br />
setText(String s) 设置文本为s <br />
getText() 获取文本 <br />
setEchoChar(char c) 设置显示字符为c <br />
setEditable(boolean) 设置文本框是否可以被修改 <br />
addActionListener() 添加监视器 <br />
removeActionListener() 移去监视器 <br />
2、文本区 <br />
TextArea() 构造文本区 <br />
TextArea(String s) 构造文本区，显示s <br />
TextArea(String s,int x,int y) 构造文本区，x行，y列，显示s <br />
TextArea(int x,int y) 构造文本区，x行，y列 <br />
TextArea(String s,int x,ing y,int scrollbar) <br />
scrollbar的值是： <br />
TextArea.SCROLLBARS_BOTH <br />
TextArea.SCROLLBARS_VERTICAL_ONLY <br />
TextArea.SCROLLBARS_HORIZONTAL_ONLY <br />
TextArea.SCROLLBARS_NONE <br />
setText(String s) 设置文本为s <font color="#ffffff"></font><br />
getText() 获取文本 <br />
addTextListener() 添加监视器 <br />
removeTextListener() 移去监视器 <br />
insert(String s,int x) 在x处插入文本s <br />
replaceRange(String s,int x,int y) 用s替换从x到y处的文本 <br />
append(String s) 在文本的最后追加文本s <br />
Int getCaretPosition(int n) 获取文本区中光标的位置 <br />
<br />
按钮 <br />
<br />
1、按钮 <br />
Button() 构造按钮 <br />
Button(String s) 构造按钮，标签是s <br />
setLabel(String s) 设置按钮标签是s <br />
getLabel() 获取按钮标签 <br />
addActionListener() 添加监视器 <br />
removeActionListener() 移去监视器 <br />
<br />
标签 <br />
<br />
1、标签 <br />
Label() 构造标签 <br />
Label(String s) 构造标签，显示s <br />
Label(String s,int x) <br />
x是对齐方式，取值： <br />
Label.LEFT <br />
Label.RIGHT <br />
Label.CENTER <br />
setText(String s) 设置文本s <br />
getText() 获取文本 <br />
setBackground(Color c) 设置标签背景颜色 <br />
setForeground(Color c) 设置字体颜色 <br />
<br />
<br />
选择框 <br />
<br />
1、选择框 <br />
Checkbox() 构造选择框 <br />
Checkbox(String s) 构造选择框，给定标题s <br />
Checkbox(String s,boolean b) b设定初始状态 <br />
Checkbox(String s,boolean b,CheckboxGroup g) g设定了所属的组（有了组就成为单选框） <br />
addItemListener() 添加监视器 <br />
removeItemListener() 移去监视器 <br />
getState() 返回选择框的是否选中状态 <br />
setState(boolean b) 设置选择框的状态 <br />
getLabel() 获取选择框的标题 <br />
setLabel(String s) 设置选择框的标题为s <br />
<br />
选择控件和滚动列表 <br />
<br />
1、选择控件 <br />
Choice() 构造选择控件 <br />
add(String s) 向选择控件增加一个选项 <br />
addItemListener() 添加监视器 <br />
removeItemListener() 移去监视器 <br />
getSelectedIndex() 返回当前选项的索引 <br />
getSelectedItem() 返回当前选项的字符串代表 <br />
insert(String s,int n) 在n处插入选项s <br />
remove(int n) <br />
removeAll() <br />
2、滚动列表 <br />
List() 构造滚动列表 <br />
List(int n) 参数n是可见行数 <br />
List(int n,boolean b) 参数b是设置是否可以多项选择 <br />
add(String s) 向列表的结尾增加一个选项 <br />
add(String s,int n) 在n处增加一个选项 <br />
AddActionListener() 滚动列表添加监视器 <br />
addItemListener() 滚动列表上的选项添加监视器 <font color="#ffffff"></font><br />
remove(int n) 删除n初的选项 <br />
remnoveAll() 删除全部选项 <br />
getSelectedIndex() 返回当前选项的索引 <br />
getSelectedItem() 返回当前选项的字符串代表 <br />
<br />
<br />
3、组件类的一些常用方法 <br />
void setBackground(Color c) 设置组件背景颜色 <br />
void setForeground(Color c) 设置组件前景颜色 <br />
void setFonts(Font f) 设置组件字体 <br />
void setBounds(int x,int y,int w,int h) 设置坐标，x，y表示在容器中坐标，w,h表示宽和高 <br />
void setLocation(int x,int y) 移动到x，y 处 <br />
void setSize(int w,int h) 设置宽和高 <br />
void setVisible(boolean b) 设置组建是否可见 <br />
int getBounds().wigth 获取宽 <br />
int getBounds().height 获取高 <br />
int getBounds().x 获取x 坐标 <br />
int getBounds().y 获取y 坐标 <br />
Toolkit getToolkit() 获取工具包对 <br />
void setEnabled(boolean b) 设置是否可以使用（默认可以） <br />
<br />
窗口和菜单 <br />
1、窗口 <br />
Frame() 构造窗口 <br />
Frame(String s) 窗口标题是s <br />
setBounds(int x,int y,int w,int h) 窗口位置x，y，宽w,高y <br />
setSize(int w,int h) 设置窗口位置（单位是像素） <font color="#ffffff"></font><br />
setBackground(Color c) 设置背景颜色 <br />
setVisible(boolean b) 设置窗口是否可见 <br />
pack() 窗口出现时紧凑 <br />
setTitle(String s) 设置标题为s <br />
getTitle() 获取标题 <br />
setResizable(boolean b) 设置窗口大小是否可以调整 <br />
2、菜单条 <br />
Menubar() 构造菜单条 <br />
setMenubar() 窗口添加菜单条 <br />
3、菜单 <br />
Menu() 构造菜单 <br />
Menu(String s) 构造菜单，标题s <br />
add <br />
add(MenuItem item) 菜单增加菜单选项item <br />
add(String s) 向菜单增加选项s <br />
getItem(int n) 获取n处的选项 <br />
getItemCount() 获取选项数目 <br />
insert(MenuItem item,int n) 在n处插入菜单选项item <br />
insert(String s,int n) 在n处插入菜单选项 <br />
remove(int n) 删除菜单的n处的菜单选项 <br />
removeAll() 删除全部 <br />
4、菜单项 <br />
MenuItem() 构造菜单项 <br />
MenuItem(String s) 构造标题是s的菜单项 <br />
setEnabled(boolean b) 设置是否可以被选择 <br />
getLabel() 得到菜单选项名 <br />
addActionListener() 添加监视器 <br />
5、有关菜单的技巧 <br />
addSeparator() 增加菜单分割线 <br />
CheckboxMenuItem() 复选框菜单项 <br />
setShortcut(MenuShortcut k) 设置快捷键(k取值KeyEvent.VK_A----KeyEvent.VK_Z)
<div class="Tuu310"></div>
<br />
<br />
<br />
建立对话框 <br />
1、Dialog类 <br />
Dialog(Frame f,String s) 构造对话框，初始不可见，s是标题，f是对话框所依赖的窗口 <br />
Dialog(Frame f,String s,boolean b) b设置初始是否可见 <br />
getTitle() 获取对话框标题 <br />
setTitle(String s) 设置对话框标题 <br />
setModal(boolean b) 设置对话框模式 <br />
setSize(int w,int h) 设置对话框大小 <br />
setVisible(boolean b) 显示或隐藏对话框 <br />
2、FileDialog类 <br />
Filedialog(Frame f,String s,int mode) mode的值是fileDialog.LOAD或者fileDialog.SAVE <br />
public String getDirectory() 获取当前文件对话框中显示的文件所属目录 <br />
public String getFile() 获取当前文件对话框中文件的字符串表示，不存在返回null <br />
<br />
Java中的鼠标和键盘事件 <br />
1、使用MouseListener借口处理鼠标事件 <br />
鼠标事件有5种：按下鼠标键，释放鼠标键，点击鼠标键，鼠标进入和鼠标退出 <br />
鼠标事件类型是MouseEvent，主要方法有： <br />
getX(),getY() 获取鼠标位置 <br />
getModifiers() 获取鼠标左键或者右键 <br />
getClickCount() 获取鼠标被点击的次数 <br />
getSource() 获取鼠标发生的事件源 <br />
事件源获得监视器的方法是addMouseListener()，移去监视器的方法是removeMouseListener()
<p class="Tuu310"></p>
<br />
处理事件源发生的时间的事件的接口是MouseListener 接口中有如下的方法 <br />
mousePressed(MouseEvent) 负责处理鼠标按下事件 <br />
mouseReleased(MouseEvent) 负责处理鼠标释放事件 <br />
mouseEntered(MouseEvent) 负责处理鼠标进入容器事件 <br />
mouseExited(MouseEvent) 负责处理鼠标离开事件 <br />
mouseClicked(MouseEvent) 负责处理点击事件 <br />
2、使用MouseMotionListener接口处理鼠标事件 <br />
事件源发生的鼠标事件有2种：拖动鼠标和鼠标移动 <br />
鼠标事件的类型是MouseEvent <br />
事件源获得监视器的方法是addMouseMotionListener() <br />
处理事件源发生的事件的接口是MouseMotionListener 接口中有如下的方法 <br />
mouseDragged() 负责处理鼠标拖动事件 <br />
mouseMoved() 负责处理鼠标移动事件 <br />
3、控制鼠标的指针形状 <br />
setCursor(Cursor.getPreddfinedCursor(Cursor.鼠标形状定义)) 鼠标形状定义见（书 P 210） <br />
4、键盘事件 <br />
键盘事件源使用addKeyListener 方法获得监视器 <br />
键盘事件的接口是KeyListener 接口中有3个方法 <br />
public void keyPressed(KeyEvent e) 按下键盘按键 <br />
public void keyReleased(KeyEvent e) 释放键盘按键 <br />
public void keyTypde(KeyEvent e) 按下又释放键盘按键 <font color="#ffffff"></font><br />
<br />
Java多线程机制 <br />
1、Java的线程类与Runnable接口 <br />
Thread类 <br />
public Thread() 创建线程对象 <br />
public Thread(Runnable target) target 称为被创建线程的目标对象，负责实现Runnable接口 <br />
线程优先级 <br />
Thread类有三个有关线程优先级的静态常量：MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY <br />
新建线程将继承创建它的副相承的优先级，用户可以调用Thread类的setPriority(int a)来修改 <br />
a的取值: <br />
Thread.MIN_PRIORITY,Thread.MAX_PRIORITY,Thread.NORM_PRIORITY <br />
主要方法 <br />
启动线程 start() <br />
定义线程操作 run() <br />
使线程休眠 sleep() <br />
sleep(int millsecond) 以毫秒为单位的休眠时间 <br />
sleep(int millsecond,int nanosecond) 以纳秒为单位的休眠时间 <br />
currentThread() 判断谁在占用CPU的线程<br />
第二十章 输入输出流 <br />
1、FileInputStream类 <br />
FileInputStream(String name) 使用给定的文件名name创建一个FileInputStream对象 <br />
FileInputStream(File file) 使用File对象创建FileInpuStream对象 <br />
File类有两个常用方法： <br />
File(String s) s确定文件名字 <br />
File(String directory,String s) directory是文件目录
<p class="Tuu310"></p>
<br />
例如： <br />
File f=new File("Myfile.dat"); <br />
FileInputStream istream=new FileInputStream(f); <br />
处理I/O异常 <br />
当出现I/O错误的时候，Java生成一个IOException(I/O异常)对象来表示这个错误的信号。 <br />
程序必须使用一个catch检测这个异常 <br />
例如： <br />
try{ <br />
FileInputStream ins= new FileInputStream("Myfile.dat"); <br />
} <br />
catch(IOException e){ <br />
System.out.println("File read Error:"+e); <br />
} <br />
从输入流中读取字节 <br />
int read() 返回0~255之间一个整数，如果到输入流末尾，则返回-1 <br />
int read(byte b[]) 读取字节数组 <br />
int read(byte b[],int off,int len) off指定把数据存放在b中什么地方，len指定读取的最大字节数 <br />
关闭流 <br />
close() <br />
2、FileOutputStream类 <br />
FileOutputStream(String name) 使用指定的文件名name创建FileOutputStream对象 <br />
FileOutputStream（File file） 使用file对象创建FileOutputStream对象 <br />
FileOutputStream（FileDescriptor fdobj） 使用FileDescriptor对象创建FileOutputStream对象 <br />
3、FileReader类和FileWriter类 <br />
FileReader(String filename)
<p class="Tuu310"></p>
<br />
FileWriter(String filename) <br />
处理时需要FileNotFoundException异常 <br />
4、RandomAccessFile类 <br />
RandomAccessFile不同于FileInputStream和FileOutputStream,不是他们的子类 <br />
当我们想对一个文件进行读写操作的时候，创建一个指向该文件的RandomAccessFile流就可以了 <br />
RandomAccessFile类有两个构造方法： <br />
RandomAccessFile（String name, String mode） name是文件名，mode取r(只读)或rw(读写) <br />
RandomAccessFile（File file,String mode） file给出创建流的源 <br />
seek(long a) 移动RandomAccessFile流指向文件的指针,a确定指针距文件开头的位置 <br />
getFilePointer() 获取当前文件的指针位置 <br />
close() 关闭文件 <br />
getFD() 获取文件的FileDescriptor <br />
length() 获取文件长度 <br />
read() 读取一个字节数据 <br />
readBoolean() 读取一个布尔值 <br />
readByte() 读取一个字节 <br />
readChar() <br />
readFloat() <br />
readFully(byte b[]) <br />
readInt() <br />
readLine() <br />
readLong() <br />
readUnsignedShort() <br />
readUTF() 读取一个UTF字符串 <br />
setLength(long newLength) 设置文件长度 <br />
skipByte(int n) 在文件中跳过给定数量的字节 <br />
write(byte b[]) 写b.length个字节到文件 <br />
writeBoolean(bolean b) <br />
writeByte(int v) <br />
writeChar(char c) <br />
writeChars(String s) <br />
writeDouble(double d) <br />
writeFloat(float v) <br />
writeInt(int i) <br />
writeLong(long l) <br />
writeShort(int i) <br />
writeUTF(String s) <br />
5、管道流 <br />
PipedInputStream类 <br />
PipedInputStream() 创建一个管道输入流 <br />
PipedInputStream（PipedOutputStream a） 连接到输出流a的输入流 <br />
read() 从输入流中读取一个字节 <br />
read(byte b[],int off,int len) off是在b中的开始位置，len是字节长度 <br />
PipedOutputStream类 <br />
PipedOutputStream() 创建一个输出流 <br />
PipedOutputStream(PipedInputStream a) 连接到输入流a的输出流 <br />
write(int b) <br />
write(byte b[],int off,int len) <br />
counnect() 连接输入输出流 <br />
close() 关闭流 <br />
在使用的时候要捕获IOException异常。 <br />
6、数据流 <br />
DataInputStream类(数据输入流) <br />
DataInputStream(InputStream in) 将数据输入流指向一个由in指定的输入流 <br />
DataOutputStream类(数据输出流) <br />
DataOutputStream(OutputStream out) 将数据输出流指向一个由out指定的输出流 <font color="#ffffff"></font><br />
主要方法： <br />
close() <br />
read() 读取一个字节数据 <br />
readBoolean() 读取一个布尔值 <br />
readByte() 读取一个字节 <br />
readChar() <br />
readFloat() <br />
readFully(byte b[]) <br />
readInt() <br />
readLine() <br />
readLong() <br />
readUnsignedShort() <br />
readUTF() 读取一个UTF字符串 <br />
skipByte(int n) 在文件中跳过给定数量的字节 <br />
write(byte b[]) 写b.length个字节到文件 <br />
writeBoolean(bolean b) <br />
writeByte(int v) <br />
writeChar(char c) <br />
writeChars(String s) <br />
writeDouble(double d) <br />
writeFloat(float v) <br />
writeInt(int i) <br />
writeLong(long l) <br />
writeShort(int i) <br />
writeUTF(String s) <br />
7、对象流 <br />
ObjectInputStream类和ObjectOutputStream类分别是DataInputStream类和DataOutputStream类的子类 <br />
8、回压输入流 <br />
PushbackInputStream类 <br />
PushbackInputStream(InputStream in) <br />
PushbackReader类 <br />
PushbackReader(Reader in) <br />
unread(char c) 回压一个字符 <br />
unread(char c[]) 回压数组c中全部字符 <br />
unread(char c[],offset,int n) 回压c中从offset开始的n个字符 <br />
<br />
java网络的基本知识 <br />
1、使用URL（统一资源定位） <br />
例如： <br />
try <br />
{ <br />
url=new URL("http://www.sina.com.cn"; <br />
} <br />
catch(MalformedURLException e) <br />
{ <br />
System.out.println("Bad URL:"+url); <br />
} <br />
在Applet 中链接向另外的Web页面，使用代码： <br />
getAppletContext().showDocument(url); <br />
2、套接字 <br />
客户建立到服务器的套接字（Socket） <br />
Socket(String host,int port) host是服务器的IP地址，port是端口号 <br />
建立了套接字后可以使用getInputStream()获得输入流 <br />
还可以使用getOutputStream()获得一个输出流 <br />
服务器建立接受客户套接字的服务器套接字（ServerSocket） <br />
ServerSocket(int port) port是端口号 <br />
建立了套接字连接后可以使用accept()接收客户的套接字 <br />
可以使用getOutputStream()获得一个输出流 <br />
还可以使用getInputStream()获得一个输入流 <br />
3、InetAddress类 <br />
getByName(String )<br />
3、InetAddress类 <br />
getByName(String s) 获取Internet上主机的地址 <br />
getHostName() 获取InetAddress对象所包含的域名 <br />
getHostAddress() 获取InetAddress对象所包含的IP地址
<p class="Tuu310"></p>
<br />
getLocalHost() 获取本地地址 <br />
4、UDP数据报 <br />
发送数据包，即使用DatagramPacket类将数据打包,有两种构造方法 <br />
DatagramPacket(byte data[],int length,InetAddress address,int port) <br />
?含有data数组的数据 <br />
?该数据包将发送到地质是address，端口是port的主机上 <br />
DatagramPacket(byte data[],int offset,int length,InetAddress address,int port) <br />
?含有data数组的从offset开始，length长度的数据 <br />
?该数据包将发送到地质是address，端口是port的主机上 <br />
接收数据包，即使用DatagramSocket（int port）创建一个对象，port必须和待接收的数据包的端口相同 <br />
例如： <br />
如果发送方的数据包端口是5566 <br />
DatagramSocket mail=new DatagramSocket(5566); <br />
然后对象mail可以使用方法receive（Datagrampacket pack）接收数据包 <br />
在使用参数pack 接收数据包前，必须创建pack <br />
byte data[]=new byte[100]; <br />
int length=90; <br />
DatagramPacket pack=new DatagramPataet(data,length); <br />
mail.receive(pack); <br />
该数据包pack将接收长度是length的数据放入data,注意数据长度不要超过8192KB <br />
pack还可以调用方法getPort()获取所接受数据包是从什么端口发出的
<p class="Tuu310"></p>
<br />
调用方法InetAddress getAddress()可以获知数据包来自哪个主机 <br />
<br />
Java与图像 <br />
1、java支持的图像类型：GIF，JPEG，BMP <br />
2、Image类 <br />
首先申请一个Image对象 <br />
Image img =getImage(URL url,String name) url是图像地址，name是图片名称 <br />
通常使用： <br />
Image img =getImage(getCodBase(),String name) getCodBase()获取当前小应用程序的URL，也就是在同一目录下 <br />
图像被加载后，就可以在paint()中绘制了 <br />
drawImage(Image img,int x,int y,ImageObserver observer) <br />
img是上面获取的图像， x,y是指定图像左上角的位置，observer是加载图像时的图像观察器 <br />
Applet类已经实现了ImageObserver接口，所以可以直接使用this作为最后一个参数 <br />
drawImage(Image img,int x,int y,int width,int height,ImageObserver observer) <br />
width和height是要绘制的图像的宽和高 <br />
可以使用img.getHeight(this)和img.getWidth(this)来获取被加载的图像的宽和高 <br />
3、设置Java窗口图标 <br />
Frame对象可以使用setIconImage(Image img)方法设置左上角图标，默认图标是咖啡杯 <br />
<br />
Java数据库连接(JDBC) <br />
1、JDBC-ODBC桥接器 <br />
建立JDBC-ODBC桥接器 <br />
try <br />
{ <br />
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <br />
} <br />
catch(ClassNotFoundException e){} <br />
连接到数据库 <br />
try <br />
{ <br />
Connection con=DriverManager.getConnection("jdbcdbc:数据源名称","数据源的login name"， <br />
"数据源的password");<br />
} <br />
catch(SQLException e){} <br />
向数据库发送SQL语句 <br />
try <br />
{ <br />
Statement sql=con.createStatement(); <br />
} <br />
catch(SQLException e){} <br />
处理查询结果 <br />
ResultSet rs=sql.executeQuery("SQL语句");<br />
第二十四章 Java与多媒体 <br />
1、在小程序中播放声音 <br />
java可以播放au,aiff,wav,midi,rfm格式的音频 <br />
可以调用Applet的一个静态方法： <br />
newAudioClip(URL url,String name) url是地址，name是音频名称 <br />
也可以用Applet类的实例方法： <br />
getAudioClip(URL url,String name) <br />
根据url地址和声音文件name，获得一个用于播放的音频对象，这对象可以使用下面的方法来处理声音： <br />
play() 播放声音文件name <br />
loop() 循环播放name <br />
stop() 停止播放name <br />
2、Java媒体框架(JMF) <br />
创建播放器
<div class="Tuu310"></div>
<br />
try <br />
{ <br />
URL url=new URL(getDocumenBase(),视频文件名称); <br />
player player=Manager.createPlayer(url); <br />
} <br />
catch(IOException e){} <br />
向播放器注册控制监视器 <br />
player.addControllerListener(监视器); <br />
创建监视器必须使用接口ControllerListener ，该接口中的方法是 <br />
public void controllerUpdate(ControllerEvent e) <br />
让播放器对媒体进行预提取 <br />
player.prefetch() <br />
启动播放器 <br />
player.start(); <br />
停止播放器 <br />
player.stop(); <br />
停止播放器后必须释放内存中的资源 <br />
player.deallocate(); <br />
<br />
Java Swing基础 <br />
1、Jcomponent类 <br />
Jcomponent类 是所有轻量组件的父类，主要的子类有： <br />
JButton 创建按钮对象，而且可以创建在图标的按钮 <br />
JComboBox 创建组合框对象，和Choice相似 <br />
JCheckBox 创建复选框对象 <br />
JFileChooser 创建文件选择器 <br />
JInternalFrame 创建内部窗体 <br />
JLabel 创建标签 <br />
JMenu 创建菜单对象 <br />
JMenuBar 创建菜单条对象 <br />
JMenuItem 创建菜单项对象 <br />
JPanel 创建面板对象 <br />
JPasswordField 创建口令文本对象 <br />
JPopupMenu 创建弹出式菜单
<div class="Tuu310"></div>
<br />
JProgressBar 创建进程条 <br />
JRadioButton 创建单选按钮 <br />
JScrollBar 创建滚动条 <br />
JScrollPane 创建滚动窗格 <br />
JSlider 创建滚动条 <br />
JSplitPane 创建拆分窗格 <br />
JTable 创建表格 <br />
JTextArea 创建文本区 <br />
JTexPane 创建文本窗格 <br />
JToolBar 创建工具条 <br />
JToolTip 创建工具提示对象 <br />
JTree 创建树对象 <br />
2、JFrame类 <br />
JFrame类及其子类创建的对象是窗体 <br />
（1）JFrame类及其子类创建的窗体是swing窗体 <br />
（2）不可以把组件直接加到swing窗体中，应该把组件加到内容面板中 <br />
（3）不能为swing窗体设置布局，而应当为内容面板设置布局 <br />
（4）swing窗体通过调用getContentPane()方法得到它的内容面板 <br />
3、JApplet类 <br />
（1）不可以把组件直接添加到小程序容器中，也应该添加到内容面板中 <br />
（2）不能为小程序设置布局 <br />
（3）小程序容器通过调用getContenPane()方法得到内容面板 <br />
4、JDialog类 <br />
（1）不可以把组件直接添加到对话框容器中，也应该添加到内容面板中 <br />
（2）不能为对话框设置布局 <br />
（3）对话框容器通过调用getContenPane()方法得到内容面板 <br />
5、JPanel面板 <br />
JPanel() <br />
JPanel(布局对象) <br />
6、滚动窗口JScrollPane <br />
JScrollPane() <br />
JScrollPane(component c) <br />
7、拆分窗口JSplitPane <br />
JSplitPane(int a,Component b,Component c) <br />
a的取值是HORIZONTAL_SPLIT或者VERTICAL_SPLIT决定水平拆分还是垂直拆分 <br />
JSplitPane(int a,boolean b ,Component b,Component c) b的取值决定拆分线移动的时候组件是否连续变化 <br />
8、内部窗体JInternalFrame <br />
JInternalFrame(String title,boolean resizable,booleam closable,boolean max,boolean min) <br />
参数的意义分别是窗口名称，是否能调整大小，是否有关闭按钮，最大化按钮，最小化按钮 <br />
（1）不能把组件直接加到窗体中，而是加到内容面板中 <br />
（2）必须先把内部窗体加到一个容器中（JDesktopPane），该容器是专门为内部窗体服务的 <br />
9、按钮（JButton） <br />
JButton() 创建按钮 <br />
JButton(String s) s是按钮的名字 <br />
JButton(Icon icon) icon是按钮上的图标 <br />
JButton(String s,Icon icon) <br />
getText() 获取按钮名字 <br />
getIcon() 获取按钮图标 <br />
setIcon(Icon icon) 设置按钮图标 <br />
setHorizontalTextposition(int a) a确定按钮上图标的位置，取值： <br />
AbstractButton_CENTR,AbstractButton_LEFT,AbstractButton_RIGHT <br />
setVerticalTextposition(int a) a确定按钮上名字相对图标的位置，取值： <br />
AbstractButton.TOP，AbstractButton.BOTTOM，AbstractButton.CENTR <br />
setMnemonic(char c) 设置按钮的键盘操作方式是字符c（Alt+c） <br />
setEnabled(boolean b) b决定按钮是否可以被单击
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/200979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-16 18:43 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/16/200979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习的30个目标</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Thu, 08 May 2008 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199249.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199249.html</trackback:ping><description><![CDATA[17.你需要学习企业级JavaBeans(EJB)以及它们的不同组件模式：Stateless/StatefulSessionBeans，EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL)，或者 Message-DrivenBeans(MDB)。
<p>　　18.你需要学习如何管理与配置一个J2EE应用程序服务器，如WebLogic，JBoss等，并且利用它的附加服务，例如簇类，连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。</p>
<p>　　19.你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP)，以及他们的主流JAVA规格和执行。例如AspectJ和AspectWerkz。</p>
<p>　　20.你需要熟悉对不同有用的API和framework等来为你服务。例如Log4J(logging/tracing)，Quartz (scheduling)，JGroups(networkgroupcommunication)，JCache(distributedcaching)， Lucene(full-textsearch)，JakartaCommons等等。</p>
<p>21.如果你将要对接或者正和旧的系统或者本地平台，你需要学习JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。</p>
<p>　　22.你需要熟悉JINI技术以及与它相关的分布式系统，比如掌握CROBA。</p>
<p>　　23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs)，例如Portlets(168)，JOLAP(69)，DataMiningAPI(73)，等等。</p>
<p>　　24.你应该熟练掌握一种JAVAIDE例如sunOne，netBeans，IntelliJIDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了：)</p>
<p>　　25.JAVA(精确的说是有些配置)是冗长的，它需要很多的人工代码(例如EJB)，所以你需要熟悉代码生成工具，例如XDoclet。</p>
<p>　　26.你需要熟悉一种单元测试体系(JNunit)，并且学习不同的生成、部署工具(Ant，Maven)。</p>
<p>　　27.你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。</p>
<p>　　28.你需要能够深入了解加熟练操作和配置不同的<a class="channel_keylink" href="http://edu.itbulo.com/sys/" target="_blank">操作系统</a>，比如GNU/linux，sunsolaris，macOS等，做为跨平台软件的开发者。</p>
<p>　　29.你还需要紧跟java发展的步伐，比如现在可以深入的学习javaME，以及各种java新规范，技术的运用，如新起的web富客户端技术。</p>
<p>　　30.你必需要对opensource有所了解，因为至少java的很多技术直接是靠开源来驱动发展的，如java3D技术。</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-08 15:08 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习的30个目标</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Thu, 08 May 2008 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199250.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199250.html</trackback:ping><description><![CDATA[17.你需要学习企业级JavaBeans(EJB)以及它们的不同组件模式：Stateless/StatefulSessionBeans，EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL)，或者 Message-DrivenBeans(MDB)。
<p>　　18.你需要学习如何管理与配置一个J2EE应用程序服务器，如WebLogic，JBoss等，并且利用它的附加服务，例如簇类，连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。</p>
<p>　　19.你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP)，以及他们的主流JAVA规格和执行。例如AspectJ和AspectWerkz。</p>
<p>　　20.你需要熟悉对不同有用的API和framework等来为你服务。例如Log4J(logging/tracing)，Quartz (scheduling)，JGroups(networkgroupcommunication)，JCache(distributedcaching)， Lucene(full-textsearch)，JakartaCommons等等。</p>
<p>21.如果你将要对接或者正和旧的系统或者本地平台，你需要学习JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。</p>
<p>　　22.你需要熟悉JINI技术以及与它相关的分布式系统，比如掌握CROBA。</p>
<p>　　23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs)，例如Portlets(168)，JOLAP(69)，DataMiningAPI(73)，等等。</p>
<p>　　24.你应该熟练掌握一种JAVAIDE例如sunOne，netBeans，IntelliJIDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了：)</p>
<p>　　25.JAVA(精确的说是有些配置)是冗长的，它需要很多的人工代码(例如EJB)，所以你需要熟悉代码生成工具，例如XDoclet。</p>
<p>　　26.你需要熟悉一种单元测试体系(JNunit)，并且学习不同的生成、部署工具(Ant，Maven)。</p>
<p>　　27.你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。</p>
<p>　　28.你需要能够深入了解加熟练操作和配置不同的<a class="channel_keylink" href="http://edu.itbulo.com/sys/" target="_blank">操作系统</a>，比如GNU/linux，sunsolaris，macOS等，做为跨平台软件的开发者。</p>
<p>　　29.你还需要紧跟java发展的步伐，比如现在可以深入的学习javaME，以及各种java新规范，技术的运用，如新起的web富客户端技术。</p>
<p>　　30.你必需要对opensource有所了解，因为至少java的很多技术直接是靠开源来驱动发展的，如java3D技术。</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-08 15:08 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础：将数据库操作封装到Javabean的介绍</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199039.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Wed, 07 May 2008 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199039.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199039.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199039.html</trackback:ping><description><![CDATA[封装数据库操作，目的就是为了隐藏<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/403/5948403.shtml" target="_blank">java</a>.sql包内的类，在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。
<p>　　但是很多网友在封装时，却喜欢返回结果集(ResultSet对象)，那么这个封装就没有意义了。</p>
<p>　　1. 又是直接操作核心数据库类，跟封装前几乎没什么变化。</p>
<p>　　2. 结果集总是依赖于它使用的连接(<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/393/5947393.shtml" target="_blank">Connection</a>)对象。因此当连接对象在方法内被关闭后，你返回的ResultSet就没有用了。</p>
<p>　　如果真的要获得查询数据库的结果集，就把结果集对象内的所有数据，转储到以Map为元素的List对象内。</p>
<p>　　当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))</p>
<p>　　下面是简单的数据库操作<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/425/5948425.shtml" target="_blank">Javabean</a>的代码</p>
<p>　　DbWrapper.java</p>
<p>　　import java.sql.*;</p>
<p>　　import java.util.*;</p>
<p>　　public <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/213/5947213.shtml" target="_blank">class</a> DbWrapper</p>
<p>　　{</p>
<p>　　// 定义连接池对象为静态变量，将一直存在，直到工作目录关闭。</p>
<p>　　private static DataSource ds = null;</p>
<p>　　// 1.用连接池的方式获得连接</p>
<p>　　// 如果不是做多数据库程序，推荐使用此方法</p>
<p>　　// 相关内容：在<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/243/6092743.shtml" target="_blank">tomcat</a>管理界面配置连接池</p>
<p>　　public static Connection openConnection() throws Exception</p>
<p>　　{</p>
<p>　　// 只需要初始化1次</p>
<p>　　if ( ds == null )</p>
<p>　　{</p>
<p>　　Context initContext = new InitialContext();</p>
<p>　　Context envContext = (Context) initContext.lookup("java:/comp/env");</p>
<p>　　DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");</p>
<p>　　}</p>
<p>　　return ds.getConnection();</p>
<p>　　}</p>
<p>　　// 2.用jdbc驱动获得连接</p>
<p>　　// 相关内容：JSP数据库连接大全</p>
<p>　　public static Connection openConnection(</p>
<p>　　<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/400/6026400.shtml" target="_blank">String</a> driver,</p>
<p>　　String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/125/5949125.shtml" target="_blank">url</a>,</p>
<p>　　String username,</p>
<p>　　String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/435/6025935.shtml" target="_blank">password</a>)</p>
<p>　　throws Exception</p>
<p>　　{</p>
<p>　　Class.forName(driver).newInstance();</p>
<p>　　return DriverManager.getConnection(url, username, password);</p>
<p>　　}</p>
<p>　　public static void closeConnection(Connection conn) throws Exception</p>
<p>　　{</p>
<p>　　if ( conn != null )</p>
<p>　　{</p>
<p>　　conn.close();</p>
<p>　　}</p>
<p>　　}</p>
<p>　　public static int executeUpdate(String sql) throws Exception</p>
<p>　　{</p>
<p>　　int count = 0;</p>
<p>　　Connection conn = null;</p>
<p>　　Statement stmt = null;</p>
<p>　　try</p>
<p>　　{</p>
<p>　　conn = openConnection();</p>
<p>　　stmt = conn.createStatement();</p>
<p>　　count = stmt.executeUpdate(sql);</p>
<p>　　}</p>
<p>　　catch ( Exception e )</p>
<p>　　{</p>
<p>　　throw e;</p>
<p>　　}</p>
<p>　　finally</p>
<p>　　{</p>
<p>　　closeConnection(conn);</p>
<p>　　}</p>
<p>　　return count;</p>
<p>　　}</p>
<p>　　public static List executeQuery(String sql) throws Exception</p>
<p>　　{</p>
<p>　　List list = new ArrayList();</p>
<p>　　Connection conn = null;</p>
<p>　　Statement stmt = null;</p>
<p>　　ResultSet rs = null;</p>
<p>　　try</p>
<p>　　{</p>
<p>　　conn = openConnection();</p>
<p>　　stmt = conn.createStatement();</p>
<p>　　rs = stmt.executeQuery(sql);</p>
<p>　　ResultSetMetaData rsmd = rs.getMetaData();</p>
<p>　　while ( rs.<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/412/6093412.shtml" target="_blank">next</a>() )</p>
<p>　　{</p>
<p>　　Map map = new HashMap();</p>
<p>　　for ( int i = 1; i &lt; = rsmd.getColumnCount(); i++ )</p>
<p>　　{</p>
<p>　　map.put(rsmd.getColumnName(i), rs.getObject(i));</p>
<p>　　}</p>
<p>　　list.add(map);</p>
<p>　　} }</p>
<p>　　catch ( Exception e )</p>
<p>　　{</p>
<p>　　e.printStackTrace();</p>
<p>　　}</p>
<p>　　finally</p>
<p>　　{</p>
<p>　　if ( rs != null ) rs.close();</p>
<p>　　closeConnection(conn);</p>
<p>　　}</p>
<p>　　return list; }</p>
<p>　　}</p>
<p>　　使用示例:</p>
<p>　　// 1.对于insert, update, delete语句int count = DbWrapper.executeUpdate(sql);</p>
<p>　　// 2.对于selete语句</p>
<p>　　java.util.List list = DbWrapper.executeQuery(sql);</p>
<p>　　// 方法一:按名字取值，注意大小写是严格区分的</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　out.println(mag.get("column_name").toString());</p>
<p>　　}</p>
<p>　　// 方法二：遍历取值</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　for (java.util.Iterator <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/250/6025750.shtml" target="_blank">it</a> = map.keySet().iterator(); it.hasNext();)</p>
<p>　　{</p>
<p>　　String column_name = it.next().toString()); // 取值时注意null判断</p>
<p>　　out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());</p>
<p>　　}</p>
<p>　　}</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-07 18:52 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础：将数据库操作封装到Javabean的介绍</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199040.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Wed, 07 May 2008 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199040.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199040.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199040.html</trackback:ping><description><![CDATA[封装数据库操作，目的就是为了隐藏<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/403/5948403.shtml" target="_blank">java</a>.sql包内的类，在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。
<p>　　但是很多网友在封装时，却喜欢返回结果集(ResultSet对象)，那么这个封装就没有意义了。</p>
<p>　　1. 又是直接操作核心数据库类，跟封装前几乎没什么变化。</p>
<p>　　2. 结果集总是依赖于它使用的连接(<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/393/5947393.shtml" target="_blank">Connection</a>)对象。因此当连接对象在方法内被关闭后，你返回的ResultSet就没有用了。</p>
<p>　　如果真的要获得查询数据库的结果集，就把结果集对象内的所有数据，转储到以Map为元素的List对象内。</p>
<p>　　当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))</p>
<p>　　下面是简单的数据库操作<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/425/5948425.shtml" target="_blank">Javabean</a>的代码</p>
<p>　　DbWrapper.java</p>
<p>　　import java.sql.*;</p>
<p>　　import java.util.*;</p>
<p>　　public <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/213/5947213.shtml" target="_blank">class</a> DbWrapper</p>
<p>　　{</p>
<p>　　// 定义连接池对象为静态变量，将一直存在，直到工作目录关闭。</p>
<p>　　private static DataSource ds = null;</p>
<p>　　// 1.用连接池的方式获得连接</p>
<p>　　// 如果不是做多数据库程序，推荐使用此方法</p>
<p>　　// 相关内容：在<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/243/6092743.shtml" target="_blank">tomcat</a>管理界面配置连接池</p>
<p>　　public static Connection openConnection() throws Exception</p>
<p>　　{</p>
<p>　　// 只需要初始化1次</p>
<p>　　if ( ds == null )</p>
<p>　　{</p>
<p>　　Context initContext = new InitialContext();</p>
<p>　　Context envContext = (Context) initContext.lookup("java:/comp/env");</p>
<p>　　DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");</p>
<p>　　}</p>
<p>　　return ds.getConnection();</p>
<p>　　}</p>
<p>　　// 2.用jdbc驱动获得连接</p>
<p>　　// 相关内容：JSP数据库连接大全</p>
<p>　　public static Connection openConnection(</p>
<p>　　<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/400/6026400.shtml" target="_blank">String</a> driver,</p>
<p>　　String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/125/5949125.shtml" target="_blank">url</a>,</p>
<p>　　String username,</p>
<p>　　String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/435/6025935.shtml" target="_blank">password</a>)</p>
<p>　　throws Exception</p>
<p>　　{</p>
<p>　　Class.forName(driver).newInstance();</p>
<p>　　return DriverManager.getConnection(url, username, password);</p>
<p>　　}</p>
<p>　　public static void closeConnection(Connection conn) throws Exception</p>
<p>　　{</p>
<p>　　if ( conn != null )</p>
<p>　　{</p>
<p>　　conn.close();</p>
<p>　　}</p>
<p>　　}</p>
<p>　　public static int executeUpdate(String sql) throws Exception</p>
<p>　　{</p>
<p>　　int count = 0;</p>
<p>　　Connection conn = null;</p>
<p>　　Statement stmt = null;</p>
<p>　　try</p>
<p>　　{</p>
<p>　　conn = openConnection();</p>
<p>　　stmt = conn.createStatement();</p>
<p>　　count = stmt.executeUpdate(sql);</p>
<p>　　}</p>
<p>　　catch ( Exception e )</p>
<p>　　{</p>
<p>　　throw e;</p>
<p>　　}</p>
<p>　　finally</p>
<p>　　{</p>
<p>　　closeConnection(conn);</p>
<p>　　}</p>
<p>　　return count;</p>
<p>　　}</p>
<p>　　public static List executeQuery(String sql) throws Exception</p>
<p>　　{</p>
<p>　　List list = new ArrayList();</p>
<p>　　Connection conn = null;</p>
<p>　　Statement stmt = null;</p>
<p>　　ResultSet rs = null;</p>
<p>　　try</p>
<p>　　{</p>
<p>　　conn = openConnection();</p>
<p>　　stmt = conn.createStatement();</p>
<p>　　rs = stmt.executeQuery(sql);</p>
<p>　　ResultSetMetaData rsmd = rs.getMetaData();</p>
<p>　　while ( rs.<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/412/6093412.shtml" target="_blank">next</a>() )</p>
<p>　　{</p>
<p>　　Map map = new HashMap();</p>
<p>　　for ( int i = 1; i &lt; = rsmd.getColumnCount(); i++ )</p>
<p>　　{</p>
<p>　　map.put(rsmd.getColumnName(i), rs.getObject(i));</p>
<p>　　}</p>
<p>　　list.add(map);</p>
<p>　　} }</p>
<p>　　catch ( Exception e )</p>
<p>　　{</p>
<p>　　e.printStackTrace();</p>
<p>　　}</p>
<p>　　finally</p>
<p>　　{</p>
<p>　　if ( rs != null ) rs.close();</p>
<p>　　closeConnection(conn);</p>
<p>　　}</p>
<p>　　return list; }</p>
<p>　　}</p>
<p>　　使用示例:</p>
<p>　　// 1.对于insert, update, delete语句int count = DbWrapper.executeUpdate(sql);</p>
<p>　　// 2.对于selete语句</p>
<p>　　java.util.List list = DbWrapper.executeQuery(sql);</p>
<p>　　// 方法一:按名字取值，注意大小写是严格区分的</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　out.println(mag.get("column_name").toString());</p>
<p>　　}</p>
<p>　　// 方法二：遍历取值</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　for (java.util.Iterator <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/250/6025750.shtml" target="_blank">it</a> = map.keySet().iterator(); it.hasNext();)</p>
<p>　　{</p>
<p>　　String column_name = it.next().toString()); // 取值时注意null判断</p>
<p>　　out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());</p>
<p>　　}</p>
<p>　　}</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-07 18:52 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/07/199040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml 的含义</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198690.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Tue, 06 May 2008 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198690.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/198690.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/198690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/198690.html</trackback:ping><description><![CDATA[█<strong>XML是e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage的缩写</strong>。扩展标记语言XML是一种简单的数据存储语言，使用一系列简单的标记描述数据，而这些标记可以用方便的方式建立，虽然XML占用的空间比二进制数据要占用更多的空间，但XML极其简单易于掌握和使用。 <br />
<br />
XML与Access,Oracle和SQL Server等数据库不同，数据库提供了更强有力的数据存储和分析能力，例如：数据索引、排序、查找、相关一致性等，XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是：他极其简单。这是一个看上去有点琐细的优点，但正是这点使XML与众不同。 <br />
<br />
XML的简单使其易于在任何应用程序中读写数据，这使XML很快成为数据交换的唯一公共语言，虽然不同的应用软件也支持其它的数据交换格式，但不久之后他们都将支持XML，那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合，然后可以很容易加载XML数据到程序中并分析他，并以XML格式输出结果。<br />
<br />
XML的前身是<a href="http://baike.baidu.com/view/160656.htm" target="_blank">SGML</a>（The Standard Generalized Markup Language），是自IBM从60年代就开始发展的<a href="http://baike.baidu.com/view/609279.htm" target="_blank">GML</a>（Generalized Markup Language） <br />
<br />
同<a href="http://baike.baidu.com/view/692.htm" target="_blank">HTML</a>一样， XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集，它是描述网络上的数据内容和结构的标准。尽管如此，XML不象HTML，HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ，XML则对数据赋予上下文相关功能，它继承了SGML的大部分功能，却使用了不太复杂的技术。. <br />
<br />
为了使得SGML显得用户友好，XML重新定义了SGML的一些内部值和参数，去掉了大量的很少用到的功能，这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能，这样就使得网站设计者可以定义自己的文档类型，XML同时也推出一种新型文档类型，使得开发者也可以不必定义文档类型。 <br />
<br />
因为XML是W3C制定的，XML的标准化工作由W3C的XML工作组负责，该小组成员由来自各个地方和行业的专家组成，他们通过email交流对XML标准的意见，并提出自己的看法 (<a href="http://www.w3.org/TR/WD-xml" target="_blank">www.w3.org/TR/WD-xml</a>)。因为XML 是个公共格式， (它不专属于任何一家公司)，你不必担心XML技术会成为少数公司的盈利工具，XML不是一个依附于特定浏览器的语言<br />
<br />
XML（可扩展标记语言）是从称为SGML（标准通用标记语言）的更加古老的语言派生出来的。SGML的主要目的是定义使用标签来表示数据的标记语言的语法。<br />
<br />
标签由包围在一个小于号（&lt;）和一个大于号（&gt;）之间的文本组成，例如&lt;tag&gt;。起始标签（start tag）表示一个特定区域的开始，例如&lt;start&gt;；结束标签（end tag）定义了一个区域的结束，除了在小于号之后紧跟着一个斜线（/）外，和起始标签基本一样，例如&lt;/end&gt;。SGML还定义了标签的特性（attribute），它们是定义在小于号和大于号之间的值，例如&lt;img src="picture.jpg"&gt;中的src特性。如果你觉得它看起来很熟悉的话，应该知道，基于SGML的语言的最著名实现就是原始的HTML。<br />
<br />
SGML常用来定义针对HTML的文档类型定义（DTD），同时它也常用于编写XML的DTD。SGML的问题就在于，它允许出现一些奇怪的语法，这让创建HTML的解析器成为一个大难题：<br />
<br />
1&nbsp;&nbsp;某些起始标签不允许出现结束标签，例如HTML中&lt;img&gt;标签。包含了结束标签就会出现错误。<br />
<br />
2&nbsp;&nbsp;某些起始标签可以选择性出现结束标签或者隐含了结束标签，例如HTML中&lt;p&gt;标签，当出现另一个&lt;p&gt;标签或者某些其他标签时，便假设在这之前有一个结束标签。<br />
<br />
3&nbsp;&nbsp;某些起始标签要求必须出现结束标签，例如HTML中&lt;script&gt;标签。<br />
<br />
4&nbsp;&nbsp;标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的，例如，&lt;b&gt;This is a &lt;i&gt; sample &lt;/b&gt; string&lt;/i&gt;是正确的。<br />
<br />
5&nbsp;&nbsp;某些特性要求必须包含值，例如&lt;img src="picture.jpg"&gt;中的src特性。<br />
<br />
6&nbsp;&nbsp;某些特性不要求一定有值，例如&lt;td nowrap&gt;中的nowrap特性。<br />
<br />
7&nbsp;&nbsp;定义特性的两边有没有加上双引号都是可以的，所以&lt;img src="picture.jpg"&gt;和&lt;img src=picture.jpg&gt;都是允许的。<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点，XML逐渐步入我们的视野。<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中，采用了如下的语法：<br />
<br />
8&nbsp;&nbsp;任何的起始标签都必须有一个结束标签。<br />
<br />
9&nbsp;&nbsp;可以采用另一种简化语法，可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线（/），例如&lt;tag /&gt;。XML解析器会将其翻译成&lt;tag&gt;&lt;/tag&gt;。<br />
<br />
10&nbsp;&nbsp;标签必须按合适的顺序进行嵌套，所以结束标签必须按镜像顺序匹配起始标签，例如&lt;b&gt;this is a &lt;i&gt;sample&lt;/i&gt; string&lt;/b&gt;。这好比是将起始和结束标签看作是数学中的左右括号：在没有关闭所有的内部括号之前，是不能关闭外面的括号的。<br />
<br />
11&nbsp;&nbsp;所有的特性都必须有值。<br />
<br />
12&nbsp;&nbsp;所有的特性都必须在值的周围加上双引号。<br />
<br />
这些规则使得开发一个XML解析器要简便得多，而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言，包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO，而同时也将HTML改进为XHTML。<br />
<br />
如果需要关于SGML和XML具体技术上的对比，请查看W3C的注解，位于：<a href="http://www.w3./" target="_blank">http://www.w3.</a> org/TR/NOTE-sgml-xml.html<br />
<br />
如今，XML已经是世界上发展最快的技术之一。它的主要目的是使用文本以结构化的方式来表示数据。在某些方面，XML文件也类似于数据库，提供数据的结构化视图。这里是一个XML文件的例子：<br />
<br />
<br />
每个XML文档都由XML序言开始，在前面的代码中的第一行便是XML序言，&lt;?xml version="1.0"?&gt;。这一行代码会告诉解析器和浏览器，这个文件应该按照前面讨论过的XML规则进行解析。第二行代码，&lt;books&gt;，则是文档元素（document element），它是文件中最外面的标签（我们认为元素（element）是起始标签和结束标签之间的内容）。所有其他的标签必须包含在这个标签之内来组成一个有效的XML文件。XML文件的第二行并不一定要包含文档元素；如果有注释或者其他内容，文档元素可以迟些出现。<br />
<br />
范例文件中的第三行代码是注释，你会发现它与HTML中使用的注释风格是一样的。这是XML从SGML中继承的语法元素之一。<br />
<br />
页面再往下的一些地方，可以发现&lt;desc&gt;标签里有一些特殊的语法。&lt;![CDATA[ ]]&gt;代码用于表示无需进行解析的文本，允许诸如大于号和小于号之类的特殊字符包含在文本中，而无需担心破坏XML的语法。文本必须出现在&lt;![CDATA[和]]&gt;之间才能合适地避免被解析。这样的文本称为Character Data Section，简称CData Section。<br />
<br />
下面的一行就是在第二本书的定义之前的：<br />
<br />
&lt;?page render multiple authors ?&gt;<br />
<br />
虽然它看上去很像XML序言，但实际上是一种称为处理指令（processing instruction）的不同类型的语法。处理指令（以下简称PI）的目的是为了给处理页面的程序（例如XML解析器）提供额外的信息。PI通常情况下是没有固定格式的，唯一的要求是紧随第一个问号必须至少有一个字母。在此之后，PI可以包含除了小于号和大于号之外的任何字符串序列。<br />
<br />
最常见的PI是用来指定XML文件的样式表：<br />
<br />
<br />
<br />
这个PI一般会直接放在XML序言之后，通常由Web浏览器使用，来将XML数据以特殊的样式显示出来。<br />
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/198690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-06 14:09 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml 的含义</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198691.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Tue, 06 May 2008 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198691.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/198691.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/198691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/198691.html</trackback:ping><description><![CDATA[█<strong>XML是e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage的缩写</strong>。扩展标记语言XML是一种简单的数据存储语言，使用一系列简单的标记描述数据，而这些标记可以用方便的方式建立，虽然XML占用的空间比二进制数据要占用更多的空间，但XML极其简单易于掌握和使用。 <br />
<br />
XML与Access,Oracle和SQL Server等数据库不同，数据库提供了更强有力的数据存储和分析能力，例如：数据索引、排序、查找、相关一致性等，XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是：他极其简单。这是一个看上去有点琐细的优点，但正是这点使XML与众不同。 <br />
<br />
XML的简单使其易于在任何应用程序中读写数据，这使XML很快成为数据交换的唯一公共语言，虽然不同的应用软件也支持其它的数据交换格式，但不久之后他们都将支持XML，那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合，然后可以很容易加载XML数据到程序中并分析他，并以XML格式输出结果。<br />
<br />
XML的前身是<a href="http://baike.baidu.com/view/160656.htm" target="_blank">SGML</a>（The Standard Generalized Markup Language），是自IBM从60年代就开始发展的<a href="http://baike.baidu.com/view/609279.htm" target="_blank">GML</a>（Generalized Markup Language） <br />
<br />
同<a href="http://baike.baidu.com/view/692.htm" target="_blank">HTML</a>一样， XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集，它是描述网络上的数据内容和结构的标准。尽管如此，XML不象HTML，HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ，XML则对数据赋予上下文相关功能，它继承了SGML的大部分功能，却使用了不太复杂的技术。. <br />
<br />
为了使得SGML显得用户友好，XML重新定义了SGML的一些内部值和参数，去掉了大量的很少用到的功能，这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能，这样就使得网站设计者可以定义自己的文档类型，XML同时也推出一种新型文档类型，使得开发者也可以不必定义文档类型。 <br />
<br />
因为XML是W3C制定的，XML的标准化工作由W3C的XML工作组负责，该小组成员由来自各个地方和行业的专家组成，他们通过email交流对XML标准的意见，并提出自己的看法 (<a href="http://www.w3.org/TR/WD-xml" target="_blank">www.w3.org/TR/WD-xml</a>)。因为XML 是个公共格式， (它不专属于任何一家公司)，你不必担心XML技术会成为少数公司的盈利工具，XML不是一个依附于特定浏览器的语言<br />
<br />
XML（可扩展标记语言）是从称为SGML（标准通用标记语言）的更加古老的语言派生出来的。SGML的主要目的是定义使用标签来表示数据的标记语言的语法。<br />
<br />
标签由包围在一个小于号（&lt;）和一个大于号（&gt;）之间的文本组成，例如&lt;tag&gt;。起始标签（start tag）表示一个特定区域的开始，例如&lt;start&gt;；结束标签（end tag）定义了一个区域的结束，除了在小于号之后紧跟着一个斜线（/）外，和起始标签基本一样，例如&lt;/end&gt;。SGML还定义了标签的特性（attribute），它们是定义在小于号和大于号之间的值，例如&lt;img src="picture.jpg"&gt;中的src特性。如果你觉得它看起来很熟悉的话，应该知道，基于SGML的语言的最著名实现就是原始的HTML。<br />
<br />
SGML常用来定义针对HTML的文档类型定义（DTD），同时它也常用于编写XML的DTD。SGML的问题就在于，它允许出现一些奇怪的语法，这让创建HTML的解析器成为一个大难题：<br />
<br />
1&nbsp;&nbsp;某些起始标签不允许出现结束标签，例如HTML中&lt;img&gt;标签。包含了结束标签就会出现错误。<br />
<br />
2&nbsp;&nbsp;某些起始标签可以选择性出现结束标签或者隐含了结束标签，例如HTML中&lt;p&gt;标签，当出现另一个&lt;p&gt;标签或者某些其他标签时，便假设在这之前有一个结束标签。<br />
<br />
3&nbsp;&nbsp;某些起始标签要求必须出现结束标签，例如HTML中&lt;script&gt;标签。<br />
<br />
4&nbsp;&nbsp;标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的，例如，&lt;b&gt;This is a &lt;i&gt; sample &lt;/b&gt; string&lt;/i&gt;是正确的。<br />
<br />
5&nbsp;&nbsp;某些特性要求必须包含值，例如&lt;img src="picture.jpg"&gt;中的src特性。<br />
<br />
6&nbsp;&nbsp;某些特性不要求一定有值，例如&lt;td nowrap&gt;中的nowrap特性。<br />
<br />
7&nbsp;&nbsp;定义特性的两边有没有加上双引号都是可以的，所以&lt;img src="picture.jpg"&gt;和&lt;img src=picture.jpg&gt;都是允许的。<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点，XML逐渐步入我们的视野。<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中，采用了如下的语法：<br />
<br />
8&nbsp;&nbsp;任何的起始标签都必须有一个结束标签。<br />
<br />
9&nbsp;&nbsp;可以采用另一种简化语法，可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线（/），例如&lt;tag /&gt;。XML解析器会将其翻译成&lt;tag&gt;&lt;/tag&gt;。<br />
<br />
10&nbsp;&nbsp;标签必须按合适的顺序进行嵌套，所以结束标签必须按镜像顺序匹配起始标签，例如&lt;b&gt;this is a &lt;i&gt;sample&lt;/i&gt; string&lt;/b&gt;。这好比是将起始和结束标签看作是数学中的左右括号：在没有关闭所有的内部括号之前，是不能关闭外面的括号的。<br />
<br />
11&nbsp;&nbsp;所有的特性都必须有值。<br />
<br />
12&nbsp;&nbsp;所有的特性都必须在值的周围加上双引号。<br />
<br />
这些规则使得开发一个XML解析器要简便得多，而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言，包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO，而同时也将HTML改进为XHTML。<br />
<br />
如果需要关于SGML和XML具体技术上的对比，请查看W3C的注解，位于：<a href="http://www.w3./" target="_blank">http://www.w3.</a> org/TR/NOTE-sgml-xml.html<br />
<br />
如今，XML已经是世界上发展最快的技术之一。它的主要目的是使用文本以结构化的方式来表示数据。在某些方面，XML文件也类似于数据库，提供数据的结构化视图。这里是一个XML文件的例子：<br />
<br />
<br />
每个XML文档都由XML序言开始，在前面的代码中的第一行便是XML序言，&lt;?xml version="1.0"?&gt;。这一行代码会告诉解析器和浏览器，这个文件应该按照前面讨论过的XML规则进行解析。第二行代码，&lt;books&gt;，则是文档元素（document element），它是文件中最外面的标签（我们认为元素（element）是起始标签和结束标签之间的内容）。所有其他的标签必须包含在这个标签之内来组成一个有效的XML文件。XML文件的第二行并不一定要包含文档元素；如果有注释或者其他内容，文档元素可以迟些出现。<br />
<br />
范例文件中的第三行代码是注释，你会发现它与HTML中使用的注释风格是一样的。这是XML从SGML中继承的语法元素之一。<br />
<br />
页面再往下的一些地方，可以发现&lt;desc&gt;标签里有一些特殊的语法。&lt;![CDATA[ ]]&gt;代码用于表示无需进行解析的文本，允许诸如大于号和小于号之类的特殊字符包含在文本中，而无需担心破坏XML的语法。文本必须出现在&lt;![CDATA[和]]&gt;之间才能合适地避免被解析。这样的文本称为Character Data Section，简称CData Section。<br />
<br />
下面的一行就是在第二本书的定义之前的：<br />
<br />
&lt;?page render multiple authors ?&gt;<br />
<br />
虽然它看上去很像XML序言，但实际上是一种称为处理指令（processing instruction）的不同类型的语法。处理指令（以下简称PI）的目的是为了给处理页面的程序（例如XML解析器）提供额外的信息。PI通常情况下是没有固定格式的，唯一的要求是紧随第一个问号必须至少有一个字母。在此之后，PI可以包含除了小于号和大于号之外的任何字符串序列。<br />
<br />
最常见的PI是用来指定XML文件的样式表：<br />
<br />
<br />
<br />
这个PI一般会直接放在XML序言之后，通常由Web浏览器使用，来将XML数据以特殊的样式显示出来。<br />
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/198691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-06 14:09 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/06/198691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>纯JAVA科学计算器！</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/04/21/194605.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Mon, 21 Apr 2008 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/04/21/194605.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/194605.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/04/21/194605.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/194605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/194605.html</trackback:ping><description><![CDATA[//frame版程序源代码如下，疏漏之处，望批评指正。 <br />
//数字分组没有编写，科学型计算器没有编写，其他已经完善。 <br />
import java.awt.*; <br />
import java.lang.*; <br />
import javax.swing.*; <br />
import javax.swing.event.*; <br />
import java.awt.event.*; <br />
import java.text.DecimalFormat; <br />
public class Calculator <br />
implements ActionListener { //导入动作监听接口 <br />
//设计面板中的单位 <br />
JFrame frame; <br />
JTextField textAnswer; <br />
JPanel panel, panel1, panel2, panel3; <br />
JMenuBar mainMenu; <br />
JTextField textMemory; <br />
JLabel labelMemSpace; //labelMemSpace单纯做摆设，控制面板的形状 <br />
JButton buttonBk, buttonCe, buttonC; <br />
JButton button[]; <br />
JButton buttonMC, buttonMR, buttonMS, buttonMAdd; <br />
JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, <br />
buttonDiv, buttonMod; <br />
JButton buttonSqrt, buttonDao, buttonEqual; <br />
JMenu editMenu, viewMenu, helpMenu; <br />
JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal; <br />
DecimalFormat df; //设置数据输出精度 <br />
boolean clickable; //控制当前能否按键 <br />
double memoryd; //使用内存中存储的数字 <br />
int memoryi; <br />
double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd) <br />
short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 <br />
String copy; //做复制用 <br />
JTextArea help; //帮助 <br />
JScrollPane scrollHelp; <br />
//构造函数 <br />
public Calculator() { <br />
clickable = true; <br />
answerd = 0; <br />
frame = new JFrame("计算器"); <br />
df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值) <br />
textAnswer = new JTextField(15); <br />
textAnswer.setText(""); <br />
textAnswer.setEditable(false); <br />
textAnswer.setBackground(new Color(255, 255, 255)); <br />
panel = new JPanel(); <br />
frame.getContentPane().add(panel); <br />
panel1 = new JPanel(); <br />
panel2 = new JPanel(); <br />
panel.setLayout(new BorderLayout()); <br />
//设计整个面板 <br />
mainMenu = new JMenuBar(); <br />
editMenu = new JMenu("编辑(E)"); <br />
viewMenu = new JMenu("查看(V)"); <br />
helpMenu = new JMenu("帮助(H)"); <br />
copyItem = new JMenuItem(" 复制(C) Ctrl+C"); <br />
copyItem.addActionListener(this); <br />
pasteItem = new JMenuItem(" 粘贴(V) Ctrl+V"); <br />
pasteItem.addActionListener(this); <br />
editMenu.add(copyItem); <br />
editMenu.add(pasteItem); <br />
tItem = new JMenuItem("●标准型(T)"); <br />
tItem.addActionListener(this); <br />
sItem = new JMenuItem(" 科学型(S)"); <br />
sItem.addActionListener(this); <br />
numberGroup = new JMenuItem(" 数字分组(I)"); <br />
numberGroup.addActionListener(this); <br />
viewMenu.add(tItem); <br />
viewMenu.add(sItem); <br />
viewMenu.add(numberGroup); <br />
topHelp = new JMenuItem(" 帮助主题(H)"); <br />
topHelp.addActionListener(this); <br />
help = new JTextArea(5, 20); <br />
scrollHelp = new JScrollPane(help); <br />
help.setEditable(false); <br />
help.append("执行简单计算\n"); <br />
help.append("1. 键入计算的第一个数字。\n"); <br />
help.append("2. 单击&#8220;+&#8221;执行加、&#8220;-&#8221;执行减、&#8220;*&#8221;执行乘或&#8220;/&#8221;执行除。\n"); <br />
help.append("3. 键入计算的下一个数字。\n"); <br />
help.append("4. 输入所有剩余的运算符和数字。\n"); <br />
help.append("5. 单击&#8220;=&#8221;。\n"); <br />
aboutCal = new JMenuItem(" 关于计算器(A)"); <br />
aboutCal.addActionListener(this); <br />
helpMenu.add(topHelp); <br />
helpMenu.add(aboutCal); <br />
mainMenu.add(editMenu); <br />
mainMenu.add(viewMenu); <br />
mainMenu.add(helpMenu); <br />
panel.add(mainMenu, BorderLayout.NORTH); <br />
panel.add(textAnswer, BorderLayout.CENTER); <br />
panel.add(panel1, BorderLayout.SOUTH); <br />
panel1.setLayout(new BorderLayout()); <br />
textMemory = new JTextField(3); <br />
textMemory.setEditable(false); <br />
textMemory.setBackground(new Color(217, 217, 217)); <br />
labelMemSpace = new JLabel(" "); <br />
buttonBk = new JButton("Backspace"); <br />
buttonBk.setForeground(new Color(255, 0, 0)); <br />
buttonCe = new JButton("CE"); <br />
buttonCe.setForeground(new Color(255, 0, 0)); <br />
buttonC = new JButton("C"); <br />
buttonC.setForeground(new Color(255, 0, 0)); <br />
buttonBk.addActionListener(this); <br />
buttonCe.addActionListener(this); <br />
buttonC.addActionListener(this); <br />
panel1.add(panel2, BorderLayout.NORTH); <br />
panel2.setLayout(new FlowLayout(FlowLayout.RIGHT)); <br />
panel2.add(textMemory); <br />
panel2.add(labelMemSpace); <br />
panel2.add(buttonBk); <br />
panel2.add(buttonCe); <br />
panel2.add(buttonC); <br />
panel3 = new JPanel(); <br />
panel1.add(panel3, BorderLayout.CENTER); <br />
button = new JButton[10]; <br />
for (int i = 0; i &lt; button.length; i++) { <br />
button[i] = new JButton(Integer.toString(i)); <br />
button[i].setForeground(new Color(0, 0, 255)); <br />
} <br />
buttonMC = new JButton("MC"); <br />
buttonMC.setForeground(new Color(255, 0, 0)); <br />
buttonMR = new JButton("MR"); <br />
buttonMR.setForeground(new Color(255, 0, 0)); <br />
buttonMS = new JButton("MS"); <br />
buttonMS.setForeground(new Color(255, 0, 0)); <br />
buttonMAdd = new JButton("M+"); <br />
buttonMAdd.setForeground(new Color(255, 0, 0)); <br />
buttonDot = new JButton("."); <br />
buttonDot.setForeground(new Color(0, 0, 255)); <br />
buttonAddAndSub = new JButton("+/-"); <br />
buttonAddAndSub.setForeground(new Color(0, 0, 255)); <br />
buttonAdd = new JButton("+"); <br />
buttonAdd.setForeground(new Color(255, 0, 0)); <br />
buttonSub = new JButton("-"); <br />
buttonSub.setForeground(new Color(255, 0, 0)); <br />
buttonMul = new JButton("*"); <br />
buttonMul.setForeground(new Color(255, 0, 0)); <br />
buttonDiv = new JButton("/"); <br />
buttonDiv.setForeground(new Color(255, 0, 0)); <br />
buttonMod = new JButton("%"); <br />
buttonMod.setForeground(new Color(0, 0, 255)); <br />
buttonSqrt = new JButton("sqrt"); <br />
buttonSqrt.setForeground(new Color(0, 0, 255)); <br />
buttonDao = new JButton("1/x"); <br />
buttonDao.setForeground(new Color(0, 0, 255)); <br />
buttonEqual = new JButton("="); <br />
buttonEqual.setForeground(new Color(255, 0, 0)); <br />
//将所有行为与监听绑定 <br />
panel3.setLayout(new GridLayout(4, 6)); <br />
panel3.add(buttonMC); <br />
buttonMC.addActionListener(this); <br />
panel3.add(button[7]); <br />
button[7].addActionListener(this); <br />
panel3.add(button[8]); <br />
button[8].addActionListener(this); <br />
panel3.add(button[9]); <br />
button[9].addActionListener(this); <br />
panel3.add(buttonDiv); <br />
buttonDiv.addActionListener(this); <br />
panel3.add(buttonSqrt); <br />
buttonSqrt.addActionListener(this); <br />
panel3.add(buttonMR); <br />
buttonMR.addActionListener(this); <br />
panel3.add(button[4]); <br />
button[4].addActionListener(this); <br />
panel3.add(button[5]); <br />
button[5].addActionListener(this); <br />
panel3.add(button[6]); <br />
button[6].addActionListener(this); <br />
panel3.add(buttonMul); <br />
buttonMul.addActionListener(this); <br />
panel3.add(buttonMod); <br />
buttonMod.addActionListener(this); <br />
panel3.add(buttonMS); <br />
buttonMS.addActionListener(this); <br />
panel3.add(button[1]); <br />
button[1].addActionListener(this); <br />
panel3.add(button[2]); <br />
button[2].addActionListener(this); <br />
panel3.add(button[3]); <br />
button[3].addActionListener(this); <br />
panel3.add(buttonSub); <br />
buttonSub.addActionListener(this); <br />
panel3.add(buttonDao); <br />
buttonDao.addActionListener(this); <br />
panel3.add(buttonMAdd); <br />
buttonMAdd.addActionListener(this); <br />
panel3.add(button[0]); <br />
button[0].addActionListener(this); <br />
panel3.add(buttonAddAndSub); <br />
buttonAddAndSub.addActionListener(this); <br />
panel3.add(buttonDot); <br />
buttonDot.addActionListener(this); <br />
panel3.add(buttonAdd); <br />
buttonAdd.addActionListener(this); <br />
panel3.add(buttonEqual); <br />
buttonEqual.addActionListener(this); <br />
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); <br />
frame.pack(); <br />
frame.show(); <br />
} <br />
//设置各个按钮行为 <br />
public void actionPerformed(ActionEvent event) { <br />
boolean sign = false; //判断是否是double型数参与运算，是为true，不是为false <br />
Object temp = event.getSource(); <br />
try { <br />
//如果按下数据按钮，将按下的按钮代表的数据插入的当前文本框字符串之后 <br />
for (int i = 0; i &lt;= 9; i++) <br />
if (temp == button[i] &amp;&amp; clickable == true) <br />
textAnswer.setText(textAnswer.getText() + Integer.toString(i)); <br />
//按下'.'按钮时，判断当前文本框内字符串中含不含'.'，如果已含，则不允许再插入'.' <br />
if (temp == buttonDot &amp;&amp; clickable == true) { <br />
boolean isDot = false; <br />
if (textAnswer.getText().length() == 0) <br />
isDot = true; <br />
for (int i = 0; i &lt; textAnswer.getText().length(); i++) <br />
if ('.' == textAnswer.getText().charAt(i)) { <br />
isDot = true; <br />
break; <br />
} <br />
if (isDot == false) <br />
textAnswer.setText(textAnswer.getText() + "."); <br />
} <br />
if ( (temp == buttonAdd || temp == buttonSub || temp == buttonMul || <br />
temp == buttonDiv) &amp;&amp; clickable == true) { <br />
//'+'操作 <br />
if (temp == buttonAdd) { <br />
switch (prekey) { <br />
case 0: <br />
answerd += Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 1: <br />
answerd -= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 2: <br />
answerd *= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 3: <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else <br />
answerd /= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
default: <br />
answerd = Double.parseDouble(textAnswer.getText()); <br />
} <br />
textAnswer.setText(""); <br />
prekey = key = 0; <br />
} <br />
//'-'操作 <br />
if (temp == buttonSub) { <br />
switch (prekey) { <br />
case 0: <br />
answerd += Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 1: <br />
answerd -= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 2: <br />
answerd *= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 3: <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else <br />
answerd /= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
default: <br />
answerd = Double.parseDouble(textAnswer.getText()); <br />
} <br />
textAnswer.setText(""); <br />
prekey = key = 1; <br />
} <br />
//'*'操作 <br />
if (temp == buttonMul) { <br />
switch (prekey) { <br />
case 0: <br />
answerd += Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 1: <br />
answerd -= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 2: <br />
answerd *= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 3: <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else <br />
answerd /= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
default: <br />
answerd = Double.parseDouble(textAnswer.getText()); <br />
} <br />
textAnswer.setText(""); <br />
prekey = key = 2; <br />
} <br />
//'/'操作 <br />
if (temp == buttonDiv) { <br />
switch (prekey) { <br />
case 0: <br />
answerd += Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 1: <br />
answerd -= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 2: <br />
answerd *= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
case 3: <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else <br />
answerd /= Double.parseDouble(textAnswer.getText()); <br />
break; <br />
default: <br />
answerd = Double.parseDouble(textAnswer.getText()); <br />
} <br />
textAnswer.setText(""); <br />
prekey = key = 3; <br />
} <br />
} <br />
//'='操作 <br />
if (temp == buttonEqual &amp;&amp; clickable == true) { <br />
//如果连续按'=',则进行连续运算 <br />
if (prekey == 5) { <br />
if (key == 0) { <br />
answerd += vard; <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 1) { <br />
answerd -= vard; <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 2) { <br />
answerd *= vard; <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 3) { <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else { <br />
answerd /= vard; <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
} <br />
} <br />
else { <br />
vard = Double.parseDouble(textAnswer.getText()); <br />
if (key == 0) { <br />
prekey = -1; <br />
answerd += Double.parseDouble(textAnswer.getText()); <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 1) { <br />
prekey = -1; <br />
answerd -= Double.parseDouble(textAnswer.getText()); <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 2) { <br />
prekey = -1; <br />
answerd *= Double.parseDouble(textAnswer.getText()); <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
if (key == 3) { <br />
prekey = -1; <br />
if (Double.parseDouble(textAnswer.getText()) == 0) { <br />
textAnswer.setText("除数不能为零"); <br />
clickable = false; <br />
} <br />
else { <br />
answerd /= Double.parseDouble(textAnswer.getText()); <br />
textAnswer.setText(df.format(answerd)); <br />
} <br />
} <br />
} <br />
prekey = 5; <br />
} <br />
//'%'操作，对第二个操作数除以100 <br />
if (temp == buttonMod &amp;&amp; clickable == true) { <br />
if (answerd == 0) { <br />
String s = textAnswer.getText(); <br />
textAnswer.setText(s); <br />
} <br />
else { <br />
boolean isDot = false; <br />
for (int i = 0; i &lt; textAnswer.getText().length(); i++) <br />
if ('.' == textAnswer.getText().charAt(i)) { <br />
isDot = true; <br />
break; <br />
} <br />
//如果是double数，除100 <br />
if (isDot == true) { <br />
double dtemp = Double.parseDouble(textAnswer.getText()); <br />
dtemp = dtemp / 100.0; <br />
textAnswer.setText(Double.toString(dtemp)); <br />
} <br />
else { <br />
//如果是int数但能被100整除，则去掉末尾两个零 <br />
if (Integer.parseInt(textAnswer.getText()) % 100 == 0) { <br />
int itemp = Integer.parseInt(textAnswer.getText()); <br />
itemp /= 100; <br />
textAnswer.setText(Integer.toString(itemp)); <br />
} <br />
//如果是int数，但不能被100整除，则按double数处理 <br />
else { <br />
double dtemp = Double.parseDouble(textAnswer.getText()); <br />
dtemp = dtemp / 100.0; <br />
textAnswer.setText(Double.toString(dtemp)); <br />
} <br />
} <br />
} <br />
} <br />
//开根号运算 <br />
if (temp == buttonSqrt &amp;&amp; clickable == true) { <br />
String s = textAnswer.getText(); <br />
if (s.charAt(0) == '-') { <br />
textAnswer.setText("负数不能开根号"); <br />
clickable = false; <br />
} <br />
else <br />
textAnswer.setText(Double.toString(java.lang.Math.sqrt(Double. <br />
parseDouble(textAnswer.getText())))); <br />
} <br />
//倒数运算 <br />
if (temp == buttonDao &amp;&amp; clickable == true) { <br />
if (textAnswer.getText().charAt(0) == '0' &amp;&amp; <br />
textAnswer.getText().length() == 1) { <br />
textAnswer.setText("零不能求倒数"); <br />
clickable = false; <br />
} <br />
else { <br />
boolean isDec = true; <br />
int i, j, k; <br />
String s = Double.toString(1 / Double.parseDouble(textAnswer.getText())); <br />
for (i = 0; i &lt; s.length(); i++) <br />
if (s.charAt(i) == '.') <br />
break; <br />
for (j = i + 1; j &lt; s.length(); j++) <br />
if (s.charAt(j) != '0') { <br />
isDec = false; <br />
break; <br />
} <br />
if (isDec == true) { <br />
String stemp = ""; <br />
for (k = 0; k &lt; i; k++) <br />
stemp += s.charAt(k); <br />
textAnswer.setText(stemp); <br />
} <br />
else <br />
textAnswer.setText(s); <br />
} <br />
} <br />
//按下'+/-'按钮时处理 <br />
if (temp == buttonAddAndSub &amp;&amp; clickable == true) { <br />
boolean isNumber = true; <br />
String s = textAnswer.getText(); <br />
for (int i = 0; i &lt; s.length(); i++) <br />
if (! (s.charAt(i) &gt;= '0' &amp;&amp; s.charAt(i) &lt;= '9' || s.charAt(i) == '.' || <br />
s.charAt(i) == '-')) { <br />
isNumber = false; <br />
break; <br />
} <br />
if (isNumber == true) { <br />
//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉 <br />
if (s.charAt(0) == '-') { <br />
textAnswer.setText(""); <br />
for (int i = 1; i &lt; s.length(); i++) { <br />
char a = s.charAt(i); <br />
textAnswer.setText(textAnswer.getText() + a); <br />
} <br />
} <br />
//如果当前字符串第一个字符不是符号，则添加一个符号在首字母处 <br />
else <br />
textAnswer.setText('-' + s); <br />
} <br />
} <br />
//计算器有关内存操作 <br />
//'MC'的操作，将内存清0 <br />
if (temp == buttonMC &amp;&amp; clickable == true) { <br />
memoryd = memoryi = 0; <br />
textMemory.setText(""); <br />
} <br />
//'MS'的操作，将当前文本框内容保存入内存，显示'M' <br />
if (temp == buttonMS &amp;&amp; clickable == true) { <br />
boolean isDot = false; <br />
textMemory.setText(" M"); <br />
for (int i = 0; i &lt; textAnswer.getText().length(); i++) <br />
if ('.' == textAnswer.getText().charAt(i)) { <br />
isDot = true; <br />
break; <br />
} <br />
//如果是double,则存入memoryd(double存储器) <br />
if (isDot == true) { <br />
memoryd = Double.parseDouble(textAnswer.getText()); <br />
memoryi = 0; //保证存储器中存放最新的值 <br />
} <br />
//如果是int,则存入memoryi(int存储器) <br />
else { <br />
memoryi = Integer.parseInt(textAnswer.getText()); <br />
memoryd = 0; //保证存储器中存放最新的值 <br />
} <br />
} <br />
//'MR'的操作，将存储器中的信息输出 <br />
if (temp == buttonMR &amp;&amp; clickable == true) { <br />
if (memoryd != 0) <br />
textAnswer.setText(Double.toString(memoryd)); <br />
if (memoryi != 0) <br />
textAnswer.setText(Integer.toString(memoryi)); <br />
} <br />
//'M+'的功能，将当前文本框里的数据和存储器中数据相加后，再存入存储器 <br />
if (temp == buttonMAdd &amp;&amp; clickable == true) { <br />
boolean isDot = false; <br />
for (int i = 0; i &lt; textAnswer.getText().length(); i++) <br />
if ('.' == textAnswer.getText().charAt(i)) { <br />
isDot = true; <br />
break; <br />
} <br />
if (memoryi != 0) { //存储中是一个int型数 <br />
if (isDot == false) //被加数是一个int型数 <br />
memoryi += Integer.parseInt(textAnswer.getText()); <br />
else { //被加数是一个double型数，则将int存储器中数传入double存储器与当前数相加，int存储器清零 <br />
memoryd = memoryi + Double.parseDouble(textAnswer.getText()); <br />
memoryi = 0; <br />
} <br />
} <br />
else <br />
memoryd += Double.parseDouble(textAnswer.getText()); <br />
} <br />
//按下'Backspace'键，利用循环将当前字符串中的最后一个字母删除 <br />
if (temp == buttonBk &amp;&amp; clickable == true) { <br />
String s = textAnswer.getText(); <br />
textAnswer.setText(""); <br />
for (int i = 0; i &lt; s.length() - 1; i++) { <br />
char a = s.charAt(i); <br />
textAnswer.setText(textAnswer.getText() + a); <br />
} <br />
} <br />
//按下'CE'按钮，将当前文本框内数据清除 <br />
if (temp == buttonCe) { <br />
textAnswer.setText(""); <br />
clickable = true; <br />
} <br />
//按下'C'按钮，文本框内数据清除，同时var,answer清0 <br />
if (temp == buttonC) { <br />
vard = answerd = 0; <br />
textAnswer.setText(""); <br />
clickable = true; <br />
} <br />
//按下'复制'菜单栏 <br />
if (temp == copyItem) { <br />
copy = textAnswer.getText(); <br />
} <br />
//按下'粘贴'菜单栏 <br />
if (temp == pasteItem) { <br />
textAnswer.setText(copy); <br />
} <br />
if (temp == sItem) { <br />
JOptionPane.showMessageDialog(panel, "当前是标准型计算器，\n科学型计算器有待更新。"); <br />
} <br />
//按下'帮助主题'菜单栏 <br />
if (temp == topHelp) { <br />
JOptionPane.showMessageDialog(panel, scrollHelp); <br />
} <br />
//按下'数字分组'菜单栏 <br />
if (temp == numberGroup) { <br />
if (numberGroup.getText().compareTo(" 数字分组(I)") == 0) <br />
numberGroup.setText("&#8730;数字分组(I)"); <br />
else <br />
numberGroup.setText(" 数字分组(I)"); <br />
} <br />
//按下'关于'菜单栏 <br />
if (temp == aboutCal) { <br />
JOptionPane.showMessageDialog(panel, "计算器1.00版\n开发者：矿矿"); <br />
} <br />
} <br />
//输入中如果有操作非法，比如按下两次'+'，捕获异常 <br />
catch (Exception e) { <br />
textAnswer.setText("操作非法"); <br />
clickable = false; <br />
} <br />
} <br />
//主函数 <br />
public static void main(String args[]) { <br />
new Calculator(); <br />
} <br />
} <br />
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/194605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-04-21 20:44 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/04/21/194605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>