//简单的类似记事本的文档编辑器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.awt.font.*;
import javax.swing.undo.UndoManager;
public class MyTxt
{
public static void main(String[] args)
{
Aframe frame = new Aframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class Aframe extends JFrame
{
public Aframe()
{
setTitle("我的记事本");
setSize(WIDTH, HEIGHT);
Container contentPane = getContentPane();
JPanel txtPanel = new JPanel();
JPanel comboxPanel = new JPanel();
JPanel textPanel = new JPanel();
txtArea=new JTextArea("",17,40);
JScrollPane scrollPane =new JScrollPane(txtArea);
txtPanel.add(scrollPane);
contentPane.add(comboxPanel,BorderLayout.NORTH);
contentPane.add(txtPanel);
contentPane.add(textPanel,BorderLayout.SOUTH);
//Caidan lan:添加主菜单并设置快捷键
JMenuBar menuBar =new JMenuBar();
setJMenuBar(menuBar);
fileMenu=new JMenu("文件(F)");
editMenu=new JMenu("编辑(E)");
typeMenu=new JMenu("格式(O)");
viewMenu=new JMenu("查看(V)");
helpMenu=new JMenu("帮助(H)");
aboutMenu=new JMenu("关于(A)");
fileMenu.setMnemonic('F');
editMenu.setMnemonic('E');
typeMenu.setMnemonic('O');
viewMenu.setMnemonic('V');
helpMenu.setMnemonic('H');
aboutMenu.setMnemonic('A');
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(typeMenu);
menuBar.add(viewMenu);
menuBar.add(aboutMenu);
menuBar.add(helpMenu);
//wenjian“文件”菜单的子菜单添加以及设置加速器,监听器
aa=fileMenu.add(new ShowAction("新建"));
aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
ab=fileMenu.add(new ShowAction("打开"));
ab.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
ac=fileMenu.add(new ShowAction("保存"));
ac.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
ad=fileMenu.add(new ShowAction("另存为"));
ad.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
fileMenu.addSeparator();
ae=fileMenu.add(new ShowAction("页面设置"));
ae.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
af=fileMenu.add(new ShowAction("打印"));
af.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
fileMenu.addSeparator();//分割线
ag=fileMenu.add(new ShowAction("退出"));
ag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
//bianji“编辑”菜单的子菜单添加以及设置加速器,监听器
ah=editMenu.add(new ShowAction("撤消"));
editMenu.addSeparator();
ah.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
ai=editMenu.add(new ShowAction("剪切"));
ai.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
aj=editMenu.add(new ShowAction("复制"));
aj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
an=editMenu.add(new ShowAction("粘贴"));
an.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
ak=editMenu.add(new ShowAction("删除"));
ak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
editMenu.addSeparator();
al=editMenu.add(new ShowAction("查找"));
al.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
am=editMenu.add(new ShowAction("全选"));
am.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
//geshi“格式”菜单的子菜单添加以及设置加速器,监听器
zdhh=new JMenu("自动换行(L)");
zdhh.setMnemonic('L');
typeMenu.add(zdhh);
ButtonGroup group =new ButtonGroup();
xz=new JRadioButtonMenuItem("选择");
xz.addActionListener(new ShowAction("选择"));
xz.setSelected(true);
qxxz=new JRadioButtonMenuItem("取消");
qxxz.addActionListener(new ShowAction("取消"));
qxxz.setSelected(true);
group.add(xz);group.add(qxxz);
zdhh.add(xz);zdhh.add(qxxz);
bj=typeMenu.add(new ShowAction("背景颜色"));
bj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
zt=typeMenu.add(new ShowAction("字体"));
zt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
//字体弹出框中的“确定”按钮
que=new Button("确定");
que.addActionListener(new boxlistener());
//chakan“查看”菜单的子菜单添加以及设置加速器,监听器
ztl=viewMenu.add(new ShowAction("状态栏"));
ztl.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//guanyu“关于”菜单的子菜单添加以及设置加速器,监听器
zzxx=aboutMenu.add(new ShowAction("作者信息"));
zzxx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
bq=aboutMenu.add(new ShowAction("版权"));
bq.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK));
sm=aboutMenu.add(new ShowAction("声明"));
sm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//bangzhu“帮助”菜单的子菜单添加以及设置加速器,监听器
shm=helpMenu.add(new ShowAction("说明"));
shm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//文本框底部工具栏的设置
toolbar2=new JToolBar();
textPanel.add(toolbar2);
text1=new JTextField("就绪",10);
text2=new JTextField("欢迎使用该记事本!",10);
text3=new JTextField("",10);
text4=new JTextField("",10);
textPanel.setLayout(new GridLayout(1, 4));
toolbar2.add(text1);
toolbar2.add(text2);
toolbar2.add(text3);
toolbar2.add(text4);
text1.setEditable(false);
text2.setEditable(false);
text3.setEditable(false);
text4.setEditable(false);
//组合框的设置
//字体
zitiLabel=new JLabel("字体");comboxPanel.add(zitiLabel);
String zit[]={"宋体","华文行楷","楷体","黑体","幼圆"};
zitibox=new JComboBox(zit);
comboxPanel.add(zitibox);
//颜色
yanseLabel=new JLabel("颜色");comboxPanel.add(yanseLabel);
String yans[]={"黑色","蓝色","绿色","红色","黄色","蓝绿色","浅灰色"};
yansebox=new JComboBox(yans);
comboxPanel.add(yansebox);
//大小
daxiaoLabel=new JLabel("大小");comboxPanel.add(daxiaoLabel);
String dax[]={"15","10","5","20","25","30","35","40","..."};
daxiaobox=new JComboBox(dax);
comboxPanel.add(daxiaobox);
zitibox.setEditable(true);
yansebox.setEditable(true);
daxiaobox.setEditable(true);
comboxPanel.setLayout(new FlowLayout(FlowLayout.LEFT));//靠左排列
//组合框注册监听器
yansebox.addActionListener(new boxlistener());
zitibox.addActionListener(new boxlistener());
daxiaobox.addActionListener(new boxlistener());
txtPanel.setLayout(new GridLayout(1, 1));
//实例化“撤销”
um= new UndoManager ();
txtArea.getDocument().addUndoableEditListener(um);
}
//菜单栏的接口实现
private class ShowAction extends AbstractAction
{
public ShowAction(String name){super(name);}
public void actionPerformed(ActionEvent e)
{
Object s=e.getSource();
//新建
if(s==aa)
{
if(txtArea.getText().equals(""))
{
txtArea.setText("");
}
else{
int n=JOptionPane.showConfirmDialog(Aframe.this, "无标题记事本已改变。\n想要保存吗?","记事本",JOptionPane.YES_NO_CANCEL_OPTION);
if(n==JOptionPane.NO_OPTION){
txtArea.setText("");
setTitle("无标题"+"——"+"记事本");
}
else if(n==JOptionPane.YES_OPTION)
{
save.setVisible(true);
String name=save.getDirectory()+save.getFile();
try
{
FileOutputStream out=new FileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOException a)
{
System.err.println("保存失败。。!");
}
}
}
}
//打开
if(s==ab)
{
open.setVisible(true);
String name=open.getDirectory()+open.getFile();
String name2=open.getFile();
setTitle(name2);
try
{
FileInputStream in=new FileInputStream(name);
byte[] ia=new byte[in.available()];
in.read(ia);
txtArea.setText(new String(ia));
in.close();
}
catch(IOException a)
{
System.err.println("获取文件失败!");
}
}
//另存为
if(s==ad)
{
save.setVisible(true);
String name=save.getDirectory()+save.getFile();
try
{
FileOutputStream out=new FileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOException a)
{
System.err.println("保存失败。。!");
}
shifulingcun=1;
}
//保存
if(s==ac)
{
if(shifulingcun!=1)
{save.setVisible(true);}
String name=save.getDirectory()+save.getFile();
try
{
FileOutputStream out=new FileOutputStream(name);
out.write(txtArea.getText().getBytes());
out.close();
}
catch(IOException b)
{
System.err.println("保存文件失败");
}
}
//退出
if(s==ag)
{
int selection = JOptionPane.showConfirmDialog(
Aframe.this,
"确定退出么?", "退出?",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
if (selection == JOptionPane.OK_OPTION)
{
System.exit(0);
}
}
//选择自动换行
if(s==xz)
{
txtArea.setLineWrap(true);
}
//取消自动换行
if(s==qxxz)
{
txtArea.setLineWrap(false);
}
//背景颜色
if(s==bj)
{
Color color=JColorChooser.showDialog(Aframe.this, "调色板", txtArea.getBackground());
if(color!=null)
txtArea.setBackground(color);
}
//作者信息
if (s==zzxx)
{int selection = JOptionPane.showConfirmDialog(
Aframe.this,
"“我的记事本”编写小组成员:刘悦,王征,沈光辉","作者信息",
JOptionPane.DEFAULT_OPTION);
}
//版权
if (s==bq)
{int selection = JOptionPane.showConfirmDialog(
Aframe.this,
"版权所有,盗版必究!","版权",
JOptionPane.DEFAULT_OPTION);
}
//声明
if (s==sm)
{int selection = JOptionPane.showConfirmDialog(
Aframe.this,
"该程序仅用于实践交流","声明",
JOptionPane.DEFAULT_OPTION);
}
//说明
if (s==shm)
{int selection = JOptionPane.showConfirmDialog(
Aframe.this,
"由于种种原因,该版本记事本还存在很多缺陷,我们将在以后的工作中予以改进","说明",
JOptionPane.DEFAULT_OPTION);
}
//剪切复制粘贴
if (s==ai|| s==cutTtem)
{
txtArea.cut();
}
if (s==aj)
{
txtArea.copy();
}
if (s==an)
{
txtArea.paste();
}
//删除
if(s==ak)
{
txtArea.replaceRange("", txtArea.getSelectionStart(), txtArea.getSelectionEnd());
}
//全选
if (s==am)
{
txtArea.selectAll();
}
//撤销
if(s==ah)
{
um.undo();
}
//字体
if (s==zt)
{
tishi.setFont(new Font("华文行楷",1,15));
tanchu.setLocation(300,250);
tanchu.setSize(200,150);
tanchu.setTitle("字体设置");
tanchu.setLayout(new GridLayout(2,2,2,2));
tanchu.add(tishi);
tanchu.add(daxiaobox);
tanchu.add(que);
tanchu.add(zitibox);
tanchu.setVisible(true);
}
//状态栏
aaaaa.setText("当前字体是"+ff+"颜色是"+zzz+"大小是"+kk);
if (s==ztl)
{
tanchu.setLocation(300,250);
tanchu.setSize(300,150);
tanchu.setTitle("当前状态");
tanchu.setLayout(new GridLayout(2,2,2,2));
aaaaa.setEditable(false);
tanchu.add(aaaaa);
tanchu.add(que);
tanchu.setVisible(true);
}
//查找
}
}
//组合框的接口实现
private class boxlistener implements ActionListener
{
public void actionPerformed(ActionEvent ee)
{
Object ss=yansebox.getSelectedItem();
Object zz=zitibox.getSelectedItem();
Object dx=daxiaobox.getSelectedItem();
String tr=(String)ss;
String tz=(String)zz;
String td=(String)dx;
//字体菜单中弹出菜单“确定”的响应
if (ee.getSource()==que){
tanchu.dispose();
}
//颜色
if(tr=="红色"){
txtArea.setForeground(Color.red);
zzz="红色";
}
if(tr=="黑色"){
txtArea.setForeground(Color.black);
zzz="黑色";
}
if(tr=="绿色"){
txtArea.setForeground(Color.green);
zzz="绿色";
}
if(tr=="蓝色"){
txtArea.setForeground(Color.blue);
zzz="蓝色";
}
if(tr=="黄色"){
txtArea.setForeground(Color.yellow);
zzz="黄色";
}
if(tr=="蓝绿色"){
txtArea.setForeground(Color.cyan);
zzz="蓝绿色";
}
if(tr=="浅灰色"){
txtArea.setForeground(Color.lightGray);
zzz="浅灰色";
}
//字体
if(tz=="华文行楷"){
Font f=txtArea.getFont();
txtArea.setFont(new Font("华文行楷",f.getStyle(),f.getSize()));
ff="华文行楷";
}
if(tz=="楷体"){
Font f=txtArea.getFont();
txtArea.setFont(new Font("楷体",f.getStyle(),f.getSize()));
ff="楷体";
}
if(tz=="宋体"){
Font f=txtArea.getFont();
txtArea.setFont(new Font("宋体",f.getStyle(),f.getSize()));
ff="宋体";
}
if(tz=="黑体"){
Font f=txtArea.getFont();
txtArea.setFont(new Font("黑体",f.getStyle(),f.getSize()));
ff="黑体";
}
if(tz=="幼圆"){
Font f=txtArea.getFont();
txtArea.setFont(new Font("幼圆",f.getStyle(),f.getSize()));
ff="幼圆";
}
//大小
if(td=="5"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),5));
kk="5";
}
if(td=="10"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),10));
kk="10";
}
if(td=="15"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),15));
kk="15";
}
if(td=="20"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),20));
kk="20";
}
if(td=="25"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),25));
kk="25";
}
if(td=="30"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),30));
kk="30";
}
if(td=="35"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),35));
kk="35";
}
if(td=="40"){
Font f=txtArea.getFont();
txtArea.setFont(new Font(f.getName(),f.getStyle(),40));
kk="40";
}
}
}
public static final int WIDTH = 550;
public static final int HEIGHT = 450;
JTextArea txtArea;
JMenu fileMenu,editMenu,typeMenu,viewMenu,helpMenu,aboutMenu;
JMenuItem aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,zdhh,zt,ztl,zzxx,bq,sm,shm,bj,cutTtem;
JComboBox zitibox,yansebox,daxiaobox;
JLabel zitiLabel,yanseLabel,daxiaoLabel;
FileDialog open=new FileDialog(this,"打开..");
FileDialog save=new FileDialog(this,"另存为..",FileDialog.SAVE);
JRadioButtonMenuItem xz,qxxz;
JFileChooser fileChooser;
int shifulingcun;
JToolBar toolbar2;
JTextField text1,text2,text3,text4;
public JTextField aaaaa=new JTextField ("");
UndoManager um;
Dialog tanchu=new Dialog(this);
public Button que;
Label tishi=new Label("字体和大小:");
String ff="",kk="",zzz="";
}
界面:
相关推荐
在Java编程中,开发者会利用文本编辑器编写源代码,通过构建工具(如Maven或Gradle)管理依赖,使用IDE(集成开发环境,如IntelliJ IDEA或Eclipse)进行调试和测试,最后将编译后的字节码部署到服务器上。...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
从标题“java版本文本编辑器源代码”和描述“本程序是用java语言编写的一个文本编辑器程序”可以推断出,这是一个使用Java编写的简单文本编辑器。Java 是一种广泛使用的编程语言,特别适合于开发跨平台的应用程序。 ...
综上所述,这个简单的文本编辑器源代码展示了Java编程中的一些核心概念,包括GUI编程、事件处理、颜色选择器的设计以及接口的使用。它不仅适合初学者学习Java的基本语法和库的使用,同时也为进阶用户提供了理解和...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
"多文档编辑器java源代码"这个标题揭示了我们正在讨论的是一个用Java编程语言编写的软件项目,它具有编辑多个文本文件的能力。在软件开发领域,多文档编辑器允许用户同时打开并编辑多个文本或代码文件,这对于程序员...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
标题 "文本编辑器 源代码 java" 暗示我们关注的是一个使用Java编程语言开发的文本编辑器项目。这个项目可能包含了实现文本编辑功能的各种核心组件和算法,例如打开、保存、编辑、查找替换等操作。在Java中,这通常会...
这个名为"文本编辑器java源代码"的资源显然提供了一个用Java编程语言实现的文本编辑器的源代码。这样的项目对学习Java GUI(图形用户界面)编程,Swing或JavaFX框架,以及事件处理等概念具有很高的教育价值。 首先...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
【标题】"多功能文档编辑器源代码"指出我们讨论的主题是一款具有多种功能的文档编辑器的源代码。这种编辑器通常包含丰富的文本处理能力,支持多种格式,如TXT、DOC、PDF、HTML等,可能还集成了图片编辑、表格制作、...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
而`.java`文件则是我们用Java编写源代码的地方。 在`last.java`中,我们可能会看到以下关键部分: 1. **主类定义**:这是程序的入口点,通常包含`public static void main(String[] args)`方法。在这个方法内,...
JAVA编写的文本编辑器程序源代码 其余部分搜索、下载方法: 1、点击 “Tag” 后面的关键字。JAVA课程设计 JAVA课程设计源代码 。 2、可在“搜索”按钮前面的文本框内填上本资源的关键字进行搜索。 3、或者点击“高级...
在分析源代码时,你可以看到如何将这些功能模块化,通过事件监听器(如ActionListener)来响应用户的交互,以及如何组织类和方法来保持代码的清晰和可维护性。此外,了解异常处理也是很重要的,因为在处理文件I/O或...
关于"java源代码"这部分,我们可以理解为该文本编辑器的实现是完全开放的,用户可以查看、学习和修改源代码。这对于初学者来说是一个极好的学习资源,他们可以通过阅读和分析代码来理解如何使用Swing构建复杂的应用...
Java 中的简单文本编辑器是用 Java 编程语言编码的桌面应用程序。该项目使用一个简单的函数来制作文本编辑器应用程序。这个项目可以允许写任何字母,也可以改变文本的字体样式。该应用程序易于使用,您只需打开应用...
本项目标题为“用Java编写的记事本的源代码”,这意味着它是一个实现了基本文本编辑功能的Java应用程序。下面我们将深入探讨其中涉及的关键知识点。 1. **Swing库**: 记事本应用通常使用Java的Swing库来构建用户...