java 记事本_java仿windows记事本功能完整版

这是一个用Java编写的仿Windows记事本程序,具备新建、打开、保存、撤销、剪切、复制、粘贴、查找、替换等功能。用户可以设置字体、字号和样式,并支持自动换行。程序还包含了右键弹出菜单和快捷键操作。
摘要由CSDN通过智能技术生成

package org.mfy.notepad;

import java.awt.*;

import javax.swing.* ;

import java.awt.event.* ;

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import javax.swing.event.*;

import javax.swing.text.BadLocationException;

import javax.swing.undo.*;

public class MyNotepad extends JFrame{

//文件的标题

private String title = "无标题" ;

//菜单栏

private JPanel mp = new JPanel() ;

private JMenuBar mb = new JMenuBar() ;

private JMenu

file = new JMenu("文件(F)"),

edit = new JMenu("编辑(E)"),

format = new JMenu("格式(V)"),

view = new JMenu("查看(O)"),

help = new JMenu("帮助(H)");

//文件

private JMenuItem

newFile = new JMenuItem("新建(N)") ,

open = new JMenuItem("打开(O)") ,

save = new JMenuItem("保存(S)") ,

exit = new JMenuItem("退出(X)") ;

//编辑

private JMenuItem

undo = new JMenuItem("撤销(U)") ,

cut = new JMenuItem("剪切(T)") ,

copy = new JMenuItem("复制(C)") ,

paste = new JMenuItem("粘贴(P)") ,

delete = new JMenuItem("删除(L)") ,

find = new JMenuItem("查找(F)") ,

replace = new JMenuItem("替换(R)") ,

goTo = new JMenuItem("转到(G)") ,

selectAll = new JMenuItem("全选(A)") ,

time = new JMenuItem("时间/日期(D)") ;

//格式

private JMenuItem font = new JMenuItem("字体(F)") ;

private JCheckBox autoLineWrap = new JCheckBox("自动换行(W)") ;

//查看

private JMenuItem state = new JMenuItem("状态(S)") ;

//帮助

private JMenuItem

checkHelp = new JMenuItem("查看帮助(H)") ,

about = new JMenuItem("关于记事本(A)") ;

//文本域

private JTextArea txt = new JTextArea() ;

//弹出菜单

private JPopupMenu jpm = new JPopupMenu() ;

//定义弹出窗口的打开状态

private static boolean isOpen = false ;

//获取屏幕的尺寸

private int x = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() ;

private int y = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight() ;

public MyNotepad(){

//新建

newFile.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

String text = txt.getText() ;

if(!text.equals("")){

String str[] = text.split("\n") ;

int result = JOptionPane.showConfirmDialog(null, "是否将更改保存到 "+

title+"?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION) ;

if(result == JOptionPane.NO_OPTION){ //不保存

txt.setText("");

}else if(result == JOptionPane.CANCEL_OPTION){} //取消保存

else if(result == 0){ //保存

JFileChooser jfc = new JFileChooser() ;

jfc.setDialogTitle("保存");

int ssd = jfc.showSaveDialog(MyNotepad.this) ;

if(ssd == jfc.APPROVE_OPTION){

File file = jfc.getSelectedFile() ;

PrintStream out = null ;

try {

out = new PrintStream(new FileOutputStream(file)) ;

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

for(String s:str){

out.print(s + "\r\n");

}

out.close();

txt.setText(""); ;

}

}

}

}

});

//打开

open.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

JFileChooser jfc = new JFileChooser() ;

jfc.setDialogTitle("打开");

int result = jfc.showOpenDialog(MyNotepad.this) ;

if(result == JFileChooser.CANCEL_OPTION){}

else if(result == JFileChooser.APPROVE_OPTION){

File file = jfc.getSelectedFile() ;

BufferedReader input = null ;

try {

input = new BufferedReader(new InputStreamReader(new FileInputStream(file))) ;

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

String temp = null ;

try {

while((temp = input.readLine())!=null){

txt.append(temp +"\n");

}

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

input.close() ;

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

});

//保存

save.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

String str[] = txt.getText().split("\n") ;

JFileChooser jfc = new JFileChooser() ;

jfc.setDialogTitle("保存");

int ssd = jfc.showSaveDialog(MyNotepad.this) ;

if(ssd == jfc.APPROVE_OPTION){

File file = jfc.getSelectedFile() ;

PrintStream out = null ;

try {

out = new PrintStream(new FileOutputStream(file)) ;

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

for(String s:str){

out.print(s + "\r\n");

}

out.close();

}

}

});

