转自:http://blog.sina.com.cn/s/blog_666c46fb0100kw3v.html
Java记事本源代码,总共有三步。
第一步:建一个新类,名字是kk。kk.java的源代码如下所示:
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
public class kk extends Frame implements ActionListener{
final FontChooser fontChooser1 = new FontChooser(kk.this);
//FontPicker fontChooser1=new FontPicker();
TextArea textarea=new TextArea();
MenuBar menubar=new MenuBar();
Menu filemenu=new Menu("文件");
MenuItem newitem=new MenuItem("新建");
MenuItem openitem=new MenuItem("打开");
MenuItem saveasitem=new MenuItem("保存");
MenuItem exititem=new MenuItem("退出");
Menu editmenu=new Menu("编辑");
MenuItem selectitem=new MenuItem("全选");
MenuItem copyitem=new MenuItem("复制");
MenuItem cutitem=new MenuItem("剪切");
MenuItem pasteitem=new MenuItem("粘贴");
Menu wordmenu=new Menu("字体");
MenuItem qianitem=new MenuItem("设置前景色");
MenuItem beiitem=new MenuItem("设置背景色");
MenuItem ziitem=new MenuItem("字体格式");
Menu aboutmenu=new Menu("关于");
MenuItem info=new MenuItem("关于记事本");
JToolBar toolBar=new JToolBar();
ImageIcon leftButtonIcon=new ImageIcon("new.gif");
ImageIcon middleButtonIcon=new ImageIcon("open.gif");
ImageIcon rightButtonIcon=new ImageIcon("save.gif");
ImageIcon copyButtonIcon=new ImageIcon("copy.gif");
ImageIcon cutButtonIcon=new ImageIcon("cut.gif");
ImageIcon pasteButtonIcon=new ImageIcon("paste.gif");
JButton jb1=new JButton("新建(N)",leftButtonIcon);
JButton jb2=new JButton("打开(O)",middleButtonIcon);
JButton jb3=new JButton("保存(S)",rightButtonIcon);
JButton jb4=new JButton("复制(C)",copyButtonIcon);
JButton jb5=new JButton("剪切(X)",cutButtonIcon);
JButton jb6=new JButton("粘贴(V)",pasteButtonIcon);
String fileName="NoName";
Toolkit toolkit=Toolkit.getDefaultToolkit();
Clipboard clipboard=toolkit.getSystemClipboard();
private FileDialog openFileDialog=new FileDialog(this,"打开文
件",FileDialog.LOAD);
private FileDialog saveAsFileDialog=new FileDialog(this,"保存文
件",FileDialog.SAVE);
public kk(){
setTitle("记事本");
setFont(new Font("Times New Roman",Font.PLAIN,20));
setBackground(Color.white);
setSize(800,600);
setLocation(100,100);
jb1.setToolTipText("新建文件,快捷键Alt+N");
jb2.setToolTipText("打开文件,快捷键Alt+O");
jb3.setToolTipText("保存文件,快捷键Alt+S");
jb4.setToolTipText("复制文件,快捷键Alt+C");
jb5.setToolTipText("剪切文件,快捷键Alt+X");
jb6.setToolTipText("粘贴文件,快捷键Alt+V");
// jb1.setVerticalTextPosition(AbstractButton.CENTER);//水平中间对齐
// jb1.setHorizontalTextPosition(AbstractButton.LEADING);//相当于LEFT
filemenu.add(newitem);
filemenu.add(openitem);
filemenu.addSeparator();
filemenu.add(saveasitem);
filemenu.addSeparator();
filemenu.add(exititem);
// filemenu.setMnemonic('F');
editmenu.add(selectitem);
editmenu.add(copyitem);
editmenu.addSeparator();
editmenu.add(cutitem);
editmenu.add(pasteitem);
wordmenu.add(qianitem);
wordmenu.add(beiitem);
wordmenu.addSeparator();
wordmenu.add(ziitem);
toolBar.add(jb1);
toolBar.add(jb2);
toolBar.add(jb3);
toolBar.add(jb4);
toolBar.add(jb5);
toolBar.add(jb6);
menubar.add(filemenu);
menubar.add(editmenu);
menubar.add(wordmenu);
menubar.add(aboutmenu);
aboutmenu.add(info);
setMenuBar(menubar);
// setMenuBar(menubar);
setLayout(new BorderLayout());
add(textarea,BorderLayout.CENTER);
add(toolBar,BorderLayout.NORTH);
addWindowListener(new WindowAdapter(){public void windowClosing
(WindowEvent e){System.exit(0);}});
newitem.addActionListener(this);
openitem.addActionListener(this);
saveasitem.addActionListener(this);
exititem.addActionListener(this);
selectitem.addActionListener(this);
copyitem.addActionListener(this);
cutitem.addActionListener(this);
pasteitem.addActionListener(this);
info.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);
jb5.addActionListener(this);
jb6.addActionListener(this);
jb1.setMnemonic(KeyEvent.VK_N);
jb2.setMnemonic(KeyEvent.VK_O);
jb3.setMnemonic(KeyEvent.VK_S);
jb4.setMnemonic(KeyEvent.VK_C);
jb5.setMnemonic(KeyEvent.VK_X);
jb6.setMnemonic(KeyEvent.VK_V);
qianitem.addActionListener(this);
beiitem.addActionListener(this);
ziitem.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
Object eventSource=e.getSource();
if(eventSource==newitem){
textarea.setText("");
}else if(eventSource==openitem){
openFileDialog.show();
fileName=openFileDialog.getDirectory()+openFileDialog.getFile();
if(fileName!=null)
readFile(fileName);
}
else if(eventSource==saveasitem){
saveAsFileDialog.show();
fileName=saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile();
if(fileName!=null)
writeFile(fileName);
}
else if(eventSource==selectitem){
textarea.selectAll();
}
else if(eventSource==copyitem){
String text = textarea.getSelectedText();
StringSelection selection= new StringSelection(text);
clipboard.setContents(selection,null);
}
else if(eventSource==cutitem){
String text=textarea.getSelectedText();
StringSelection selection=new StringSelection(text);
clipboard.setContents(selection, null);
textarea.replaceRange("",textarea.getSelectionStart
(),textarea.getSelectionEnd());
}else if(eventSource==pasteitem){
Transferable contents=clipboard.getContents(this);
if(contents==null)
return;
String text;
text="";
try{text=(String) contents.getTransferData
(DataFlavor.stringFlavor);}catch (Exception exception){
}textarea.replaceRange(text, textarea.getSelectionStart
(),textarea.getSelectionEnd() );
}else if(eventSource==exititem)
{
// System.exit(0);
Object[] options = { "是","否", "取消" };
int s = JOptionPane.showOptionDialog(null, "按“否”后,直接退出记
事本,文档将会消失,无法恢复。" +
"\n按“是”后,进行保存文档操作。保存完毕后,自动退出记事本,程
序结束运行。\n按”取消“后,返回记事本继续编辑。", "警告!请注意保存文
档!",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null,
options, options[0]);
if (s == JOptionPane.YES_OPTION)
{
saveAsFileDialog.show();
fileName=saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile
();
if(fileName!=null){
writeFile(fileName);
}
System.exit(0);
}
else if (s == JOptionPane.NO_OPTION)
{
System.exit(0);
}
}
// {
//// System.exit(0);
//
// Object[] options = { "确定", "取消" };
// int s = JOptionPane.showOptionDialog(null, "按“确定”后,退出记
事本,文档将会消失,无法恢复。" +
// "\n按“取消”后,进行保存文档操作。\n保存完毕后,自动退出记事
本,程序结束运行。", "警告!请注意保存文档!",
// JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null,
// options, options[0]);
// if (s == JOptionPane.YES_OPTION)
// {
// System.exit(0);
// }
// else if (s == JOptionPane.NO_OPTION)
// {
// saveAsFileDialog.show();
// fileName=saveAsFileDialog.getDirectory()
+saveAsFileDialog.getFile();
// if(fileName!=null){
// writeFile(fileName);
// }
// System.exit(0);
// }
// }
else if(eventSource==info){
// Icon help_icon = new ImageIcon("doit.jpg");
// String help = "DOIT(R)记事本\n版本1.0 (内部版本号
2008.xp_sp2_dave.080423-10)\n版权"
// + "所有 (C) 2008-2008 DOIT。\n最终解释权归本人所有,"
// + "授权给:\n\nBuild By Davezhang\nQQ:442803117
\nBolg:http://hi.baidu.com.442803117"
// + "\nEmail:442803117@qq.com";
// JOptionPane.showConfirmDialog(null, help, "帮助",
// JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
// help_icon);
Icon help_icon = new ImageIcon("doit.jpg");
String help = "感谢您的使用!\n本记事本程序暂无帮助,您可以参考
WindowsXP的记事本帮助程序!\n"
+ "欢迎和作者联系交流!\n"
+ "Build By HaoPenghua\nQQ:1013795885\nBolg:http://hi.baidu.com/
郝鹏华"
+ "\nEmail:1013795885@qq.com";
JOptionPane.showConfirmDialog(null, help, "关于记事本",
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
help_icon);
// JOptionPane.showMessageDialog(null,"本软件是一个小的记事本,欢迎大
家使用!" );//显示信息对话框
}
else if(eventSource==qianitem){
Color color=JColorChooser.showDialog(this,"前景
色",textarea.getForeground());
if(color!=null){
textarea.setForeground(color);
}
}
else if(eventSource==beiitem){
Color color=JColorChooser.showDialog(this,"背景
色",textarea.getBackground());
if(color!=null){
textarea.setBackground(color);
}
}
else if(eventSource==ziitem){
fontChooser1.setVisible(true);
// If we got a real font choice, then update our go button
if (fontChooser1.getNewFont() != null) {
textarea.setFont(fontChooser1.getNewFont());
textarea.setForeground(fontChooser1.getNewColor());
}
// fontChooser1=new FontPicker();
fontChooser1.show();
// fontChooser1.setSelectedFont(textarea.getFont());
// if(fontChooser1.showDialog()){
// Font font=fontChooser1.setSelectedFont(font);
// textarea.setFont(font);
// }
// this.repaint();
// textarea.repaint();
}
else if(eventSource==jb1){
textarea.setText("");
}
else if(eventSource==jb2){
openFileDialog.show();
fileName=openFileDialog.getDirectory()+openFileDialog.getFile();
if(fileName!=null)
readFile(fileName);
}
else if(eventSource==jb3){
saveAsFileDialog.show();
fileName=saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile();
if(fileName!=null)
writeFile(fileName);
}
else if(eventSource==jb4){
String text = textarea.getSelectedText();
StringSelection selection= new StringSelection(text);
clipboard.setContents(selection,null);
}
else if(eventSource==jb5){
String text=textarea.getSelectedText();
StringSelection selection=new StringSelection(text);
clipboard.setContents(selection, null);
textarea.replaceRange("",textarea.getSelectionStart
(),textarea.getSelectionEnd());
}
else if(eventSource==jb6){
Transferable contents=clipboard.getContents(this);
if(contents==null)
return;
String text;
text="";
try{text=(String) contents.getTransferData
(DataFlavor.stringFlavor);}catch (Exception exception){
}textarea.replaceRange(text, textarea.getSelectionStart
(),textarea.getSelectionEnd() );
}
}
public void readFile(String fileName){
try{
File file=new File(fileName);
FileReader readIn=new FileReader(file);
int size=(int) file.length();
int charsRead=0;
char[] content=new char[size];
while(readIn.ready())
charsRead+=readIn.read(content,charsRead,size-charsRead);
readIn.close();
textarea.setText(new String(content,0,charsRead));
}catch (IOException e){
System.out.println("Error Opening file");
}
}
public void writeFile(String fileName){
try{
File file=new File(fileName);
FileWriter writeOut=new FileWriter(file);
writeOut.write(textarea.getText());
writeOut.close();
}catch (IOException e){
System.out.println("Error writing file");
}
}
public static void main(String[] args){
kk frame=new kk();
frame.show();
}
}
第二步:再建一个新类,名字是FontPicker。FontPicker.java和kk.java必须在
同一目录下,FontPicker.java的源代码如下所示:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class FontPicker extends JFrame {
Color c;
public FontPicker() {
super("JColorChooser Test Frame");
setSize(200, 100);
final JButton go = new JButton("Show FontChooser");
go.addActionListener(new ActionListener() {
final FontChooser chooser = new FontChooser(FontPicker.this);
boolean first = true;
public void actionPerformed(ActionEvent e) {
chooser.setVisible(true);
// If we got a real font choice, then update our go button
if (chooser.getNewFont() != null) {
go.setFont(chooser.getNewFont());
go.setForeground(chooser.getNewColor());
}
}
});
getContentPane().add(go);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
FontPicker fp = new FontPicker();
fp.setVisible(true);
}
}
//FontChooser.java
//A font chooser that allows users to pick a font by name, size, style,
and
//color. The color selection is provided by a JColorChooser pane. This
//dialog builds an AttributeSet suitable for use with JTextPane.
//
class FontChooser extends JDialog implements ActionListener {
JColorChooser colorChooser;
JComboBox fontName;
JCheckBox fontBold, fontItalic;
JTextField fontSize;
JLabel previewLabel;
SimpleAttributeSet attributes;
Font newFont;
Color newColor;
public FontChooser(Frame parent) {
super(parent, "字体格式", true);
setSize(450, 450);
attributes = new SimpleAttributeSet();
// Make sure that any way the user cancels the window does the
right
// thing
// addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// closeAndCancel();
// }
// });
// Start the long process of setting up our interface
Container c = getContentPane();
JPanel fontPanel = new JPanel();
fontName = new JComboBox(new String[] { "TimesRoman", "Helvetica",
"Courier" });
fontName.setSelectedIndex(1);
fontName.addActionListener(this);
fontSize = new JTextField("12", 4);
fontSize.setHorizontalAlignment(SwingConstants.RIGHT);
fontSize.addActionListener(this);
fontBold = new JCheckBox("Bold");
fontBold.setSelected(true);
fontBold.addActionListener(this);
fontItalic = new JCheckBox("Italic");
fontItalic.addActionListener(this);
fontPanel.add(fontName);
fontPanel.add(new JLabel(" Size: "));
fontPanel.add(fontSize);
fontPanel.add(fontBold);
fontPanel.add(fontItalic);
c.add(fontPanel, BorderLayout.NORTH);
// Set up the color chooser panel and attach a change listener so
that
// color
// updates get reflected in our preview label.
colorChooser = new JColorChooser(Color.black);
colorChooser.getSelectionModel().addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
updatePreviewColor();
}
});
c.add(colorChooser, BorderLayout.CENTER);
JPanel previewPanel = new JPanel(new BorderLayout());
previewLabel = new JLabel("Here's a sample of this font.");
previewLabel.setForeground(colorChooser.getColor());
previewPanel.add(previewLabel, BorderLayout.CENTER);
// Add in the Ok and Cancel buttons for our dialog box
JButton okButton = new JButton("Ok");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
closeAndSave();
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
closeAndCancel();
}
});
JPanel controlPanel = new JPanel();
controlPanel.add(okButton);
controlPanel.add(cancelButton);
previewPanel.add(controlPanel, BorderLayout.SOUTH);
// Give the preview label room to grow.
previewPanel.setMinimumSize(new Dimension(100, 100));
previewPanel.setPreferredSize(new Dimension(100, 100));
c.add(previewPanel, BorderLayout.SOUTH);
}
// Ok, something in the font changed, so figure that out and make a
// new font for the preview label
public void actionPerformed(ActionEvent ae) {
// Check the name of the font
if (!StyleConstants.getFontFamily(attributes).equals(
fontName.getSelectedItem())) {
StyleConstants.setFontFamily(attributes, (String) fontName
.getSelectedItem());
}
// Check the font size (no error checking yet)
if (StyleConstants.getFontSize(attributes) != Integer.parseInt
(fontSize
.getText())) {
StyleConstants.setFontSize(attributes, Integer.parseInt(fontSize
.getText()));
}
// Check to see if the font should be bold
if (StyleConstants.isBold(attributes) != fontBold.isSelected()) {
StyleConstants.setBold(attributes, fontBold.isSelected());
}
// Check to see if the font should be italic
if (StyleConstants.isItalic(attributes) != fontItalic.isSelected())
{
StyleConstants.setItalic(attributes, fontItalic.isSelected());
}
// and update our preview label
updatePreviewFont();
}
// Get the appropriate font from our attributes object and update
// the preview label
protected void updatePreviewFont() {
String name = StyleConstants.getFontFamily(attributes);
boolean bold = StyleConstants.isBold(attributes);
boolean ital = StyleConstants.isItalic(attributes);
int size = StyleConstants.getFontSize(attributes);
//Bold and italic don't work properly in beta 4.
Font f = new Font(name, (bold ? Font.BOLD : 0)
+ (ital ? Font.ITALIC : 0), size);
previewLabel.setFont(f);
}
// Get the appropriate color from our chooser and update previewLabel
protected void updatePreviewColor() {
previewLabel.setForeground(colorChooser.getColor());
// Manually force the label to repaint
previewLabel.repaint();
}
public Font getNewFont() {
return newFont;
}
public Color getNewColor() {
return newColor;
}
public AttributeSet getAttributes() {
return attributes;
}
public void closeAndSave() {
// Save font & color information
newFont = previewLabel.getFont();
newColor = previewLabel.getForeground();
// Close the window
setVisible(false);
}
public void closeAndCancel() {
// Erase any font information and then close the window
newFont = null;
newColor = null;
setVisible(false);
}
public Font setSelectedFont(Font font) {
JTextArea textarea=null;
// TODO 自动生成方法存根
return textarea.getFont();
}
}
第三步:本项目需要用到7张图片,这7张图片就在下面,从上到下分别为copy.gif、cut.gif、new.gif、
open.gif、paste.gif、save.gif、doit.jpg,这7张图片必须要和kk.class和
FontPicker.class放在同一目录下。最后编译运行成功。
附图:“项目运行成功后的情况”的图示:
相关推荐
【标题】"java记事本 源代码"所涉及的知识点主要集中在Java编程语言、图形用户界面(GUI)设计以及文件操作上。这个项目利用Java的Swing库来构建一个类似于Windows记事本的应用程序,它实现了文本编辑的基础功能。 ...
* 此为一个java记事本的源代码 * 此记事本的主要功能: * 1、对文本文件进行打开,编辑,修改,保存,另存为 等基本操作 * 2、能够对文本中文字字体、字形、字号进行设置,及其信息的保存与恢复 * 3、能够...
Java记事本是一款基于Java编程语言实现的简单文本编辑器,它具有基本的文本编辑功能,如新建、打开、保存、复制、粘贴、查找和替换等。这个项目的源代码提供了对Java GUI编程的一个基础实践,同时也揭示了Java事件...
通过研究这个Java记事本的源代码,初学者可以了解如何将理论知识应用于实际项目,加深对Java GUI编程的理解,为后续的Java Web或Java EE开发打下坚实基础。同时,这也是一个很好的练习,可以锻炼问题解决和代码调试...
在分析源代码时,你可以看到如何将这些功能模块化,通过事件监听器(如ActionListener)来响应用户的交互,以及如何组织类和方法来保持代码的清晰和可维护性。此外,了解异常处理也是很重要的,因为在处理文件I/O或...
总的来说,这个Java记事本程序源代码项目是一个全面的教程,涵盖了Java基础、GUI设计、文件操作和事件处理等多个重要主题。对于初学者,通过阅读和理解代码,不仅可以学习到如何创建一个实际的应用程序,还能加深对...
本文将详细解析这个"JAVA记事本程序"的源代码,让你对Java编程有更深入的理解。 首先,让我们来看看这个程序的基本结构。Java记事本程序通常由以下几个主要部分组成: 1. **GUI设计**:使用Java的Swing库创建图形...
【标题】"记事本Java源代码"涉及的是使用Java编程语言实现的一个基本文本编辑器,也就是我们常见的“记事本”程序。这个程序通常包含了基础的文本编辑功能,如新建、打开、保存、复制、粘贴、剪切、查找、替换等。在...
Java记事本小程序是编程领域中的一个基础项目,它通常用于教授初学者如何利用Java语言进行GUI(图形用户界面)编程。在这个项目中,开发者Koma不仅创建了一个基本的记事本应用程序,还包含了色盲检测程序的源码,这...
Java记事本程序源代码是Java编程领域的一个基础示例,它展示了如何使用Java语言实现一个功能完备的文本编辑器,类似于我们常见的Windows记事本。这个程序包含了文件操作、编辑功能以及帮助菜单等基本元素,是学习...
总结来说,Java记事本程序是一个基于Java Swing库构建的文本编辑器,它的源代码打包在jar文件中,便于学习和理解Java GUI编程及文件操作。这个项目对于初学者来说是一个很好的实践项目,能够帮助他们深入理解Java的...
Java记事本程序源代码.pdf
这个“JAVA记事本+源代码”项目就是这样一个实例,它为初学者提供了一个实际操作和学习的基础平台。作者愿意分享源代码,这有助于促进编程知识的交流与进步。 首先,我们来探讨Java记事本的基本功能。一个基本的...
源代码文件应按照类的功能进行组织。 10. **集成开发环境(IDE)**: - 开发Java程序时,可以使用IDE如Eclipse、IntelliJ IDEA或NetBeans,它们提供了代码提示、自动格式化、调试等功能,方便开发和调试。 这个...
【标题】:“java记事本源代码”是一个关于Java...这个项目的源代码可以作为学习和理解Java编程的实战案例,通过阅读和修改代码,可以加深对上述知识点的理解。同时,尝试完善这个记事本程序也是提升编程技能的好方式。