JAVA记事本实验分析方案含源代码运行结果Word下载.docx
《JAVA记事本实验分析方案含源代码运行结果Word下载.docx》由会员分享,可在线阅读,更多相关《JAVA记事本实验分析方案含源代码运行结果Word下载.docx(66页珍藏版)》请在冰点文库上搜索。
importjava.io.File。
import.URLClassLoader。
import.URL。
importjava.lang.InterruptedException。
importjava.io.FileInputStream。
importjava.io.FileOutputStream。
importjava.io.PrintStream。
importjava.util.Scanner。
importjava.util.Date。
importjava.util.Iterator。
importjava.util.List。
importjava.text.SimpleDateFormat。
importjavax.swing.JButton。
importjavax.swing.JCheckBox。
importjavax.swing.JCheckBoxMenuItem。
importjavax.swing.JFrame。
importjavax.swing.JLabel。
importjavax.swing.JPanel。
importjavax.swing.JTextArea。
importjavax.swing.JMenu。
importjavax.swing.JMenuBar。
importjavax.swing.ImageIcon。
importjavax.swing.JScrollPane。
importjavax.swing.JToolBar。
importjavax.swing.JMenuItem。
importjavax.swing.KeyStroke。
importjavax.swing.JPopupMenu。
importjavax.swing.JFileChooser。
importjavax.swing.JOptionPane。
importjavax.swing.JColorChooser。
importjavax.swing.JDialog。
importjavax.swing.JTextField。
importjavax.swing.BorderFactory。
importjavax.swing.JList。
importjavax.swing.JComboBox。
importjavax.swing.UIManager。
importjavax.swing.JRadioButton。
importjavax.swing.JToggleButton。
importjavax.swing.ButtonGroup。
importjavax.swing.TransferHandler。
importjavax.swing.border.Border。
importjavax.swing.border.TitledBorder。
importjavax.swing.text.Document。
importjavax.swing.undo.UndoManager。
importjavax.swing.undo.UndoableEdit。
importjavax.swing.event.UndoableEditEvent。
importjavax.swing.event.UndoableEditListener。
importjavax.swing.event.DocumentListener。
importjavax.swing.event.DocumentEvent。
importjavax.swing.JComponent。
importjava.awt.Font。
importjava.awt.Window。
importjava.awt.Event。
importjava.awt.MediaTracker。
importjava.awt.Color。
importjava.awt.event.KeyEvent。
importjava.awt.event.KeyListener。
importjava.awt.BorderLayout。
importjava.awt.FlowLayout。
importjava.awt.GridLayout。
importjava.awt.Container。
importjava.awt.Toolkit。
importjava.awt.Image。
importjava.awt.GraphicsEnvironment。
importjava.awt.datatransfer.*。
importjava.awt.datatransfer.DataFlavor。
importjava.awt.datatransfer.StringSelection。
importjava.awt.datatransfer.Clipboard。
importjava.awt.datatransfer.Transferable。
importjava.awt.event.WindowAdapter。
importjava.awt.event.WindowEvent。
importjava.awt.event.WindowListener。
importjava.awt.event.KeyAdapter。
importjava.awt.event.ActionListener。
importjava.awt.event.MouseListener。
importjava.awt.event.MouseEvent。
importjava.awt.event.MouseAdapter。
importjava.awt.event.ActionEvent。
classMyTransferHandlerextendsTransferHandler
{
JTextAreatext=null。
publicMyTransferHandler(JTextAreatext)
{
this.text=text。
}
publicbooleancanImport(JComponentc,DataFlavor[]flavors)//在拖放操作期间重复调用此方法,判断是否可以输入
{
for(inti=0。
i<
flavors.length。
i++)
{
if(DataFlavor.javaFileListFlavor.equals(flavors[i]))
{
returntrue。
}
}
returnfalse。
}
publicbooleanimportData(JComponentcom,Transferablet)
try
Listlist=(List)t.getTransferData(DataFlavor.javaFileListFlavor)。
//返回一个对象,该对象表示将要被传输的数据
Iteratoriter=list.iterator()。
while(iter.hasNext())
{
Filefile=(File)iter.next()。
text.setText("
"
)。
Scannerscan=newScanner(newFileInputStream(file))。
scan.useDelimiter("
\n"
//将此扫描器的分隔模式设置为换行符
while(scan.hasNext())//如果此扫描器的输入中有另一个标记
{
text.append(scan.next()+"
}
}
catch(Exceptione)
}
}
}
classGotoextendsJDialogimplementsActionListener
JButtonbut1=newJButton("
确定"
JButtonbut2=newJButton("
取消"
JLabellab=newJLabel("
行数(L):
JTextFieldfield=newJTextField()。
//行数框
introw=0。
//记事本行数
intlocation=0。
//当前的位置
intcurrentline=0。
//当前所在的行
intline[]。
publicGoto(JTextAreatext)
setTitle("
转到下列行"
//设置标题
setLayout(null)。
//设置布局管理器null
lab.setBounds(10,10,50,20)。
//设置大小,位置
field.setBounds(70,10,100,20)。
but1.setBounds(10,40,60,20)。
but2.setBounds(110,40,60,20)。
row=text.getLineCount()。
//返回TextArea中的行数
line=newint[row]。
//分配空间
location=text.getCaretPosition()。
//得到当前位置
line[0]=text.getText().indexOf('
\12'
0)。
//'
是换行符,返回换行符字符在此字符串中第一次出现处的索引
for(inti=1。
i<
line.length。
i++)
line[i]=text.getText().indexOf('
line[i-1]+1)。
//从找到的位置加1继续找
for(inti=0。
{
if(location<
=line[i])//找到当前行,退出循环
currentline=i+1。
break。
}
if(currentline==0)//不在文字中,光标在文字的最下面
currentline=row。
field.setText(currentline+"
//在行数框设置当前行数
field.selectAll()。
add(lab)。
add(field)。
add(but1)。
add(but2)。
but1.addActionListener(this)。
but2.addActionListener(this)。
setSize(200,100)。
//设置大小
setResizable(false)。
//窗口不可拖拉变大变小
setLocation(400,400)。
//设置位置
show()。
//显示转到框
publicvoidactionPerformed(ActionEvente)
if(e.getSource()==but1)//确定
Stringstr=field.getText()。
//从行数得到行数的字符串
try
intcnt=Integer.parseInt(str)。
//转换成字符串
if(cnt<
1||cnt>
row)//行数超过范围
JOptionPane.showMessageDialog(null,"
行数超过范围。
"
提示..."
JOptionPane.WARNING_MESSAGE)。
else
if(cnt==1)//行数为1时,鼠标光标设在开头
text.setCaretPosition(0)。
else
currentline=line[cnt-2]+1。
text.setCaretPosition(currentline)。
//lin[cnt-1]是cnt-1行的换行符位置,+1后是第cnt行开头的位置
hide()。
//转到对话框消失
catch(NumberFormatExceptione1)
只能输入数字,不能输入数字以外的字母,符号等。
}
if(e.getSource()==but2)//取消
hide()。
//转到对话框消失
classMyTimeextendsThread//我的时间线程
JLabellab=null。
publicMyTime(JLabellab)
this.lab=lab。
publicvoidrun()//重写run方法
while(true)
this.sleep(1000)。
//每隔1000毫秒,即1秒显示
SimpleDateFormatformat=newSimpleDateFormat("
yyyy年MM月dd日HH时mm分ss秒"
this.lab.setText("
现在时间:
+format.format(newDate()))。
catch(Exceptione)
classsearchimplementsActionListener
JDialogdialog=newJDialog()。
//创建一个寻找对话框
//文本框
JPanelpan=newJPanel()。
查找内容(N):
JCheckBoxbox=newJCheckBox("
区分大小写(C)"
true)。
//是一个可以被选定和取消复选框,初始化为选择
//在这里输入要寻找的字符串
ButtonGroupgroup=newButtonGroup()。
//单选组,将单选按钮加到组,就能实现单选
JRadioButtonup=newJRadioButton("
向上(U)"
//单选按钮
JRadioButtondown=newJRadioButton("
向下(D)"
//单选按钮,初始化为选择
JButtonsearchNext=newJButton("
查找下一个(F)"
JButtoncancel=newJButton("
StringgetText=null。
//从记事本中获得内容
StringgetField=null。
//从查找文本框获得内容
publicsearch(JTextAreatext)
dialog.setTitle("
查找"
//设置对话框标题
searchNext.setEnabled(false)。
//寻找按钮初始化为不弹起
lab.setBounds(10,10,80,20)。
//以下几行为设置组件大小
field.setBounds(100,10,210,20)。
searchNext.setBounds(320,10,120,20)。
box.setBounds(5,80,120,20)。
pan.setBounds(130,40,180,60)。
cancel.setBounds(320,40,120,20)。
dialog.setLayout(null)。
//不设置布局管理器
field.addKeyListener(newKeyAdapter(){//加入键盘监听器
publicvoidkeyReleased(KeyEvente)//当键盘按键松开时
if(field.getText().length()!
=0)//寻找文本框为空时,寻找按钮设置为不弹起
searchNext.setEnabled(true)。
searchNext.setEnabled(false)。
//寻找文本框非空时,寻找按钮设置为弹起
})。
searchNext.addActionListener(this)。
//加入操作事件的侦听器
cancel.addActionListener(this)。
dialog.add(lab)。
//将各组件加入寻找对话框
dialog.add(field)。
dialog.add(searchNext)。
dialog.add(box)。
pan.add(up)。
//将单选按钮加入面板
pan.add(down)。
pan.setBorder(BorderFactory.createTitledBorder("
方向"
))。
//面板加入边界并设置标题
group.add(up)。
//两个单选按钮加到一个按钮组才能实现二选一
group.add(down)。
dialog.add(pan)。
dialog.add(cancel)。
dialog.setResizable(false)。
dialog.setSize(455,150)。
dialog.show()。
//显示对话框
getText=text.getText()。
//getText,getField放在事件监听器中不断监听二个编辑框有无改变,
getField=field.getText()。
//若在构造方法中赋值则在编辑框改变也不会重新查找
inta=0。
//判断是否找到
intposition=text.getCaretPosition()。
//获得鼠标光标位置
if(e.getSource()==searchNext)//寻找按钮触发监听
if(box.isSelected()==false)//不勾选,即不区分大小写
getText=getText.toLowerCase()。
//将两个文本获得的字符串转换成小写字母
getField=getField.toLowerCase()。
if(down.isSelected())//向下查找
if(text.getSelectedText()==null)//还未查找到第一个,记事本中未选中文字
a=getText.indexOf(getField,position)。
//从记事本中找到要寻找的第一个索引
else//已查到一个以上
a=getText.indexOf(getField,position+1-getField.length())。
//从查到的索引的位置加1开始查找下一个,查到的索引位置与鼠标光标位置的差距即为选定字符串的长度
else//向上查找
a=getText.lastIndexOf(getField,position-1)。
//在记事本中指定位置从后向前找到要寻找的第一个索引
a=getText.lastIndexOf(getField,position-1-getField.length())。
//从查到的索引的位置减1开始查找下一个,查到的索引位置与鼠标光标位置的差距即为选定字符串的长度
if(a>
-1)//查到了指定的字符串
{
this.text.select(a,a+getField.length())。
else//查不到,弹出查不到的信息对话框
JOptionPane.showMessageDialog(dialog,"
找不到:
+getField,"
记事本"
JOptionPane.QUESTION_MESSAGE)。
if(e.getSource()==cancel)//取消按钮触发监听
dialog.hide()。
//对话框消失
classreplaceimplementsActionListener,KeyListener