//退出

exit.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

String str = txt.getText() ;

if(!str.equals("")){

int result = JOptionPane.showConfirmDialog(null, "退出前是否保存?", "退出",

JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) ;

if(result == JOptionPane.YES_OPTION){}

if(result == JOptionPane.NO_OPTION){

dispose() ;

}

if(result == JOptionPane.CANCEL_OPTION){}

}else{

dispose() ;

}

}

});

/**

* 撤销功能

*/

final UndoManager undom = new UndoManager() ;

txt.getDocument().addUndoableEditListener(new UndoableEditListener(){

@Override

public void undoableEditHappened(UndoableEditEvent e) {

undom.addEdit(e.getEdit()) ;

}

});

undo.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

if(undom.canUndo()){

undom.undo();

}

}

});

//剪切

cut.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

txt.cut() ;

}

});

//粘贴

paste.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

txt.paste();

}

});

//删除

delete.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int start = txt.getSelectionStart() ;

int end = txt.getSelectionEnd() ;

txt.replaceRange("", start, end);

}

});

/**

* 为了更好地访问本类中的属性,所以查找使用内部类

*/

//定义查找内部类

class FindDialog extends JDialog{

private JPanel pan = new JPanel() ;

private JLabel label = new JLabel("查找内容(N):") ;

private JTextField txtf = new JTextField(20) ;

private JButton btnf = new JButton("查找下一个(F)") ;

private JButton btnc = new JButton("取消") ;

private JCheckBox jcb = new JCheckBox("区分大小写(C)") ;

private JRadioButton jrb1 = new JRadioButton("向上(U)") ;

private JRadioButton jrb2 = new JRadioButton("向下(D)",true) ;

public FindDialog(){

super(MyNotepad.this, "查找") ;

//当文本框中有内容时按钮才起作用

txtf.getDocument().addDocumentListener(new DocumentListener(){

@Override

public void insertUpdate(DocumentEvent e) {

btnf.setEnabled(true);

}

@Override

public void removeUpdate(DocumentEvent e) {

if(txtf.getText().length() == 0){

btnf.setEnabled(false);

}

}

@Override

public void changedUpdate(DocumentEvent e) {

}

});

btnf.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

String str = txtf.getText() ;

String texta = txt.getText() ;

int start = 0 ;

int end = 0 ;

int caretPosition = txt.getCaretPosition() ; //记录光标的起始位置

if(jcb.isSelected()){ //区分大小写

if(jrb2.isSelected()){ //向下查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之后的位置开始查找

start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ;

start = texta.indexOf(str, start) ;

if(start == -1){ //如果没有找到

JOptionPane.showMessageDialog(null, "找不到"+str);

}else{ //如果找到了

end = start + str.length() ;

txt.select(start, end);

}

}else if(jrb1.isSelected()){ //向上查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之前的位置开始查找

end = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionStart()) ;

String subtext = texta.substring(0, end) ;

start = subtext.lastIndexOf(str, end-1) ;

if(start == -1){

JOptionPane.showMessageDialog(null, "找不到"+str) ;

}else{

end = start + str.length() ;

txt.select(start, end);

}

}

}

if(!jcb.isSelected()){ //不区分大小写

texta = texta.toLowerCase() ;

if(jrb2.isSelected()){ //向下查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之后的位置开始查找

start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ;

start = texta.indexOf(str.toLowerCase(), start) ;

if(start == -1){ //如果没有找到

JOptionPane.showMessageDialog(null, "找不到"+str) ;

}else{ //如果找到了

end = start + str.length() ;

txt.select(start, end);

}

}else if(jrb1.isSelected()){ //向上查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之前的位置开始查找

end = (txt.getSelectedText() == null ? caretPosition : txt.getSelectionStart()) ;

String subtext = texta.substring(0, end) ;

start = subtext.lastIndexOf(str.toLowerCase(), end-1) ;

if(start == -1){

JOptionPane.showMessageDialog(null, "找不到"+str) ;

}else{

end = start + str.length() ;

txt.select(start, end);

}

}

}

}

});

btnc.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

dispose() ;

isOpen = false ;

}

});

this.setLayout(null) ;

label.setBounds(12,10,80,20) ;

