一个可添加文字,图文、视频的记事本。
今天这个小程序做的很不容易,最后终于查出来是数据库的问题。
还有就是有的时候老出现问题是应把手机中原有的程序卸载重新安装。
1.主页面布局
2.添加ListView的布局方式
3.页面跳转(三个button都跳转到同一个页面)
4.跳转后的页面布局
5.添加监听事件
6.建立数据库
7.建立适配器
8.实现保存按钮的功能
9.实现添加文字
10.实现三个button的区别
11.实现添加图文
12.实现添加视频
13.跳转到详情页
14.实现详情页的删除和返回
1.主页面布局
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.notes.MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/text" /> <Button android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/img" /> <Button android:id="@+id/video" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/video" /> </LinearLayout> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
2.添加ListView的布局方式
新建cell.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/list_img" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/list_video" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:gravity="center_vertical" android:orientation="vertical" > <TextView android:id="@+id/list_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/list_content" /> <TextView android:id="@+id/list_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/list_time" /> </LinearLayout> </LinearLayout> </LinearLayout>
3.页面跳转(三个button都跳转到同一个页面)
新建addcontent.xml
新建AddContent.java
public class AddContent extends Activity{ protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addcontent); } }
MainActivity.java(全新的添加监听的方法)
public class MainActivity extends Activity implements OnClickListener{ private Button textbtn; private Button imgbtn; private Button videobtn; private Intent i; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textbtn=(Button) findViewById(R.id.text); imgbtn=(Button) findViewById(R.id.img); videobtn=(Button) findViewById(R.id.video); textbtn.setOnClickListener(this); imgbtn.setOnClickListener(this); videobtn.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub i=new Intent(this,AddContent.class); switch(v.getId()){ case R.id.text: startActivity(i); break; case R.id.img: startActivity(i); break; case R.id.video: startActivity(i); break; } } }
注册!!!!
AndroidMainfest.xml
<activity android:name="com.example.notes.AddContent" android:screenOrientation="portrait"> //设置为竖屏 </activity>
另外在MainActivity中也设置为竖屏
<activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
此时运行程序,成功跳转。
4.跳转后的页面布局
addcontent.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/c_img" android:layout_width="300dp" android:layout_height="500dp" android:visibility="gone"/>//隐藏 <VideoView android:id="@+id/c_video" android:layout_width="300dp" android:layout_height="500dp" android:visibility="gone"/> <EditText android:id="@+id/ettext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"//撑开布局 android:background="@null" //去掉边框 android:gravity="top"//将光标置于顶部 android:hint="有了记事本,我再也不会忘记事情了"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/save" /> <Button android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/delete" /> </LinearLayout> </LinearLayout>
5.添加监听事件
给跳转之后的页面:两个button添加监听事件,当点击时,可返回到主页面。
AddContent.java
public class AddContent extends Activity implements OnClickListener{ private Button savebtn; private Button deletebtn; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addcontent); savebtn=(Button) findViewById(R.id.save); deletebtn=(Button) findViewById(R.id.delete); savebtn.setOnClickListener(this); deletebtn.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.save: finish(); break; case R.id.delete: finish(); break; } } }
此时点击button,可跳转到主页面上。
之后的操作就比较复杂,算是我第一次接触。下面就致力于添加文字的操作。首先应该建立数据库。
6.建立数据库
我们先做添加文字的操作,所以数据库也只包含添加文字的字段。(之前就是因为写了图片和视频不为空,所以才一直运行不出来自己想要的结果而耽误的一天的时间,真是后悔,以后应该牢记,不能再犯类似的错误,也还好自己一直在坚持着错误,没有放弃。)
新建NotesDB.java
public class NotesDB extends SQLiteOpenHelper{ public static final String TABLE_NAME="notes"; public static final String CONTENT="content"; public static final String ID="_id"; public static final String TIME="time"; public NotesDB(Context context) { super(context, "notes", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT + " TEXT NOT NULL," + TIME + " TEXT NOT NULL)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
数据库是我第一次在练习中使用,真的是被坑了好几次。
第一次因为少写了一个空格,程序一直闪退,后面又因为添加了不该添加的字段,一直达不到我想要的效果。
总之,数据库这里坑很多,写代码的时候一定要小心翼翼,该打的空格一定要打上。当程序出现异常时,也应该首先考虑数据库的问题。
记得运行一下,因为有的时候会出现无错误停止情况,这样可以方便查找问题。
7.建立适配器
新建MyAdapter.java
public class MyAdapter extends BaseAdapter{ private Context context; private Cursor cursor; private LinearLayout layout; public MyAdapter(Context context,Cursor cursor){ this.context=context; this.cursor=cursor; } @Override public int getCount() { // TODO Auto-generated method stub return cursor.getCount(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return cursor.getPosition(); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LayoutInflater inflater=LayoutInflater.from(context); layout=(LinearLayout) inflater.inflate(R.layout.cell, null); TextView contenttv=(TextView)layout.findViewById(R.id.list_content); TextView timetv=(TextView) layout.findViewById(R.id.list_time); cursor.moveToPosition(position); String content=cursor.getString(cursor.getColumnIndex("content")); String time=cursor.getString(cursor.getColumnIndex("time")); contenttv.setText(content); timetv.setText(time); return layout; } }
前几天在做通讯录的时候也用到了这个适配器,感觉跟那个有异曲同工之妙,所以这个代码应该多看几遍就能会了,应该不是特别难。
运行一下。
8.实现保存按钮的功能
AddContent.java
public class AddContent extends Activity implements OnClickListener{ private Button savebtn; private Button deletebtn; private EditText ettext; private NotesDB notesDB; private SQLiteDatabase dbWriter; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addcontent); savebtn=(Button) findViewById(R.id.save); deletebtn=(Button) findViewById(R.id.delete); ettext=(EditText) findViewById(R.id.ettext); savebtn.setOnClickListener(this); deletebtn.setOnClickListener(this); notesDB=new NotesDB(this); dbWriter=notesDB.getWritableDatabase(); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.save: addDB(); finish(); break; case R.id.delete: finish(); break; } } private void addDB() { // TODO Auto-generated method stub ContentValues cv=new ContentValues(); cv.put(NotesDB.CONTENT, ettext.getText().toString()); cv.put(NotesDB.TIME, getTime()); dbWriter.insert(NotesDB.TABLE_NAME, null, cv); } private String getTime() { // TODO Auto-generated method stub SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date curDate=new Date(); String str=format.format(curDate); return str; } }
9.实现添加文字
在主函数中调用,实现添加文字的功能。
MainActivity.java
public class MainActivity extends Activity implements OnClickListener{ private Button textbtn; private Button imgbtn; private Button videobtn; private ListView lv; private Intent i; private MyAdapter adapter; private NotesDB notesDB; private SQLiteDatabase dbReader; private Cursor cursor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textbtn=(Button) findViewById(R.id.text); imgbtn=(Button) findViewById(R.id.img); videobtn=(Button) findViewById(R.id.video); lv=(ListView) findViewById(R.id.list); textbtn.setOnClickListener(this); imgbtn.setOnClickListener(this); videobtn.setOnClickListener(this); notesDB=new NotesDB(this); dbReader=notesDB.getReadableDatabase(); } @Override public void onClick(View v) { // TODO Auto-generated method stub i=new Intent(this,AddContent.class); switch(v.getId()){ case R.id.text: startActivity(i); break; case R.id.img: startActivity(i); break; case R.id.video: startActivity(i); break; } } public void selectDB(){ cursor=dbReader.query(NotesDB.TABLE_NAME, null, null, null, null, null, null); adapter=new MyAdapter(this,cursor); lv.setAdapter(adapter); } protected void onResume(){ super.onResume(); selectDB(); } }
哇,终于实现这个功能了。
10.实现三个button的区别
AddContent.java
private ImageView c_img; private VideoView v_video; private String val;
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addcontent); c_img=(ImageView) findViewById(R.id.c_img); v_video=(VideoView) findViewById(R.id.c_video); val=getIntent().getStringExtra("flag"); initView(); } private void initView() { // TODO Auto-generated method stub if(val.equals("1")){//文字 c_img.setVisibility(View.GONE); v_video.setVisibility(View.GONE); } if(val.equals("2")){//图文 c_img.setVisibility(View.VISIBLE); v_video.setVisibility(View.GONE); } if(val.equals("3")){//视频 c_img.setVisibility(View.GONE); v_video.setVisibility(View.VISIBLE); } }
MainActivity.java
public void onClick(View v) { // TODO Auto-generated method stub i=new Intent(this,AddContent.class); switch(v.getId()){ case R.id.text: i.putExtra("flag", "1"); startActivity(i); break; case R.id.img: i.putExtra("flag", "2"); startActivity(i); break; case R.id.video: i.putExtra("flag", "3"); startActivity(i); break; } }
此时点击文字、图文、视频后出现不同的页面。
接下来就是实现添加图文的操作了。
11.实现添加图文
首先在数据库中添加图片字段。
数据库啊,一定不能忘记。
NotesDB.java
public static final String PATH="path";
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT + " TEXT NOT NULL," + PATH + " TEXT NOT NULL," + TIME + " TEXT NOT NULL)"); }
添加PATH字段后,卸载后重新运行后,添加文字不会显示到主界面上,此时不要紧张,因为我们设置了PATH字段不为空,无法显示是正常的。继续我们的操作。
AddContent.java
private File phoneFile;
private void initView() { // TODO Auto-generated method stub if(val.equals("1")){//文字 c_img.setVisibility(View.GONE); v_video.setVisibility(View.GONE); } if(val.equals("2")){//图文 c_img.setVisibility(View.VISIBLE); v_video.setVisibility(View.GONE); Intent iimg=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); phoneFile=new File(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".jpg"); iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile)); startActivityForResult(iimg,1); } if(val.equals("3")){//视频 c_img.setVisibility(View.GONE); v_video.setVisibility(View.VISIBLE); } }
private void addDB() { // TODO Auto-generated method stub ContentValues cv=new ContentValues(); cv.put(NotesDB.CONTENT, ettext.getText().toString()); cv.put(NotesDB.TIME, getTime()); cv.put(NotesDB.PATH, phoneFile+""); dbWriter.insert(NotesDB.TABLE_NAME, null, cv); }
protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode, resultCode, data); if(requestCode==1){ Bitmap bitmap=BitmapFactory.decodeFile(phoneFile.getAbsolutePath()); c_img.setImageBitmap(bitmap); } }
MyAdapter.java
public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LayoutInflater inflater=LayoutInflater.from(context); layout=(LinearLayout) inflater.inflate(R.layout.cell, null); TextView contenttv=(TextView)layout.findViewById(R.id.list_content); TextView timetv=(TextView) layout.findViewById(R.id.list_time); ImageView imgiv=(ImageView) layout.findViewById(R.id.list_img); cursor.moveToPosition(position); String content=cursor.getString(cursor.getColumnIndex("content")); String time=cursor.getString(cursor.getColumnIndex("time")); String url=cursor.getString(cursor.getColumnIndex("path")); contenttv.setText(content); timetv.setText(time); imgiv.setImageBitmap(getImageThumbnail(url,200,200)); return layout; } //获取缩略图 private Bitmap getImageThumbnail(String uri, int width, int height) { // TODO Auto-generated method stub Bitmap bitmap=null; BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; bitmap=BitmapFactory.decodeFile(uri, options); options.inJustDecodeBounds=false; int beWidth=options.outWidth/width; int beHeight=options.outHeight/height; int be=1; if(beWidth<beHeight){ be=beWidth; } else{ be=beHeight; } if(be<=0){ be=1; } options.inSampleSize=be; bitmap=BitmapFactory.decodeFile(uri, options); bitmap=ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return bitmap; }
此时运行程序就可成功添加图片了。
12.实现添加视频
第一步当然还是在数据库中添加相应的字段。
NotesDB.java
public static final String VIDEO="video";
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT + " TEXT NOT NULL," + PATH + " TEXT NOT NULL," + VIDEO + " TEXT NOT NULL," + TIME + " TEXT NOT NULL)"); }
此时运行添加文字是不会出现在主界面上的。
AddContent.java
private File videoFile;
private void initView() { // TODO Auto-generated method stub if(val.equals("1")){//文字 c_img.setVisibility(View.GONE); v_video.setVisibility(View.GONE); } if(val.equals("2")){//图文 c_img.setVisibility(View.VISIBLE); v_video.setVisibility(View.GONE); Intent iimg=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); phoneFile=new File(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".jpg"); iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile)); startActivityForResult(iimg,1); } if(val.equals("3")){//视频 c_img.setVisibility(View.GONE); v_video.setVisibility(View.VISIBLE); Intent video=new Intent(MediaStore.ACTION_VIDEO_CAPTURE); videoFile=new File(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".mp4"); video.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile)); startActivityForResult(video,2); } }
private void addDB() { // TODO Auto-generated method stub ContentValues cv=new ContentValues(); cv.put(NotesDB.CONTENT, ettext.getText().toString()); cv.put(NotesDB.TIME, getTime()); cv.put(NotesDB.PATH, phoneFile+""); cv.put(NotesDB.VIDEO, videoFile+""); dbWriter.insert(NotesDB.TABLE_NAME, null, cv); }
protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode, resultCode, data); if(requestCode==1){ Bitmap bitmap=BitmapFactory.decodeFile(phoneFile.getAbsolutePath()); c_img.setImageBitmap(bitmap); } if(requestCode==2){ v_video.setVideoURI(Uri.fromFile(videoFile)); v_video.start();//播放视频 } }
MyAdapter.java
public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LayoutInflater inflater=LayoutInflater.from(context); layout=(LinearLayout) inflater.inflate(R.layout.cell, null); TextView contenttv=(TextView)layout.findViewById(R.id.list_content); TextView timetv=(TextView) layout.findViewById(R.id.list_time); ImageView imgiv=(ImageView) layout.findViewById(R.id.list_img); ImageView videoiv=(ImageView) layout.findViewById(R.id.list_video); cursor.moveToPosition(position); String content=cursor.getString(cursor.getColumnIndex("content")); String time=cursor.getString(cursor.getColumnIndex("time")); String url=cursor.getString(cursor.getColumnIndex("path")); String urlvideo=cursor.getString(cursor.getColumnIndex("video")); contenttv.setText(content); timetv.setText(time); imgiv.setImageBitmap(getImageThumbnail(url,200,200)); videoiv.setImageBitmap(getVideoThumbnail(urlvideo,200,200, MediaStore.Images.Thumbnails.MICRO_KIND)); return layout; }
//获取缩略图 private Bitmap getVideoThumbnail(String uri,int width,int height,int kind) { // TODO Auto-generated method stub Bitmap bitmap=null; bitmap=ThumbnailUtils.createVideoThumbnail(uri, kind); bitmap=ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return bitmap; }
成功添加,真不容易啊!
13.跳转到详情页
第一次碰到这种ListView的跳转,是用一种全新的监听方法。
首先新建select.xml
然后新建SelectAct.java
public class SelectAct extends Activity{ protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.select); } }MainActivity.java
private ListView lv;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv=(ListView) findViewById(R.id.list); lv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int positon, long id) { // TODO Auto-generated method stub Intent i=new Intent(MainActivity.this,SelectAct.class); startActivity(i); } }); }注册,注册!!!
AndroidManifest.xml
<activity android:name="SelectAct" android:screenOrientation="portrait"> </activity>当然,此时跳转过去只是一个空白的页面,我们最起码要做到把之前添加的内容显示到新页面上。
MainActivity.java
lv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub cursor.moveToPosition(position); Intent i=new Intent(MainActivity.this,SelectAct.class); i.putExtra(NotesDB.ID, cursor.getInt(cursor.getColumnIndex(NotesDB.ID))); i.putExtra(NotesDB.CONTENT, cursor.getString(cursor .getColumnIndex(NotesDB.CONTENT))); i.putExtra(NotesDB.TIME, cursor.getString(cursor.getColumnIndex(NotesDB.TIME))); i.putExtra(NotesDB.PATH, cursor.getString(cursor.getColumnIndex(NotesDB.PATH))); i.putExtra(NotesDB.VIDEO, cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO))); startActivity(i); } });select.xml
相关推荐
大家好,今天我给大家带来一个记事本这个记事本是真正的黑客记事本我编写了1个多月才完成。功能超多
标题“真正免费好用的语音记事本绿色版”表明这是一个免费的、用户友好的语音记录应用程序,且为绿色版本,意味着它无需安装,可能以便携式应用的形式存在,不写入系统注册表,方便携带和使用。 【描述解析】 描述...
易语言是一种专为中国人设计的编程语言,它的目标是让编程变得简单易学。这个“易语言的记事本源码”提供了一个基础的文本...记得在学习过程中,要多动手实践,遇到问题时尝试自己解决,这样才能真正吸收和掌握知识。
例如,记事本应用可以在手机上创建,在电视上查看,或者在智能手表上提醒,真正实现“一处编写,多处运行”。 3. **开发环境与工具**: 开发鸿蒙应用,通常需要使用华为的DevEco Studio,这是一个集成了代码编辑、...
而对于跨设备工作的用户而言,如果记事本支持云同步,便可以实现多端的数据同步,实现了真正的随时随地的工作和记事需求。 关于QQ记事本的版本信息,我们从其中的文件名“QQNotepad_V2.12.exe”可以看出,这是一款...
5. **跨平台兼容**:作为一个网络版的记事本,它很可能支持多平台同步,这意味着用户可以在电脑、手机或平板等多个设备上无缝切换,随时随地查看和编辑记事内容,实现真正的便捷。 6. **数据安全**:考虑到网络记事...
随着技术的发展,市场上的文本编辑软件层出不穷,但真正能够深入人心的,往往是那些简洁、实用且具有一定个性化的工具。"浮云记事本"便是在这样的背景下脱颖而出的软件之一,它以轻量级的定位和丰富的功能特性,吸引...
在数字化时代,日常生活的节奏越来越快,人们对于效率的需求也相应增长。...这款软件的成功,证明了在现代技术不断发展的背景下,只有那些能够贴合用户需求,提供个性化和高效率工具的产品,才能真正地赢得市场的青睐。
easy记事本(网页版记事本),支持mysql数据插入和查询,快速查找。mysql用户名root,密码Zzerp123。使用tomcat部署,方便快捷。 将数据保存到mysql中,可以时常备份,并且使用。 部署: 将war包放到tomcat的webapps...
但真正使这款记事本脱颖而出的是其插入图片的功能。在文本编辑器中插入图片是一项实用的扩展,它允许用户在文档中插入各种格式的图像,如.jpg、.png或.gif等。这一功能的实现涉及到Java的图像处理API,如javax....
它结合了E语言简单易学的特点与记事本软件实用性,为编程初学者提供了一个理想的学习平台,帮助他们从入门到实践,再到创新,一步步成长为真正的程序员。通过这个项目,学习者可以感受到编程的魅力,享受到创造的...
无需培训,即可快速上手,更方便于用户查看或编辑文本文件,提高工作效率,轻轻松松完成日常记事本功能,真正做到简单全面实用。是用户实现记事本功能的好帮手。 狂龙超级记事本的安装 把下载好的安装包解压...
然而,真正的编程艺术在于不断改进和优化,你可以进一步完善程序,比如添加自动换行、高亮显示代码、支持多种编码格式等功能,让自己的记事本更加实用和个性化。 总之,制作一个C#记事本不仅能够加深对C#编程的理解...
已经将替换系统记事本的脚本做成注册表文件,这种通过注册表拦截替换的方法,不需要真正替换系统文件夹中的Notepad程序,使用极其方便。如果想完美接管系统自带的傻瓜记事本,请将Notepad2_CN文件夹解压到D:\Program...
加密记事本源码是针对初学者设计的一个项目,它主要使用了Delphi 7编程环境,这是一种基于Object Pascal的集成开发环境(IDE...记住,学习源码不仅要看代码,还要理解背后的逻辑和设计决策,这样才能真正提升编程技能。
Delphi编写的功能强大的记事本程序源代码,功能上要比真正的记事本更强大,特别是文字编辑处理功能,包括很多记事本没有的功能,当然本程序是以系统的写字板程序为原型而编写的,在界面上使用了控制来美化,如果不...
在本次的课程设计中,我们将聚焦于开发基于C#的软件应用,包括一个浏览器、一个媒体播放器以及一个记事本程序。...在实践中,学生将不断遇到问题并解决问题,从而真正掌握所学知识,为未来的职业生涯打下坚实基础。
HTML和CSS用于构建页面布局和样式,使记事本看起来更像一个真正的应用程序。可能包含一个按钮来触发保存操作,以及一个区域显示已存储的文本。 8. **文件命名与路径管理**: 提供的"message"可能是文件名,表明...
同时,软件支持云同步,用户可以在不同设备之间无缝切换,随时随地访问和编辑记事,实现真正的移动办公。 eDiary-3.2这个版本可能包含了软件的最新优化和改进,可能包括性能提升、新功能添加或是已知问题的修复。...