java记事本 仿windows_仿Windows记事本Swing程序

1.[代码][Java]代码

import java.awt.*;

import java.awt.datatransfer.*;

import java.awt.event.*;

import javax.print.*;

import javax.print.attribute.DocAttributeSet;

import javax.print.attribute.HashDocAttributeSet;

import javax.print.attribute.HashPrintRequestAttributeSet;

import javax.print.attribute.PrintRequestAttributeSet;

import javax.print.attribute.standard.MediaSizeName;

import javax.swing.*;

import javax.swing.border.BevelBorder;

import javax.swing.event.UndoableEditEvent;

import javax.swing.event.UndoableEditListener;

import javax.swing.filechooser.*;

import javax.swing.filechooser.FileFilter;

import javax.swing.plaf.FileChooserUI;

import javax.swing.undo.UndoableEdit;

import java.io.*;

public class Notepad extends JFrame {

/**

* @param args

*/

public JTextArea jta=null; //中间的文本区域

private File selectedFile=null;

private JFileChooser chooser=null; //文件选择器

private UndoableEdit edit; //设置还原功能

private boolean canUndo=false;

private JMenuItem jmiUndoItem; //撤销的菜单

private Clipboard clip=null; //粘贴板

private JDialog jdSearchDialog;

public Notepad()

{

super("Notepad Beta");

super.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

chooser=new JFileChooser();

chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

clip=Toolkit.getDefaultToolkit().getSystemClipboard();

jta=new JTextArea();

jta.setWrapStyleWord(true);

jta.setLineWrap(true);

//*****************************右键弹出功能

final JPopupMenu jpMenu=new JPopupMenu();

JMenuItem jpItemUndo=new JMenuItem("撤销(U) ");

JMenuItem jpItemCut=new JMenuItem("剪切(T) ");

JMenuItem jpItemCopy=new JMenuItem("复制(C) ");

JMenuItem jpItemPaste=new JMenuItem("粘贴(P) ");

jpMenu.add(jpItemUndo);

jpMenu.add(new JPopupMenu.Separator());

jpMenu.add(jpItemCut);

jpMenu.add(jpItemCopy);

jpMenu.add(jpItemPaste);

jpMenu.setBorder(new BevelBorder(BevelBorder.RAISED));

jta.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e)

{

if(e.isMetaDown())

{

if(!jpMenu.isVisible())

{

jpMenu.show(e.getComponent(),e.getX(),e.getY());

}

}

else {

jpMenu.setVisible(false);

}

}

});

//*****************************实现撤销功能

jta.getDocument().addUndoableEditListener(new UndoableEditListener() {

@Override

public void undoableEditHappened(UndoableEditEvent e) {

// TODO Auto-generated method stub

edit=e.getEdit();

if(edit!=null)

{

canUndo=edit.canUndo();

}

else

{

canUndo=false;

}

}

});

//**********************************设置相关菜单和事件监听

Container content=getContentPane();

JMenuBar jmb=new JMenuBar();

JMenu jmFile=new JMenu("文件(F)");

jmFile.setMnemonic('f');

JMenu jmEdit=new JMenu("编辑(E)");

jmEdit.setMnemonic('e');

JMenu jmStyle=new JMenu("格式(O)");

jmStyle.setMnemonic('e');

JMenu jmView=new JMenu("查看(V)");

jmView.setMnemonic('v');

JMenu jmHelp=new JMenu("帮助(H)");

jmHelp.setMnemonic('h');

jmb.add(jmFile);

jmb.add(jmEdit);

jmb.add(jmStyle);

jmb.add(jmView);

jmb.add(jmHelp);

setJMenuBar(jmb);

JMenuItem jmiNewItem=new JMenuItem("新建(N) Ctrl+N");

jmiNewItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(!jta.getText().equals(""))

{

int confirm=JOptionPane.showConfirmDialog(Notepad.this, "是否保存(S) Ctrl+S文件?");

if(confirm==JOptionPane.OK_OPTION)

{

if(selectedFile!=null)

{

try {

FileWriter fw=new FileWriter(selectedFile);

fw.write(jta.getText());

fw.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件写入异常");

}

jta.setText("");

}

else

{

jta.setText("");

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showSaveDialog(Notepad.this);

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

FileWriter fw=new FileWriter(selectedFile);

fw.write(jta.getText());

fw.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件写入异常");

}

}

}

}