txtf.setBounds(100,10,170,20) ;

btnf.setBounds(280,10,90,20) ;

btnf.setMargin(new Insets(0, 0,0, 0)) ;

btnf.setEnabled(false); //初始化查找下一个按钮不可选

jcb.setBounds(12,70,110,20) ;

jrb1.setMargin(new Insets(0,0,0,0)) ;

jrb2.setMargin(new Insets(0,0,0,0)) ;

ButtonGroup group = new ButtonGroup() ;

group.add(jrb1);

group.add(jrb2);

pan.add(jrb1) ;

pan.add(jrb2) ;

pan.setBorder(BorderFactory.createTitledBorder("方向")) ;

pan.setBounds(120,40,150,55) ;

btnc.setBounds(280,40,90,20) ;

btnc.setMargin(new Insets(0,0,0,0)) ;

add(btnf) ;

add(label) ;

add(txtf) ;

add(jcb) ;

add(pan) ;

add(btnc) ;

setSize(380,130) ;

setLocation(x/2-190,y/2-65) ;

setResizable(false) ;

setVisible(true) ;

setDefaultCloseOperation(DISPOSE_ON_CLOSE) ;

//每次只能显示一个窗口

addWindowListener(new WindowAdapter(){

public void windowOpened(WindowEvent e){

isOpen = true ;

}

}) ;

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

isOpen = false ;

}

}) ;

}

}

//查找的监听事件

find.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(!isOpen){

new FindDialog() ;

}

}

});

//替换内部类

class ReplaceDialog extends JDialog{

private JLabel label1 = new JLabel("查找内容(N)") ;

private JLabel label2 = new JLabel("替换为(P)") ;

private JTextField field1 = new JTextField(20) ;

private JTextField field2 = new JTextField(20) ;

private JButton find = new JButton("查找下一个(F)") ;

private JButton replace = new JButton("替换(R)") ;

private JButton replaceAll = new JButton("全部替换(A)") ;

private JButton canc = new JButton("取消") ;

private JCheckBox jcb = new JCheckBox("区分大小写(C)") ;

public ReplaceDialog(){

super(MyNotepad.this,"查找") ;

this.setLayout(null) ;

label1.setBounds(12,5,80,20) ;

label2.setBounds(12,30,80,20) ;

field1.setBounds(100,5,170,20) ;

field2.setBounds(100,30,170,20) ;

find.setBounds(280,5,90,20) ;

find.setMargin(new Insets(0, 0,0, 0)) ;

replace.setBounds(280,30,90,20) ;

replace.setMargin(new Insets(0,0,0,0)) ;

replaceAll.setBounds(280,55,90,20) ;

replaceAll.setMargin(new Insets(0,0,0,0)) ;

jcb.setBounds(12,70,105,20) ;

jcb.setMargin(new Insets(0,0,0,0)) ;

canc.setBounds(280,80,90,20) ;

field1.getDocument().addDocumentListener(new DocumentListener(){

//当文本框中有内容时按钮才起作用

@Override

public void insertUpdate(DocumentEvent e) {

find.setEnabled(true);

replace.setEnabled(true);

replaceAll.setEnabled(true);

}

@Override

public void removeUpdate(DocumentEvent e) {

if(field1.getText().length() == 0){

find.setEnabled(false);

replace.setEnabled(false);

replaceAll.setEnabled(false);

}

}

@Override

public void changedUpdate(DocumentEvent e) {

}

});

//查找下一个按钮

find.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

new findFunction() ;

}

});

//替换按钮

replace.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

//如果有选中的内容就替换,然后选中下一个要替换的内容,否则先查找要替换的内容

if(txt.getSelectedText()!=null){

txt.replaceSelection(field2.getText());

}

new findFunction() ;

}

});

//替换所有按钮

replaceAll.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

String str = txt.getText() ;

if(jcb.isSelected()){

str = str.replaceAll(field1.getText(), field2.getText()) ;

}else{

str = str.replaceAll("(?i)" + field1.getText(), field2.getText()) ;

}

txt.setText(str);

}

});

//取消按钮

canc.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

dispose() ;

isOpen = false ;

}

});

add(label1) ;

add(label2) ;

add(field1) ;

add(field2) ;

find.setEnabled(false);

replace.setEnabled(false);

replaceAll.setEnabled(false);

add(find) ;

add(replace) ;

add(replaceAll) ;

