java仿windows记事本小程序

本文实例为大家分享了java仿windows记事本小程序的具体代码,供大家参考,具体内容如下

import java.awt.CheckboxMenuItem;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.peer.ButtonPeer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;

import javax.print.DocFlavor.STRING;
import javax.script.ScriptException;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.AncestorListener;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Crazy_15_4 {
 private JFrame f = new JFrame("记事本");

 //成员变量
 static String shearPlate = null;
 static boolean isAutoWrap = true;//是否自动换行
 JTextArea ta = new JTextArea(20, 60);
 JScrollPane jsp = new JScrollPane(ta);
 private MenuBar mb = new MenuBar();
 public String fontStr = "宋体";
 public String shapeStr = "0";
 public String sizeStr = "20";
 Font font = new Font(fontStr, Integer.parseInt(shapeStr),Integer.parseInt(sizeStr) );

 //menu
 Menu file = new Menu("文件");
 Menu edit = new Menu("编辑");
 Menu format = new Menu("格式");

 //menuitem
 MenuItem newItem = new MenuItem("新建");
 MenuItem openItem = new MenuItem("打开");
 MenuItem saveItem = new MenuItem("保存");
 MenuItem saveAsItem = new MenuItem("另存为");
 MenuItem cutItem = new MenuItem("剪切");
 MenuItem copyItem = new MenuItem("复制");
 MenuItem pasteItem = new MenuItem("粘贴");
 CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行",isAutoWrap);
 MenuItem FontItem = new MenuItem("字体");
 //使用“ctrl+x”快捷键
 MenuItem exitIitem = new MenuItem("退出", new MenuShortcut(KeyEvent.VK_X));

 public void init() {
 //带滚动条的文本域
 ta.setLineWrap(isAutoWrap);
 jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
 jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

 file.add(newItem);
 file.add(openItem);
 file.add(saveItem);
 file.add(saveAsItem);

 edit.add(cutItem);
 edit.add(copyItem);
 edit.add(pasteItem);

 format.add(autoWrap);
 format.add(FontItem);

 mb.add(file);
 mb.add(edit);
 mb.add(format);

 f.setMenuBar(mb);
 f.addWindowListener(new WindowAdapter() {
 public void windowClosing(WindowEvent we) {
 if(!(ta.getText().equals(""))) {
  Object[] options = {"保存","不保存","取消"};
  int a = JOptionPane.showOptionDialog(null,"是否将更改保存到H:/Programing/无标题.txt","记事本", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
  if(a == JOptionPane.OK_OPTION ) {
  if(save()) {
  System.exit(0);
  }
  }else if(a == JOptionPane.NO_OPTION) {
  System.exit(0);
  }
 }else {
  System.exit(0);
 }
 }
 });

 newItem.addActionListener(new newListener());
 openItem.addActionListener(new openListener());
 saveItem.addActionListener(new saveListener());
 saveAsItem.addActionListener(new saveAsListener());
 cutItem.addActionListener(new cutAsListener());
 copyItem.addActionListener(new copyAsListener());
 pasteItem.addActionListener(new pasteAsListener());
 autoWrap.addItemListener(new autoWrapAsListener());
 FontItem.addActionListener(new fontListener());

 ta.setFont(font);
 //使文本框处在屏幕中间
 int width = Toolkit.getDefaultToolkit().getScreenSize().width;
 int height = Toolkit.getDefaultToolkit().getScreenSize().height;
 f.add(jsp);
 f.pack();
 f.setLocation(width/2-f.getWidth()/2, height/2-f.getHeight()/2);
 f.setVisible(true);
 //避免关闭对话框直接关闭文本文件
 f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 }
 public static void main(String[] args) {
 new Crazy_15_4().init();
 }

 //是否保存
 public void saveOrNot() {
 if(!(ta.getText().equals(""))) {
 Object[] options = {"保存","不保存","取消"};
 int a = JOptionPane.showOptionDialog(null,"是否将更改保存到H:/Programing/无标题.txt","记事本", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
 if(a == JOptionPane.OK_OPTION ) {
 save();
 }
 }
 }
 //保存文本文件
 public boolean save() {
 boolean isSaved = false;
 JFileChooser jf = new JFileChooser();
 FileNameExtensionFilter filter = new FileNameExtensionFilter("txt","txt");
 jf.setAcceptAllFileFilterUsed(false);
 jf.setFileFilter(filter);
 int value = jf.showSaveDialog(null);
 if(value == JFileChooser.APPROVE_OPTION) {
 File file = jf.getSelectedFile();
 String str = ta.getText();
 byte[] buf = str.getBytes();
 try {
 OutputStream os = new FileOutputStream(file);
 os.write(buf);
 os.flush();
 os.close();
 isSaved = true;
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 return isSaved;
 }
 //新建监听器
 class newListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 if(!(ta.getText().equals(""))) {
 Object[] options = {"保存","不保存","取消"};
 int a = JOptionPane.showOptionDialog(null,"是否将更改保存到H:/Programing/无标题.txt","记事本", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
 if(a == JOptionPane.OK_OPTION ) {
  if(save()) {
  ta.setText("");
  }
 }else if(a == JOptionPane.NO_OPTION) {
  ta.setText("");
 }
 }

 }
 }

 //打开监听器,从硬盘目录打开文本文件
 class openListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 JFileChooser jf = new JFileChooser();
 FileNameExtensionFilter filter = new FileNameExtensionFilter("txt","txt");
 jf.setAcceptAllFileFilterUsed(false);
 jf.setFileFilter(filter);
 int value = jf.showOpenDialog(null);
 if(value == JFileChooser.APPROVE_OPTION) {
 File file = jf.getSelectedFile();
 try {
  String encoding = "GBK";//考虑编码格式
  InputStreamReader isr = new InputStreamReader(new FileInputStream(file),encoding);
  BufferedReader br = new BufferedReader(isr);
  String str = null;
  while((str = br.readLine()) != null) {
  ta.append(str);
  }
 } catch (FileNotFoundException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 } catch (IOException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 }
 }
 }
 }

 //保存监听器,以电脑时间命名
 class saveListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 String name = null;
 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
 name = df.format(System.currentTimeMillis());
 File file = new File("H:/Programing/workspace/"+name+".txt");
 String str = ta.getText();
 byte[] buf = str.getBytes();
 if(!str.equals("")) {
 try {
  OutputStream os = new FileOutputStream(file);
  os.write(buf);
  os.flush();
  os.close();
 } catch (IOException e2) {
  e2.printStackTrace();
 }
 }
 }
 }

 //另存为监听器
 class saveAsListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 save();
 }
 }

 //剪切监听器
 class cutAsListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 shearPlate = ta.getSelectedText();
 int startPosi = ta.getSelectionStart();
 int endPosi = ta.getSelectionEnd();
 StringBuffer sb = new StringBuffer(ta.getText());
 sb.delete(startPosi, endPosi);
 ta.setText(sb.toString());
 }
 }

 //复制监听器
 class copyAsListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 shearPlate = ta.getSelectedText();
 }
 }

 //粘贴监听器
 class pasteAsListener implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 int position = ta.getCaretPosition();
 StringBuilder sb = new StringBuilder(ta.getText());
 sb.insert(position, shearPlate);
 ta.setText(sb.toString());
 ta.setCaretPosition(position+shearPlate.length());
 }
 }

 //自动换行监听器
 class autoWrapAsListener implements ItemListener{

 @Override
 public void itemStateChanged(ItemEvent e) {
 if(autoWrap.getState()) {
  isAutoWrap = true;
  ta.setLineWrap(isAutoWrap);
  jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
 }else {
  isAutoWrap = false;
  ta.setLineWrap(isAutoWrap);
  jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
 }
 }
 }

 //字体监听器
 class fontListener implements ActionListener{
 JFrame jf = new JFrame("字体");
 JPanel jp = new JPanel();
 ButtonPanel fontButton = new ButtonPanel("字体",new String[] {"宋体","黑体","楷体","吴祎晗1.0"});
 ButtonPanel shapeButton = new ButtonPanel("字形",new String[] {"常规","粗体","斜体","粗体&斜体"});
 ButtonPanel sizeButton = new ButtonPanel("字号",new String[] {"12","16","20","24","26"});
 public void actionPerformed(ActionEvent e) {
 jp.setBorder(new TitledBorder(new EtchedBorder(),"字体选择",TitledBorder.CENTER,TitledBorder.TOP));
 jp.add(fontButton);
 jp.add(shapeButton);
 jp.add(sizeButton);
 jf.add(jp);
 jf.pack();
 jf.setLocationRelativeTo(f);
 jf.setVisible(true);
 jf.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
  fontStr = fontButton.getSelec();
  sizeStr = sizeButton.getSelec();
  font = new Font(fontStr, shapeVal(shapeButton.getSelec()), Integer.parseInt(sizeStr));
  ta.setFont(font);
  }
 });
 }

 public int shapeVal(String str) {
 int a = 0;
 switch (str) {
 case "常规":
  a = 0;
  break;
 case "粗体":
  a = 1;
  break;
 case "斜体":
  a = 2;
  break;
 case "粗体&斜体":
  a = 3;
  break;
 }
 return a;
 }
 }

}

