欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java完整實(shí)現(xiàn)記事本代碼

 更新時(shí)間:2022年06月16日 10:46:07   作者:工藤學(xué)編程  
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)易記事本,較為詳細(xì)的分析了基于java實(shí)現(xiàn)記事本程序的完整過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

進(jìn)入今天的正題:

1.整體設(shè)計(jì)思路如下:

(1)使用頂層容器JFrame。

(2)設(shè)置功能菜單并通過(guò)BorderLayout進(jìn)行邊框布局管理。

(3)設(shè)置相應(yīng)按鈕與文件編輯區(qū)。

(4)進(jìn)行相應(yīng)事件處理。

2.各功能菜單設(shè)計(jì)思路:

(1)打開功能:

用戶點(diǎn)擊打開后,可以選擇文件中對(duì)應(yīng)的txt或dat文件,用戶確定選擇后即可打開改文件并展示文件中的內(nèi)容,并在程序正上方展示當(dāng)前文件路徑。

(2)新建功能: 用戶點(diǎn)擊新建功能后,將展示一個(gè)空白的記事本,用戶可進(jìn)行相應(yīng)編輯。

(3)保存功能: 用戶點(diǎn)擊保存后,如果保存的文件已經(jīng)存在路徑,則直接進(jìn)行覆蓋,若不存在,則需用戶自己選擇保存的路徑,并對(duì)保存的文件進(jìn)行命名。

(4)設(shè)定循環(huán)加解密規(guī)則如下:按照ASCII字符編碼(0-255),加密時(shí)對(duì)每一字符+10,(若超過(guò)255,減去255),解密時(shí)作對(duì)應(yīng)反變換。我們可以在文件I/O時(shí)進(jìn)行相應(yīng)操作。 再也不用擔(dān)心媽媽偷看你的筆記本啦??????

簡(jiǎn)單的運(yùn)行示例如下,其他的大家可以自行測(cè)試:

保存后的txt文件是這樣滴:

注意:用程序打開時(shí)是會(huì)正常顯示哦!因?yàn)樵谧x取的時(shí)候也做了相應(yīng)解密。

例如,這是打開的,所以有了他,是不是在也不用怕小秘密被別人知道啦!??!??????