add(jcb) ;

add(canc) ;

setSize(380,130) ;

setLocation(x/2-190,y/2-65) ;

setResizable(false) ;

setVisible(true) ;

setDefaultCloseOperation(DISPOSE_ON_CLOSE) ;

addWindowListener(new WindowAdapter(){

public void windowOpened(WindowEvent e){

isOpen = true ;

}

}) ;

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

isOpen = false ;

}

}) ;

}

//替换对话框中查找功能类

/**

* 为了简化代码,将替换对话框里面的查找功能提取出来,成为一个内部类

*/

class findFunction {

public findFunction(){ //要替换的字符串的位置

int start = 0 ;

int end = 0 ;

int caretPosition = txt.getCaretPosition() ;

String str = field1.getText() ;

String texta = txt.getText() ;

//区分大小写,向下查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之后的位置开始查找

if(jcb.isSelected()){

start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ;

start = texta.indexOf(str.toLowerCase(), start) ;

if(start == -1){ //如果没有找到

JOptionPane.showMessageDialog(null, "找不到"+str) ;

}else{ //如果找到了

end = start + str.length() ;

txt.select(start, end);

}

}else if(!jcb.isSelected()){ //不区分大小写

texta = texta.toLowerCase() ;

//向下查询,如果有光标就从光标的位置开始查找,否则就从选中的文本之后的位置开始查找

start = (txt.getSelectedText()==null ? caretPosition : txt.getSelectionEnd()) ;

start = texta.indexOf(str.toLowerCase(), start) ;

if(start == -1){ //如果没有找到

JOptionPane.showMessageDialog(null, "找不到"+str) ;

}else{ //如果找到了

end = start + str.length() ;

txt.select(start, end);

}

}

}

}

}

replace.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(!isOpen){

new ReplaceDialog() ;

}

}

});

//转到内部类

class GoToDialog extends JDialog{

private JLabel label = new JLabel("行号(L):") ;

private JTextField field = new JTextField() ;

private JButton goToBtn = new JButton("转到") ;

private JButton canBtn = new JButton("取消") ;

private int rowNum = 0 ;//行号

public GoToDialog(){

field.addKeyListener(new KeyAdapter(){

public void keyTyped(KeyEvent e){

if(!(e.getKeyChar()>='0' && e.getKeyChar()<='9' )){

e.consume();

}

}

});

//转到

goToBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

rowNum = Integer.parseInt(field.getText()) ;

if(rowNum>txt.getLineCount()){

JOptionPane.showMessageDialog(null, "行数超过了总行数", "记事本-跳行",JOptionPane.INFORMATION_MESSAGE);

field.setText(txt.getLineCount() +"") ;

field.requestFocus() ; //获取文本域的焦点

field.selectAll();

}else{

int position = 0 ;

try {

position = txt.getLineStartOffset(rowNum-1) ;

} catch (BadLocationException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

GoToDialog.this.dispose();

txt.requestFocus();

txt.setCaretPosition(position);

}

}

});

//取消

canBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

dispose() ;

isOpen = false ;

}

});

setLayout(null) ;

label.setBounds(12,10,100,20) ;

field.setBounds(12,30,230,20) ;

goToBtn.setBounds(85,65,75,20) ;

canBtn.setBounds(167,65,75,20) ;

add(label) ;

add(field) ;

add(goToBtn) ;

add(canBtn) ;

setTitle("转到指定行") ;

setModal(true) ; //当对话框弹出时母窗口不可编辑

setSize(270,130) ;

setLocation(x/2-135,y/2-65) ;

setResizable(false) ;

setVisible(true) ;

setDefaultCloseOperation(DISPOSE_ON_CLOSE) ;

addWindowListener(new WindowAdapter(){

public void windowOpened(WindowEvent e){

isOpen = true ;

}

}) ;

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

isOpen = false ;

}

}) ;

}

}

//转到

goTo.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(!isOpen){

new GoToDialog() ;

}

}

});

//全选

selectAll.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

txt.requestFocus();

txt.selectAll() ;

}

});

time.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

String dateTime = null ;

int pos = txt.getCaretPosition() ;

dateTime = new SimpleDateFormat("hh:mm yyyy/MM/dd").format(new Date()) ;

txt.insert(dateTime, pos);

}

});

//自动换行

autoLineWrap.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(autoLineWrap.isSelected()){

txt.setLineWrap(true);

}else{

txt.setLineWrap(false);

}

}

});

//字体内部类

class FontDialog extends JDialog{

private JLabel label1 = new JLabel("字体(F):") ;

private JLabel label2 = new JLabel("字形(Y):") ;

private JLabel label3 = new JLabel("大小(S):") ;

private JLabel instns = new JLabel("中文示例AaBaCc",JLabel.CENTER) ;

private JTextField field1 = new JTextField() ;

private JTextField field2 = new JTextField() ;

private JTextField field3 = new JTextField() ;

private String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames() ;

private JScrollPane scr1 = new JScrollPane() ;

private JScrollPane scr2 = new JScrollPane() ;

private JScrollPane scr3 = new JScrollPane() ;

private JList fontList = null ;

private JList fStyleList = null ;

private JList fSizeList = null ;

private JButton okBtn = new JButton("确定") ;

private JButton cancBtn = new JButton("取消") ;

//示例的显示

private String selectedFont = "Fixedsys";

private int selectedStyle = Font.PLAIN;

private float selectedSize = 16;

public FontDialog() {

fontList = new JList(fonts) ;

//fontStyle

String style[] = {"常规","倾斜","粗体","倾斜 粗体"} ;

fStyleList = new JList(style) ;

//fontSize

String size[] = {"8","9","10","11","12","14","16","18","20","22","24",

"26","28","36","48","72","初号","小号","一号","小一","二号",

"小二","三号","小三","四号","小四","五号","六号","小六","七号","八号"} ;

fSizeList = new JList(size) ;

//Jlist中一次只能选择一个选项

fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ;

fStyleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ;

fSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ;

scr1.add(fontList) ;

scr2.add(fStyleList) ;

scr3.add(fSizeList) ;

scr1.setViewportView(fontList);

scr2.setViewportView(fStyleList);

scr3.setViewportView(fSizeList);

okBtn.setBounds(250,450,80,30) ;

cancBtn.setBounds(340,450,80,30) ;

label1.setBounds(20,20,50,20) ;

label2.setBounds(205,20,50,20) ;

label3.setBounds(350,20,50,20) ;

instns.setBounds(205,280,215,80) ;

instns.setBorder(BorderFactory.createTitledBorder("示例")) ;

field1.setBounds(20,40,170,20) ;

field2.setBounds(205,40,130,20) ;

field3.setBounds(350,40,70,20) ;

scr1.setBounds(20,60,170,170) ;

scr2.setBounds(205,60,130,170) ;

scr3.setBounds(350,60,70,150) ;

scr1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ;

scr2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ;

scr3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) ;

//文本框1

field1.addKeyListener(new KeyAdapter(){

public void keyTyped(KeyEvent e){

int count = 0 ; //文本框中的字符数

String str = null ; //保存输入到文本框中的字符

int size = fontList.getModel().getSize() ; //fontList中的文本个数

str = field1.getText()+e.getKeyChar()+"" ;

count = str.length() ;

for(int i=0; i=count){

//判断输入的是否与JList中的内容部分匹配(忽略大小写)

if(fontList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){

fontList.ensureIndexIsVisible(size-i>=10 ? i+9 : size-1);

if(fontList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){

fontList.setSelectedIndex(i);

}

break ;

}

else{

fontList.ensureIndexIsVisible(0);

fontList.clearSelection();

}

}

}

}

});

//文本框2

field2.addKeyListener(new KeyAdapter(){

public void keyTyped(KeyEvent e){

int count = 0 ; //文本框中的字符数

String str = null ; //保存输入到文本框中的字符

int size = fStyleList.getModel().getSize() ; //fontList中的文本个数

str = field2.getText()+e.getKeyChar()+"" ;

count = str.length() ;

for(int i=0; i=count){

//判断输入的是否与JList中的内容部分匹配(忽略大小写)

if(fStyleList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){

if(fStyleList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){

fStyleList.setSelectedIndex(i);

}

break ;

}

else{

fStyleList.clearSelection();

}

}

}

}

});

//文本框3

field3.addKeyListener(new KeyAdapter(){

public void keyTyped(KeyEvent e){

int count = 0 ; //文本框中的字符数

String str = null ; //保存输入到文本框中的字符

int size = fSizeList.getModel().getSize() ; //fontList中的文本个数

str = field3.getText()+e.getKeyChar()+"" ;

count = str.length() ;

for(int i=0; i=count){

//判断输入的是否与JList中的内容部分匹配(忽略大小写)

if(fSizeList.getModel().getElementAt(i).substring(0, count).compareToIgnoreCase(str)==0){

fSizeList.ensureIndexIsVisible(size-i>=9 ? i+8 : size-1);

if(fSizeList.getModel().getElementAt(i).compareToIgnoreCase(str)==0){

fSizeList.setSelectedIndex(i);

}

break ;

}

else{

fSizeList.ensureIndexIsVisible(0);

fSizeList.clearSelection();

}

}

}

}

});

//设置示例中的文本字体样式

//设置字形与字号对照表

final Map map = new HashMap() ;

map.put("常规", (float) Font.PLAIN) ;

map.put("倾斜", (float) Font.ITALIC) ;

map.put("粗体", (float) Font.BOLD) ;

map.put("倾斜 粗体", (float) (Font.ITALIC+Font.BOLD)) ;

map.put("初号", 42f) ;

map.put("小号", 36f) ;

map.put("一号", 26f) ;

map.put("小一", 24f) ;

map.put("二号", 22f) ;

map.put("小二", 18f) ;

map.put("三号", 16f) ;

map.put("小三", 15f) ;

map.put("四号", 14f) ;

map.put("小四", 12f) ;

map.put("五号", 10.5f) ;

map.put("六号", 7.5f) ;

map.put("小六", 6.5f) ;

map.put("七号", 5.5f) ;

map.put("八号", 5f) ;

//字体列表监听事件

fontList.addListSelectionListener(new ListSelectionListener(){

@Override

public void valueChanged(ListSelectionEvent e) {

String txtFont = txt.getFont().getName() ; //获取文本中的字体

selectedFont = fontList.isSelectionEmpty() ? txtFont :fontList.getSelectedValue() ;

instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize));

}

}) ;

//字体样式监听事件

fStyleList.addListSelectionListener(new ListSelectionListener(){

@Override

public void valueChanged(ListSelectionEvent e) {

int txtStyle = txt.getFont().getStyle() ; //获取文本中的字体

selectedStyle = (int) (fStyleList.isSelectionEmpty() ? txtStyle :map.get(fStyleList.getSelectedValue())) ;

instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize));

}

}) ;

//字体大小监听

fSizeList.addListSelectionListener(new ListSelectionListener(){

public void valueChanged(ListSelectionEvent e){

int txtSize = txt.getFont().getSize() ;

if(!fSizeList.isSelectionEmpty()){

String temp = fSizeList.getSelectedValue() ;

if(temp.matches("\\d+")){

selectedSize = Integer.parseInt(temp) ;

}else{

selectedSize = map.get(fSizeList.getSelectedValue()) ;

}

}

instns.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize));

}

});

//确定按钮

okBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

txt.setFont(new Font(selectedFont,selectedStyle,(int)selectedSize));

isOpen = false ;

dispose() ;

}

});

//取消按钮

cancBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

dispose() ;

isOpen = false ;

}

});

/*class MyRender extends DefaultListCellRenderer{

public Component getListCellRendererComponent(JList> list, Object value,

int index, boolean isSelected,

boolean cellHasFocus){

String font = value.toString() ;

setFont(new Font(font,Font.PLAIN,12)) ;

return this ;

}

}*/

setLayout(null) ;

add(label1) ;

add(label2) ;

add(label3) ;

add(instns) ;

add(field1) ;

add(field2) ;

add(field3) ;

add(scr1) ;

add(scr2) ;

add(scr3) ;

add(okBtn) ;

add(cancBtn) ;

setModal(true) ; //当对话框弹出时母窗口不可编辑

setSize(440,530) ;

setLocation(x/2-220,y/2-265) ;

setResizable(false) ;

setVisible(true) ;

setDefaultCloseOperation(DISPOSE_ON_CLOSE) ;

addWindowListener(new WindowAdapter(){

public void windowOpened(WindowEvent e){

isOpen = true ;

}

}) ;

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

isOpen = false ;

}

}) ;

}

}

//字体

font.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(!isOpen){

new FontDialog() ;

}

}

});

//查看帮助

checkHelp.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

JOptionPane.showMessageDialog(null, "与Windows系统下的帮助相似", "帮助", JOptionPane.CLOSED_OPTION);

}

});

//关于

about.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