else if(confirm==JOptionPane.NO_OPTION)

{

jta.setText("");

}

else {}

}

else{}

}

});

JMenuItem jmiOpenItem=new JMenuItem("打开(O) Ctrl+O");

jmiOpenItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(!jta.getText().equals(""))

{

int confirm=JOptionPane.showConfirmDialog(Notepad.this, "是否保存(S) Ctrl+S文件?");

if(confirm==JOptionPane.OK_OPTION)

{

if(selectedFile!=null)

{

try {

FileWriter fw=new FileWriter(selectedFile);

fw.write(jta.getText());

fw.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件写入异常");

}

}

else

{

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showSaveDialog(Notepad.this);

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

FileWriter fw=new FileWriter(selectedFile);

fw.write(jta.getText());

fw.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件写入异常");

}

}

}

}

else if(confirm==JOptionPane.NO_OPTION)

{

jta.setText("");

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showOpenDialog(Notepad.this);

{

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

BufferedReader bf=new BufferedReader(new FileReader(selectedFile));

String tempString="";

int i;

while((i=bf.read())!=-1)

{

tempString+=String.valueOf((char)i);

}

jta.setText(tempString);

bf.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件保存(S) Ctrl+S错误");

}

}

else {}

}

}

else {}

}

else

{

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showOpenDialog(Notepad.this);

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

BufferedReader bf=new BufferedReader(new FileReader(selectedFile));

String tempString="";

int i;

while((i=bf.read())!=-1)

{

tempString+=String.valueOf((char)i);

}

jta.setText(tempString);

bf.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件打开(O) Ctrl+O错误");

}

}

else {}

}

}

});

JMenuItem jmiSaveItem=new JMenuItem("保存(S) Ctrl+S");

jmiSaveItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(jta.getText().equals("")) {}

else

{

if(selectedFile==null)

{

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showOpenDialog(Notepad.this);

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

BufferedReader bf=new BufferedReader(new FileReader(selectedFile));

String tempString="";

int i;

while((i=bf.read())!=-1)

{

tempString+=String.valueOf((char)i);

}

jta.setText(tempString);

bf.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件打开(O) Ctrl+O错误");

}

}

else {}

}

else

{

try {

FileWriter fw=new FileWriter(selectedFile);

fw.write(jta.getText());

fw.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件写入异常");

}

}

}

}});

JMenuItem jmiSaveTo = new JMenuItem("另存为(A)...");

jmiSaveTo.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

JFileChooser jChooser=new JFileChooser();

int selection=jChooser.showOpenDialog(Notepad.this);

if(selection==JFileChooser.APPROVE_OPTION)

{

selectedFile=jChooser.getSelectedFile();

try {

BufferedWriter bf=new BufferedWriter(new FileWriter(selectedFile));

bf.write(jta.getText());

bf.close();

} catch (Exception e) {

// TODO: handle exception

JOptionPane.showConfirmDialog(Notepad.this, "文件打开(O) Ctrl+O错误");

}

}

else {}

}

});

JMenuItem jmiExitItem=new JMenuItem("退出(X)");

jmiExitItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(jta.getText().equals(""))

System.exit(0);

else

{

int t=JOptionPane.showConfirmDialog(Notepad.this, "确定退出(X)?");

if(t==JOptionPane.OK_OPTION)

{

System.exit(0);

}

}

}

});

JMenuItem jmiPrintItem = new JMenuItem("打印(P) Ctrl+P");

jmiPrintItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

aset.add(MediaSizeName.ISO_A4);

PrintService[] pservices =

PrintServiceLookup.lookupPrintServices(flavor, aset);

PrintService defaultService=PrintServiceLookup.lookupDefaultPrintService();

if (pservices.length > 0) {

PrintService service = ServiceUI.printDialog(null, 200, 200, pservices,

defaultService, flavor, aset);

DocPrintJob pj = service.createPrintJob();

try {

String fis=jta.getText();

DocAttributeSet das = new HashDocAttributeSet();

Doc doc = new SimpleDoc(fis, flavor, das);

pj.print(doc, aset);

}

catch (PrintException e) {

e.printStackTrace();

}

}

}

});

jmFile.add(jmiNewItem);

jmFile.add(jmiOpenItem);

jmFile.add(jmiSaveItem);

jmFile.add(jmiSaveTo);

jmFile.add(new JSeparator());

jmFile.add(jmiPrintItem);

jmFile.add(new JSeparator());

jmFile.add(jmiExitItem);

//******************************实现编辑菜单的相关item

//***************************由于item太多,就放在一个类中实现监听(除了jmiUndoItem)

jmiUndoItem = new JMenuItem("撤销(U) Ctrl+Z");

jmiUndoItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

if(canUndo)

{

jmiUndoItem.setEnabled(true);

edit.undo();

}

else {

jmiUndoItem.setEnabled(false);

}

}

});

JMenuItem jmiCutItem = new JMenuItem("剪切(T) Ctrl+T");

jmiCutItem.addActionListener(new EditListener());

JMenuItem jmiCopyItem = new JMenuItem("复制(C) Ctrl+C");

jmiCopyItem.addActionListener(new EditListener());

JMenuItem jmiPasteItem = new JMenuItem("粘贴(P) Ctrl+V");

jmiPasteItem.addActionListener(new EditListener());

JMenuItem jmiDeleteItem = new JMenuItem("删除(L) Del");

jmiDeleteItem.addActionListener(new EditListener());

JMenuItem jmiSearchItem = new JMenuItem("查找(F) Ctrl+F");

jmiSearchItem.addActionListener(new EditListener());

JMenuItem jmiSearchNextItem = new JMenuItem("查找下一个(N) F3");

jmiSearchNextItem.addActionListener(new EditListener());

JMenuItem jmiReplaceItem = new JMenuItem("替换");

jmiReplaceItem.addActionListener(new EditListener());

JMenuItem jmiGoToItem = new JMenuItem("转到");

jmiGoToItem.addActionListener(new EditListener());

JMenuItem jmiSelectAllItem = new JMenuItem("全选");

jmiSelectAllItem.addActionListener(new EditListener());

JMenuItem jmiDateItem = new JMenuItem("日期");

jmiDateItem.addActionListener(new EditListener());

jmEdit.add(jmiUndoItem);

jmEdit.add(new JSeparator());

jmEdit.add(jmiCutItem);

jmEdit.add(jmiCopyItem);

jmEdit.add(jmiPasteItem);

jmEdit.add(jmiDeleteItem);

jmEdit.add(new JSeparator());

jmEdit.add(jmiSearchItem);

jmEdit.add(jmiSearchNextItem);

jmEdit.add(jmiReplaceItem);

jmEdit.add(jmiGoToItem);

jmEdit.add(new JSeparator());

jmEdit.add(jmiSelectAllItem);

jmEdit.add(jmiDateItem);

//*************************风格菜单的实现

JCheckBox jcbAutoNextLine=new JCheckBox("自动换行");

JMenuItem jmiFontitemItem = new JMenuItem("字体");

jmStyle.add(jcbAutoNextLine);

jmStyle.add(jmiFontitemItem);

JMenuItem jmiViewStatusItem = new JMenuItem("查看状态栏");

jmiViewStatusItem.setEnabled(false);

jmView.add(jmiViewStatusItem);

JMenuItem jmiAboutItem=new JMenuItem("关于");

jmiAboutItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

new HelpDialog(Notepad.this);

}

});

//**********************帮助菜单

jmHelp.add(jmiAboutItem);

setLayout(new BorderLayout());

JScrollPane jsp=new JScrollPane(jta);

jsp.requestFocus(true);

content.add(jsp,BorderLayout.CENTER);

}

public static void main(String[] args) throws Exception{

// TODO Auto-generated method stub

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (Exception e) {

System.out.print("Look And Feel Exception");

System.exit(0);

// TODO: handle exception

}

JFrame frame=new Notepad();

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e)

{

int r=JOptionPane.showConfirmDialog(null, "确认退出吗?");

if(r==JOptionPane.OK_OPTION)

System.exit(0);

}

});

frame.setSize(1000,500);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

//*****************************和剪贴板相关函数的实现

public String getClipbordContent(Clipboard clip) throws Exception

{

Transferable trans = clip.getContents(null);

if(trans!=null)

{

if(trans.isDataFlavorSupported(DataFlavor.stringFlavor))

return (String)trans.getTransferData(DataFlavor.stringFlavor);

else return "";

}

else

return "";

}