話不多說(shuō),上源碼:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.filechooser.FileNameExtensionFilter;
import chenhao.io.TextTool;
public class TextPad {
	private JTextArea contentArea;
	private JFrame frame;
	private String fileName;
	public TextPad() {
		frame = new JFrame("記事本");
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 添加菜單
		JMenuBar menuBar = new JMenuBar();
		JMenu menu = new JMenu("文件");
		JMenuItem newItem = new JMenuItem("新建");
		newAction(newItem);
		menu.add(newItem);
		JMenuItem openItem = new JMenuItem("打開");
		openAction(openItem);
		menu.add(openItem);
		JMenuItem saveItem = new JMenuItem("保存");
		saveAction(saveItem);
		menu.add(saveItem);
		menuBar.add(menu);
		frame.setJMenuBar(menuBar);
		// 布局
		frame.setLayout(new BorderLayout());
		JToolBar toolBar = new JToolBar();
		JComboBox<String> fontCom = fontAction();
		toolBar.add(fontCom);
		JComboBox<String> fontSize = fontSizeAction();
		toolBar.add(fontSize);
		fontStyleAction(toolBar);
		JButton colorbtn = fontColorAction();
		toolBar.add(colorbtn);
		frame.add(toolBar, BorderLayout.NORTH);
		// 文件編輯區(qū)
		contentArea = new JTextArea();
		JScrollPane pane = new JScrollPane(contentArea);
		frame.add(pane);
		frame.setVisible(true);
	}
	private JButton fontColorAction() {
		JButton colorbtn = new JButton("■");
		colorbtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Color color = colorbtn.getForeground();
				Color co = JColorChooser.showDialog(TextPad.this.frame, "設(shè)置字體顏色", color);
                 colorbtn.setForeground(co);
                 contentArea.setForeground(co);
			}
		});
		return colorbtn;
	}
	// 記事本,字體格式
	private void fontStyleAction(JToolBar toolBar) {
		JCheckBox boldBox = new JCheckBox("粗體");
		JCheckBox itBox = new JCheckBox("斜體");
		ActionListener actionListener = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				boolean bold = boldBox.isSelected();
				boolean it = itBox.isSelected();
				int style = (bold ? Font.BOLD : Font.PLAIN) | (it ? Font.ITALIC : Font.PLAIN);
				Font font = contentArea.getFont();
				contentArea.setFont(new Font(font.getName(), style, font.getSize()));
				//contentArea.setFont(new Font(font.getName(), style, font.getSize()));
			}
		};
		boldBox.addActionListener(actionListener);
		itBox.addActionListener(actionListener);
		toolBar.add(boldBox);
		toolBar.add(itBox);
	}
	// 記事本,設(shè)置字體大小
	private JComboBox<String> fontSizeAction() {
		String[] fontSizes = new String[] { "10", "20", "30", "50" };
		JComboBox<String> fontSize = new JComboBox<>(fontSizes);
		fontSize.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int size = Integer.valueOf((String) fontSize.getSelectedItem());
				Font font = TextPad.this.contentArea.getFont();
				TextPad.this.contentArea.setFont(new Font(font.getName(), font.getStyle(), size));
			}
		});
		return fontSize;
	}
	// 記事本,設(shè)置字體
	private JComboBox<String> fontAction() {
		GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
		String[] fontNames = environment.getAvailableFontFamilyNames();
		JComboBox<String> fontCom = new JComboBox<>(fontNames);
		fontCom.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String fontName = (String) fontCom.getSelectedItem();
				Font font = TextPad.this.contentArea.getFont();
				TextPad.this.contentArea.setFont(new Font(fontName, font.getStyle(), font.getSize()));
			}
		});
		return fontCom;
	}
	// 記事本新建操作
	private void newAction(JMenuItem newItem) {
		newItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				contentArea.setText("");
				frame.setTitle("新建-記事本");
				fileName = null;
			}
		});
	}
	// 記事本打開文件操作
	private void openAction(JMenuItem openItem) {
		openItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				FileNameExtensionFilter filter = new FileNameExtensionFilter("Text & dat", "txt", "dat");
				chooser.setFileFilter(filter);
				int returnVal = chooser.showOpenDialog(frame);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					String fileName = chooser.getSelectedFile().getPath();
					TextPad.this.fileName = fileName;
					String content = TextTool.read(fileName);
					contentArea.setText(content);
					TextPad.this.frame.setTitle(fileName + "- 記事本");
				}
			}
		});
	}
	// 菜單 保存操作
	private void saveAction(JMenuItem saveItem) {
		saveItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (TextPad.this.fileName != null) {
					String content = TextPad.this.contentArea.getText();
					TextTool.write(TextPad.this.fileName, content);
				} else {
					JFileChooser chooser = new JFileChooser();
					FileNameExtensionFilter filter = new FileNameExtensionFilter("Text & dat", "txt", "dat");
					chooser.setFileFilter(filter);
					int returnVal = chooser.showSaveDialog(frame);
					if (returnVal == JFileChooser.APPROVE_OPTION) {
						String fileName = chooser.getSelectedFile().getPath();
						TextPad.this.fileName = fileName;
						String content = TextPad.this.contentArea.getText();
						TextTool.write(TextPad.this.fileName, content);
						TextPad.this.frame.setTitle(fileName + "- 記事本");
					}
				}
			}
		});
	}
	public static void main(String[] args) {
		TextPad pad = new TextPad();
	}
}
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Reader;
import java.io.Writer;
import javax.swing.JOptionPane;
public class TextTool {
	public static String read(String fileName) {
		try (Reader reader = new FileReader(fileName); BufferedReader buff = new BufferedReader(reader);) {
			String str;
			StringBuilder sb = new StringBuilder();
			while ((str = buff.readLine()) != null) {
				str = decoding(str);
				sb.append(str + "\n");
			}

			return sb.toString();
		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null, "找不到文件路徑" + fileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	public static void write(String fileName, String content) {

		try (Writer writer = new FileWriter(fileName);) {
			content = encoding(content);
			writer.write(content);
			writer.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static String encoding(String str) {
		String temp = "";
		for (int i = 0; i < str.length(); i++) {
			if(str.charAt(i)=='\n')
			{
				temp+=str.charAt(i);
			}
			else if (0 <= str.charAt(i) && str.charAt(i) <= 255)
				temp += (char) ((str.charAt(i) - '0' + 10) % 255);
			else
				temp += str.charAt(i);
		}
		return temp;
	}
	public static String decoding(String str) {
		String temp = "";
		for (int i = 0; i < str.length(); i++) {
			if(str.charAt(i)=='\n')
			{
				temp+=str.charAt(i);
			}
			else if (0 <= str.charAt(i) && str.charAt(i) <= 255)
				temp += (char) ((str.charAt(i) + '0' - 10 + 255) % 255);
			else
				temp += str.charAt(i);
		}
		return temp;
	}
}

到此這篇關(guān)于Java完整實(shí)現(xiàn)記事本代碼的文章就介紹到這了,更多相關(guān)Java記事本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中實(shí)現(xiàn)文件上傳下載的三種解決方案(推薦)

    Java中實(shí)現(xiàn)文件上傳下載的三種解決方案(推薦)

    這篇文章主要介紹了Java中實(shí)現(xiàn)文件上傳下載的三種解決方案的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • java實(shí)現(xiàn)文件夾上傳功能實(shí)例代碼(SpringBoot框架)

    java實(shí)現(xiàn)文件夾上傳功能實(shí)例代碼(SpringBoot框架)

    在web項(xiàng)目中上傳文件夾現(xiàn)在已經(jīng)成為了一個(gè)主流的需求,下面這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)文件夾上傳功能(springBoot框架)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • SpringBoot使用Quartz無(wú)法注入Bean的問(wèn)題及解決

    SpringBoot使用Quartz無(wú)法注入Bean的問(wèn)題及解決

    這篇文章主要介紹了SpringBoot使用Quartz無(wú)法注入Bean的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 手寫Java?LockSupport的示例代碼

    手寫Java?LockSupport的示例代碼

    LockSupport給我們提供了一個(gè)非常強(qiáng)大的功能,它是線程阻塞最基本的元語(yǔ),他可以將一個(gè)線程阻塞也可以將一個(gè)線程喚醒,因此經(jīng)常在并發(fā)的場(chǎng)景下進(jìn)行使用。本文將用60行代碼實(shí)現(xiàn)手寫LockSupport,需要的可以參考一下
    2022-08-08
  • Java MongoDB數(shù)據(jù)庫(kù)連接方法梳理

    Java MongoDB數(shù)據(jù)庫(kù)連接方法梳理

    MongoDB作為一種介于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之間的產(chǎn)品,它可以提供可擴(kuò)展的高性能的數(shù)據(jù)存儲(chǔ)解決方案,近些年來(lái)受到了開發(fā)者的喜愛(ài)
    2022-08-08
  • java信號(hào)量控制線程打印順序的示例分享

    java信號(hào)量控制線程打印順序的示例分享

    這篇文章主要介紹了java信號(hào)量控制線程打印順序的示例,如ABCABC這樣輸出線程,大家參考使用吧
    2014-01-01
  • JavaSE的類和對(duì)象你真的了解嗎

    JavaSE的類和對(duì)象你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了JavaSE的類和對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Java字符串常量池示例詳解

    Java字符串常量池示例詳解

    作為最基礎(chǔ)的引用數(shù)據(jù)類型,Java設(shè)計(jì)者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 深入了解Spring中Bean的作用域和生命周期

    深入了解Spring中Bean的作用域和生命周期

    這篇文章主要介紹了深入了解Spring中Bean的作用域和生命周期,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JAVA版排序算法之快速排序示例

    JAVA版排序算法之快速排序示例

    這篇文章主要介紹了JAVA版排序算法之快速排序,結(jié)合實(shí)例形式分析了基于java版的遍歷、遞歸實(shí)現(xiàn)快速排序功能的具體步驟與操作技巧,需要的朋友可以參考下
    2017-01-01

最新評(píng)論