JOptionPane.showMessageDialog(null, "仿Windows记事本,初学Java的练手作品", "关于", JOptionPane.CLOSED_OPTION);

}

});

//右键弹出菜单内部类

class popupListener extends MouseAdapter{

private JPopupMenu popup = null ;

public popupListener(JPopupMenu popup){

this.popup = popup ;

}

public void mouseReleased(MouseEvent e){

showPopupMenu(e) ;

}

public void mouseClicked(MouseEvent e){

showPopupMenu(e) ;

}

private void showPopupMenu(MouseEvent e) {

if (e.isPopupTrigger()) {

//右键弹出菜单

jpm.add(undo) ;

jpm.add(cut) ;

jpm.add(copy) ;

jpm.add(delete) ;

jpm.add(find) ;

jpm.add(replace) ;

jpm.add(goTo) ;

jpm.add(selectAll) ;

jpm.add(time) ;

popup.show(e.getComponent(), e.getX(), e.getY());

}

}

}

//右键弹出菜单

txt.addMouseListener(new popupListener(jpm)) ;

//设置快捷键

newFile.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.event.InputEvent.CTRL_DOWN_MASK));

open.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.event.InputEvent.CTRL_DOWN_MASK));

save.setAccelerator(KeyStroke.getKeyStroke('S',java.awt.event.InputEvent.CTRL_DOWN_MASK));

undo.setAccelerator(KeyStroke.getKeyStroke('Z',java.awt.event.InputEvent.CTRL_DOWN_MASK));

cut.setAccelerator(KeyStroke.getKeyStroke('X',java.awt.event.InputEvent.CTRL_DOWN_MASK));

copy.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.event.InputEvent.CTRL_DOWN_MASK));

paste.setAccelerator(KeyStroke.getKeyStroke('V',java.awt.event.InputEvent.CTRL_DOWN_MASK));

find.setAccelerator(KeyStroke.getKeyStroke('F',java.awt.event.InputEvent.CTRL_DOWN_MASK));

replace.setAccelerator(KeyStroke.getKeyStroke('H',java.awt.event.InputEvent.CTRL_DOWN_MASK));

goTo.setAccelerator(KeyStroke.getKeyStroke('G',java.awt.event.InputEvent.CTRL_DOWN_MASK));

selectAll.setAccelerator(KeyStroke.getKeyStroke('A',java.awt.event.InputEvent.CTRL_DOWN_MASK));

time.setAccelerator((KeyStroke) KeyStroke.getAWTKeyStroke((char) KeyEvent.VK_F5));

//设置助记键

file.setMnemonic('F');

edit.setMnemonic('E');

format.setMnemonic('O');

view.setMnemonic('V');

help.setMnemonic('H');

newFile.setMnemonic('N');

open.setMnemonic('O');

save.setMnemonic('S');

exit.setMnemonic('X');

undo.setMnemonic('U');

cut.setMnemonic('T');

copy.setMnemonic('C');

paste.setMnemonic('P');

delete.setMnemonic('L');

find.setMnemonic('F');

replace.setMnemonic('R');

goTo.setMnemonic('G');

selectAll.setMnemonic('A');

time.setMnemonic('D');

font.setMnemonic('F');

autoLineWrap.setMnemonic('W');

state.setMnemonic('S');

checkHelp.setMnemonic('H');

about.setMnemonic('A');

txt.setFont(new Font("Fixedsys",Font.PLAIN,16));

txt.setEditable(true);

file.add(newFile) ;

file.add(open) ;

file.add(save) ;

file.addSeparator();

file.add(exit) ;

edit.add(undo) ;

edit.addSeparator();

edit.add(cut) ;

edit.add(copy) ;

edit.add(paste) ;

edit.add(delete) ;

edit.addSeparator();

edit.add(find) ;

edit.add(replace) ;

edit.add(goTo) ;

edit.addSeparator();

edit.add(selectAll) ;

edit.add(time) ;

format.add(autoLineWrap) ;

format.add(font) ;

view.add(state) ;

help.add(checkHelp) ;

help.addSeparator();

help.add(about) ;

mb.add(file) ;

mb.add(edit) ;

mb.add(format) ;

mb.add(view) ;

mb.add(help) ;

setJMenuBar(mb) ;

add(mp) ;

add(new JScrollPane(txt)) ;

setVisible(true) ;

setSize(530,640) ;

setLocation(x/2-265,y/2-320);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值