public void setClipbordContent(Clipboard clip,String str) throws Exception

{

Transferable trans=new StringSelection(str);

clip.setContents(trans, null);

}

//********************************监听编辑菜单下item的事件

class EditListener implements ActionListener

{

private String tempString="";

String textString=jta.getText();

String searchString="";

int stringLength=0;

int startPos;

JTextField jtField=null;

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getActionCommand().equals("剪切(T) Ctrl+T"))

{

tempString=jta.getSelectedText();

try {

setClipbordContent(clip, tempString);

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

jta.replaceSelection("");

}

else if (e.getActionCommand().equals("复制(C) Ctrl+C")) {

tempString=jta.getSelectedText();

try {

setClipbordContent(clip, tempString);

} catch (Exception e2) {

// TODO: handle exception

e2.printStackTrace();

}

}

else if (e.getActionCommand().equals("粘贴(P) Ctrl+V")) {

try {

tempString=getClipbordContent(clip);

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

int pos=jta.getCaretPosition();

jta.insert(tempString, pos);

}

else if (e.getActionCommand().equals("删除(L) Del")) {

jta.replaceSelection("");

}

else if (e.getActionCommand().equals("查找(F) Ctrl+F")) {

jdSearchDialog=new JDialog(Notepad.this,"查找");

Container content=jdSearchDialog.getContentPane();

JLabel jl=new JLabel("查找内容:");

jtField=new JTextField(20);

jtField.requestFocus();

JButton jbt1=new JButton("查找");

jbt1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

searchString=jtField.getText();

stringLength=searchString.length();

if(stringLength>0)

{

startPos=jta.getText().indexOf(searchString);

if(startPos>=0)

{

jta.select(startPos, startPos+stringLength);

}

else {

JOptionPane.showConfirmDialog(Notepad.this, "找不到"+"\""+searchString+"\"");

}

}

else {

JOptionPane.showConfirmDialog(Notepad.this, "请输入查找内容");

}

}

});

JPanel jp1=new JPanel(new BorderLayout(3,1));

jp1.add(jl,BorderLayout.WEST);

jp1.add(jtField,BorderLayout.CENTER);

jp1.add(jbt1,BorderLayout.EAST);

JPanel jp3 = new JPanel(new GridLayout(1,2));

jp3.setBorder(BorderFactory.createTitledBorder("方向"));

JRadioButton jrb1=new JRadioButton("向上(U)");

JRadioButton jrb2=new JRadioButton("向下(D)");

ButtonGroup bgButtonGroup=new ButtonGroup();

bgButtonGroup.add(jrb1);

bgButtonGroup.add(jrb2);

jp3.add(jrb1);

jp3.add(jrb2);

JCheckBox jcb=new JCheckBox("区分大小写(c)");

JPanel jp2 = new JPanel(new BorderLayout());

JButton jbt2=new JButton("取消");

jbt2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

jdSearchDialog.dispose();

}

});

jp2.add(jcb,BorderLayout.WEST);

jp2.add(jp3,BorderLayout.CENTER);

jp2.add(jbt2,BorderLayout.EAST);

content.setLayout(new BorderLayout());

content.add(jp1,BorderLayout.NORTH);

content.add(jp2,BorderLayout.CENTER);

jdSearchDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

jdSearchDialog.setLocationRelativeTo(null);

jdSearchDialog.setSize(400,100);

jdSearchDialog.setResizable(false);

jdSearchDialog.setVisible(true);

}

else if(e.getActionCommand().equals("查找下一个(N) F3"))

{

JOptionPane.showConfirmDialog(Notepad.this, "查找下一个(N) F3 Clicked");

}

else if (e.getActionCommand().equals("替换")) {

JOptionPane.showConfirmDialog(Notepad.this, "替换 Clicked");

}

else if(e.getActionCommand().equals("转到"))

{

JOptionPane.showConfirmDialog(Notepad.this, "转到");

}

else if (e.getActionCommand().equals("全选")) {

jta.selectAll();

}

else if (e.getActionCommand().equals("日期")) {

int pos=jta.getCaretPosition();

java.util.GregorianCalendar calendar=new java.util.GregorianCalendar();

java.util.Date date=calendar.getTime();

tempString=date.toString();

jta.insert(tempString, pos);

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值