//定义一个JPanel类扩展类,该类的对象包含多个纵向排列的
//JRadioButton控件,且panel扩展类可以指定一个字符串作为TitledBorder
class ButtonPanel extends JPanel{
 private ButtonGroup group;
 public ButtonPanel(String title, String[] options) {
 setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),title));
 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 group = new ButtonGroup();
 for(int i=0; options!=null&&i<options.length; i++) {
 JRadioButton b = new JRadioButton(options[i]);
 b.setActionCommand(options[i]);
 this.add(b);
 group.add(b);
 if(title.equals("字号")) {
 b.setSelected(i == 2);
 }else {
 b.setSelected(i == 0);
 }
 }
 }
 public String getSelec() {
 return group.getSelection().getActionCommand();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java运用SWT插件编写桌面记事本应用程序

    本文实例介绍了Java基于SWT编写记事本的详细过程,分享给大家供大家参考,具体内容如下 可实现windows系统桌面记事本基本功能,傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 需要工具:Eclipse(带SWT插件) 成品如下: 应用程序功能介绍: 功能分析: 1.文件(F) 2.编辑(E) 3.格式(O) 4.查看(V) 5.帮助(H) 其中文件菜单中包括 1.1.新建(N) Ctrl+N 1.2打开(O) Ctrl+O 1.3保存(S) Ctrl+S 1.4另存为(

  • Java仿Windows记事本源代码分享

    本文实例为大家分享了Java仿Windows记事本的具体代码,供大家参考,具体内容如下 先上截图: 源代码: import java.awt.*; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.undo.UndoManager; import java.awt.event.*; import java.io.*; /** * * @author cj

  • Java实现的简易记事本

    本文实例讲述了Java实现的简易记事本.分享给大家供大家参考.具体如下: 感觉这个没有自己以前用Windows API写的好看了... JDK Version : 1.7.0 效果如下图所示: 源代码如下: import java.io.*; import java.awt.*; import java.awt.event.*; /** * The Main Window * @author Neo Smith */ class PadFrame extends Frame { private

  • 怎么运行用记事本写的java程序

    今天用记事本写了一个java程序,测试能运行,现在把它分解成几个步骤,利于大家理解: 1. 新建一个记事本,后缀名是  .java  :然后在里面写一段java的代码,如图: 2.把写好的java文件丢进D盘,就是第一步给出的那个class文件: 3. 打开dos界面 开始-〉运行-〉cmd-〉 这个是命令行模式,选择D盘,如图: 4.选择D盘之后,在命令提示符中输入"javac 文件名.java",我的文件名为java,所以输入javac java.java然后回车,等待编译.这时候

  • 简单记事本java源码实例

    本文实例讲述了简单记事本java实现代码.分享给大家供大家参考.具体如下: 完整代码如下: 复制代码 代码如下: import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import java.awt.event.*;   public class Main extends Frame implements ActionListener {         private static final long ser

  • Java Web使用简单的批处理操作(记事本+Tomcat)

    之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到.所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太好用.今天闲来无事,就决定尝试一下最原始的办法,使用记事本+Tomcat进行开发.虽然效率不是很高,但是熟悉了最基本的一些操作,也算是颇有收获.而在在篇博客中,我将分享一下我觉得今天最大的收获. 我们都知道,我们要将项目在Tomcat中部署运行,所使用的.class文件需要保存到一个特定的目录下(当

  • Java实现记事本功能

    今天给大家介绍一下关于如何用Java实现记事本功能,是学习Java swing的一个非常好的案例,下面先看一下运行结果: 下面我们来看源码: import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.io.*; import javax.swing.undo.*; import javax.swing.border.*; import javax.swing.*;

  • java仿windows记事本功能完整版

    最近学了Java编程,就编了仿windows系统下的记事本练练手,这个记事本实现了windows系统下的大部分功能,只有很少的部分没有实现,比如撤销命令的不完美,这是本人的能力有限,还有那些JMenuItem的是否可用问题,这只是本人比较偷懒,无心再去实现,希望能够与广大的Java爱好者分享我的代码,共同学习进步,我肯定有不足之处,比如有些代码的重复,代码的布置,以及变量的取名问题,希望广大的Java大牛多提宝贵意见,话不多少,直接上代码! package org.mfy.notepad; im

  • 使用Java制作一个简单的记事本

    通过使用Java的Swing.IO来实现一个简单记事本,实现打开指定的text文本文件,然后将text文件的内容加载到Swing组件中,然后在Swing组件中编辑记事本内容,然后同菜单的保存选项将编辑后的内容保存到text文件中.代码如下: 复制代码 代码如下: import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; import java.awt.*; import

  • Java文件(io)编程之记事本开发详解

    本文实例为大家分享了Java开发简易记事本的具体代码,供大家参考,具体内容如下 public class NotePad extends JFrame implements ActionListener{ //定义需要的组件 JTextArea jta=null; //多行文本框 JMenuBar jmb=null; //菜单条 JMenu jm1=null; //菜单 JMenuItem jmi1=null,jmi2=null; //菜单项 public static void main(St

随机推荐