📄 mymemo.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MyMemo extends JFrame implements ActionListener{
MyMenuBar mb = new MyMenuBar();
JTextArea editor = new JTextArea();
MyFile mf = new MyFile(this);
MyFindDialog mfD = new MyFindDialog(this,editor);
public MyMemo(String title){
super(title);
this.setMenuBar(mb);
mb.addMenus();
mb.addMenuItems();
for(int i=0;i<mb.getMenuCount();i++){
for(int j=0;j<mb.getMenu(i).getItemCount();j++){
mb.getMenu(i).getItem(j).addActionListener(this);
}
}
this.add(editor);
this.setBounds(400,200,300,300);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
String selected = e.getActionCommand();
if(selected == "新建"){
editor.setText("");
}
else if(selected=="打开"){
editor.setText(mf.getData());
}
else if(selected=="保存"){
mf.setData(editor.getText());
}
else if(selected == "退出"){
this.dispose();
}
else if(selected == "查找"){
mfD.showFind();//显示对话框的上半部分
}
else if(selected=="查找替换"){
mfD.showReplace();//显示对话框的全部
}
}
public static void main(String[] args){
new MyMemo("我的记事本");
}
}
class MyMenuBar extends MenuBar {
String[] menus={"文件","编辑","查找","帮助"};
String[][] items={{"新建","打开","保存",null,"退出"},{"剪贴","复制","粘贴","清除",null,"全选"}
,{"查找",null,"查找替换"},{"信息"}};
/*public MyMenuBar(JFrame parent){
parent.setMenuBar(this);
}*/
public void addMenus(){
for(int i=0;i<menus.length;i++){
this.add(new Menu(menus[i]));
}
}
public void addMenuItems(){
for(int i=0;i<this.getMenuCount();i++){
for(int j=0;j<items[i].length;j++){
if(items[i][j]==null){
getMenu(i).addSeparator();
}
else this.getMenu(i).add(items[i][j]);
}
}
}
}
class MyFile extends FileDialog{
public MyFile(Frame parent){
super(parent);
}
//返回所选中的文件路径
private String getPath(){
return this.getDirectory()+"\\"+this.getFile();
}
//返回所选的文件内容,以字符串的形式
public String getData(){
String line;
StringBuffer sb = new StringBuffer();
this.setTitle("打开");
this.setMode(FileDialog.LOAD);
this.setVisible(true);
try{
BufferedReader br =
new BufferedReader(new FileReader(getPath()));
while((line = br.readLine())!=null){
sb.append(line+'\n');}
br.close();
}catch(IOException e){
e.printStackTrace();
}
return sb.toString();
}
//将data存入所选的文件中
public void setData(String data){
this.setTitle("保存");
this.setMode(FileDialog.SAVE);
this.setVisible(true);
try{
BufferedWriter bw =
new BufferedWriter(new FileWriter(getPath()));
bw.write(data);
bw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
class MyFindDialog extends Dialog implements ActionListener{
JTextArea jta ;
private Label lFind=new Label("待查字符串:");
private Label lReplace=new Label("替换字符串:");
private TextField tFind=new TextField(10);
private TextField tReplace=new TextField(10);
private Button bFind=new Button("查找");
private Button bReplace=new Button("替换");
public MyFindDialog(MyMemo owner,JTextArea jta){
super(owner,"",false);
this.jta = jta;
setLayout(null);
lFind.setBounds(10,30,80,20);
lReplace.setBounds(10,70,80,20);
tFind.setBounds(90,30,90,20);
tReplace.setBounds(90,70,90,20);
bFind.setBounds(190,30,80,20);
bReplace.setBounds(190,70,80,20);
add(lFind); add(tFind); add(bFind); add(lReplace);
add(tReplace); add(bReplace);
setResizable(false);
bFind.addActionListener(this);
bReplace.addActionListener(this);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
MyFindDialog.this.dispose();
}
});
}//11ab11ab11
private void find(){
jta.requestFocus();
String text = jta.getText();
String str = tFind.getText();
int textL = text.length();
int strL = str.length();
int start = jta.getSelectionEnd();
if(start==textL){
start =0 ;
}
for( ;start<=textL-strL;start++){
String s = text.substring(start,start+strL);
if(s.equals(str)){
//jta.setSelectionColor(Color.red);
jta.setSelectionStart(start);
jta.setSelectionEnd(start+strL);
return ;
}
}
jta.setSelectionStart(textL);
jta.setSelectionEnd(textL);
}
private void replace(){
find();
if(jta.getSelectedText()!=null){
String s = tReplace.getText();
jta.replaceRange(s,jta.getSelectionStart()
,jta.getSelectionEnd());
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == bFind){
this.find();
}
else this.replace();
}
//查找 显示上半边
public void showFind(){
this.setTitle("查找");
this.setBounds(400,400,280,60);
this.setVisible(true);
}
public void showReplace(){
this.setTitle("查找替换");
this.setBounds(400,400,280,100);
this.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -