import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.lang.*;
import javax.swing.*;
class wenben extends JFrame{
private final Color colorvalues[]= {Color.black,Color.blue,Color.red,Color.green};//定义颜色数组
String styleNames[]= {"Bold","Italic"};//定义风格数组
String fontNames[]= {"宋体","华文行楷","隶书"};//定义字体数组
String[] sizeString=new String[30];//字号数组
int[] size=new int[30];//与字号数组对应的字号整数,用于设置文字大小
private JRadioButtonMenuItem colorItems[],fonts[];
private JCheckBoxMenuItem styleItem[];
private JTextArea displayText;//定义文本编辑区
private ButtonGroup fontGroup,colorGroup;//字体组和字色组
private int style;//字体风格
private JScrollPane scroll;//为文本编辑区提供滚动条
private String selectText="";//存放文本编辑区中选中的文本内容
private JComboBox styleBox,fontBox,sizeBox;//工具栏
private JPanel toolPanel;//存放工具栏
private int rowNumber=0;
private FileDialog fd=new FileDialog(this);
//GUI
public wenben () {
super("记事本");
//创建菜单条
JMenuBar bar=new JMenuBar();
setJMenuBar(bar);
//设置文件菜单及其菜单项
JMenu fileMenu=new JMenu("文件");
fileMenu.setMnemonic('F');
//设置新建菜单项
JMenuItem newItem=new JMenuItem("新建");
newItem.setMnemonic('N');
fileMenu.add(newItem);
newItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event)
{
displayText.setText("");
}
});
//设置打开菜单项
JMenuItem openItem=new JMenuItem("打开");
openItem.setMnemonic('O');
fileMenu.add(openItem);
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fd.setTitle("打开");//设置标题
fd.show();
if(fd.getFile()!=null) {
File file=new File(fd.getFile());//用从fd中取得的文件建立新文件
displayText.setText("");
try {
FileReader f=new FileReader(file);
BufferedReader b=new BufferedReader(f);//按行读打开的文件,然后传入文本域
String s;
try {
while((s=b.readLine())!=null) {
displayText.append(s+"\n");
}
f.close();
b.close();
}
catch(IOException ex) {}
}catch(FileNotFoundException ex) {}
}
else {return;}
}
});
fileMenu.addSeparator();//加分隔线
//设置保存菜单项
JMenuItem saveItem=new JMenuItem("保存");
saveItem.setMnemonic('S');
fileMenu.add(saveItem);
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fd.setFile("*.txt");
fd.setMode(FileDialog.SAVE);
fd.setTitle("保存");
fd.show();
if(fd.getFile()!=null) {
File file=new File(fd.getFile());
try {
PrintWriter pw=new PrintWriter(file);
pw.print(displayText.getText());
pw.flush();
pw.close();
}
catch(FileNotFoundException ex) {
ex.printStackTrace();
}
}
else {return;}
}
});
//设置另存为菜单项
JMenuItem saveAsItem=new JMenuItem("另存为");
saveAsItem.setMnemonic('Z');
fileMenu.add(saveAsItem);
saveAsItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fd.setFile("*.java");
fd.setMode(FileDialog.SAVE);
fd.setTitle("另存为");
fd.show();
if(fd.getFile()!=null) {
File file=new File(fd.getFile());
try {
PrintWriter pw=new PrintWriter(file);
pw.print(displayText.getText());
pw.flush();
pw.close();
}
catch(FileNotFoundException ex) {
ex.printStackTrace();
}
}
else {return;}
}
});
fileMenu.addSeparator();
//设置退出菜单项
JMenuItem exitItem=new JMenuItem("退出");
exitItem.setMnemonic('X');
fileMenu.add(exitItem);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
bar.add(fileMenu);
//创建编辑菜单及其菜单项
JMenu editMenu=new JMenu("编辑");
editMenu.setMnemonic('E');
//剪切菜单项
JMenuItem cutItem=new JMenuItem("剪切");
cutItem.setMnemonic('T');
editMenu.add(cutItem);
cutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
selectText=displayText.getSelectedText();//取得选定的文本
int start=displayText.getSelectionStart();
int end=displayText.getSelectionEnd();
displayText.replaceRange("", start, end);
}
});
//复制菜单项
JMenuItem copyItem=new JMenuItem("复制");
copyItem.setMnemonic('C');
editMenu.add(copyItem);
copyItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
selectText=displayText.getSelectedText();
}
});
//粘贴
JMenuItem pasteItem=new JMenuItem("粘贴");
pasteItem.setMnemonic('P');
editMenu.add(pasteItem);
pasteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int position=displayText.getCaretPosition();//获得鼠标当前位置
displayText.insert(selectText, position);//插入到鼠标当前位置
}
});
editMenu.addSeparator();
//替换
JMenuItem swapItem=new JMenuItem("替换");
swapItem.setMnemonic('R');
editMenu.add(swapItem);
swapItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JPanel swapPanel=new JPanel();
JLabel lookupLabel=new JLabel("要替换的内容");
JTextField inputText=new JTextField(10);
JLabel swapLabel=new JLabel("替换为");
JTextField changetoText=new JTextField(10);
swapPanel.add(lookupLabel);
swapPanel.add(inputText);
swapPanel.add(swapLabel);
swapPanel.add(changetoText);
JOptionPane.showMessageDialog(null,swapPanel);
String text=displayText.getText();//获取整个文本内容
String changeText=text.replaceFirst(inputText.getText(), changetoText.getText());
displayText.setText(changeText);
}
});
//全部替换的实现
JMenuItem aswapItem=new JMenuItem("全部替换");
aswapItem.setMnemonic('Q');
editMenu.add(aswapItem);
aswapItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JPanel swapPanel=new JPanel();
JLabel lookupLabel=new JLabel("要替换的内容");
JTextField inputText=new JTextField(10);
JLabel swapLabel=new JLabel("替换为");
JTextField changetoText=new JTextField(10);
swapPanel.add(lookupLabel );
swapPanel.add(inputText );
swapPanel.add(swapLabel );
swapPanel.add(changetoText );
JOptionPane.showMessageDialog(null, swapPanel);
String text=displayText.getText();
String changeText=text.replaceAll(inputText.getText(),changetoText.getText() );
displayText.setText(changeText);
}
});
editMenu.addSeparator();
//插入子菜单
JMenuItem insertItem=new JMenuItem("插入文本");
insertItem.setMnemonic('K');
editMenu.add(insertItem);
insertItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JPanel insertPanel=new JPanel();
JLabel insertLabel=new JLabel("要插入的内容");
JTextField inputText=new JTextField(10);
insertPanel.add(insertLabel);
insertPanel.add(inputText);
JOptionPane.showMessageDialog(null, insertPanel);
int fromIndex=displayText.getCaretPosition();
displayText.insert(inputText.getText(), fromIndex);
}
});
//删除子菜单
JMenuItem RemoveItem=new JMenuItem("删除");
RemoveItem.setMnemonic('G');
editMenu.add(RemoveItem);
RemoveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int start=displayText.getSelectionStart();
int end=displayText.getSelectionEnd();
displayText.replaceRange(null, start, end);
}
});
editMenu.addSeparator();
bar.add(editMenu);
//创建格式菜单及其菜单项
JMenu formatMenu=new JMenu("格式");
formatMenu.setMnemonic('R');
//自动换行的功能切换
JMenuItem changeItem=new JMenuItem("自动换行");
changeItem.setMnemonic('W');
formatMenu.add(changeItem);
changeItem.addActionListener(
new ActionListener() {
boolean var=false;
public void actionPerformed(ActionEvent event) {
if(var)var=false;
else var=true;
displayText.setLineWrap(var);
}
});
//颜色菜单项
String colors[]= {"黑","蓝","红","绿"};
JMenu colorMenu=new JMenu("颜色");
colorMenu.setMnemonic('C');
colorItems=new JRadioButtonMenuItem[colors.length];
colorGroup=new ButtonGroup();
ItemHandler itemHandler=new ItemHandler();
//创建颜色按钮监听器
for(int count=0;count<colors.length;count++) {
colorItems[count]=new JRadioButtonMenuItem(colors[count]);
colorMenu.add(colorItems[count]);
colorGroup.add(colorItems[count]);
colorItems[count].addActionListener((ActionListener) itemHandler);
}
//默认颜色
colorItems[0].setSelected(true);
//将颜色菜单项菜单加入菜单
formatMenu.add(colorMenu);
formatMenu.addSeparator();
//字体菜单项
JMenu fontMenu=new JMenu("字体");
fontMenu.setMnemonic('n');
fonts=new JRadioButtonMenuItem[fontNames.length];
fontGroup=new ButtonGroup();
//创建字体按钮监听器
for(int count=0;count<fonts.length;count++) {
fonts[count]=new JRadioButtonMenuItem(fontNames[count]);
fontMenu.add(fonts[count]);
fontGroup.add(fonts[count]);
fonts[count].addActionListener((ActionListener) itemHandler);
}
//默认字体
fonts[0].setSelected(true);
fontMenu.addSeparator();
//设置风格菜单
styleItem=new JCheckBoxMenuItem[styleNames.length];
for(int count=0;count<styleNames.length;count++) {
styleItem[count]=new JCheckBoxMenuItem(styleNames[count]);
fontMenu.add(styleItem[count]);
StyleHandler styleHandler=new StyleHandler();
styleItem[count].addItemListener(styleHandler);
}
formatMenu.add(fontMenu);
bar.add(formatMenu);
//创建查找菜单
JMenu searchMenu=new JMenu("查找");
searchMenu.setMnemonic('H');
//添加向前查找菜单项
JMenuItem frontItem=new JMenuItem("向前查找");
frontItem.setMnemonic('F');
searchMenu.add(frontItem);
frontItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JPanel swapPanel=new JPanel();
JLabel seekLabel=new JLabel("要查找的内容");
JTextField inputText=new JTextField(20);
swapPanel.add(seekLabel);
swapPanel.add(inputText);
JOptionPane.showMessageDialog(null, swapPanel);
String text=displayText.getText();//获得整个文本内容
int fromIndex=displayText.getCaretPosition();
int lastfromIndex=text.indexOf(inputText.getText(),fromIndex);
displayText.setCaretPosition(lastfromIndex);
displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串显示
}
});
//添加向后查找菜单项
JMenuItem backItem=new JMenuItem("向后查找");
backItem.setMnemonic('B');
searchMenu.add(backItem);
backItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JPanel swapPanel=new JPanel();
JLabel seekLabel=new JLabel("要查找的内容");
JTextField inputText=new JTextField(20);
swapPanel.add(seekLabel);
swapPanel.add(inputText);
JOptionPane.showMessageDialog(null, swapPanel);
String text=displayText.getText();
int fromIndex=displayText.getCaretPosition();
int lastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);
displayText.setCaretPosition(lastfromIndex);
displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());
}
});
bar.add(searchMenu);//添加
//创建帮助菜单
JMenu helpMenu=new JMenu("帮助");
helpMenu.setMnemonic('H');
//设置“关于”菜单项
JMenuItem aboutItem=new JMenuItem("关于");
aboutItem.setMnemonic('A');
helpMenu.add(aboutItem);
aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(wenben.this,"文本编辑器","关于",JOptionPane.PLAIN_MESSAGE);
rowNumber=displayText.getRows();
JOptionPane.showMessageDialog(null,""+rowNumber);
}
});
//添加帮助菜单项
JMenuItem helpItem=new JMenuItem("帮助主题");
helpItem.setMnemonic('H');
helpMenu.add(helpItem);
helpItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JTextArea helpText=new JTextArea("格式里的自动换行说明\n"+"复制粘贴可插入\n标题栏显示行数");
JScrollPane scroller=new JScrollPane(helpText);
JOptionPane.showMessageDialog(null,scroller);
}
});
bar.add(helpMenu);//添加
//设置字体选项面板
//初始化字体大小数组
for(int i=0;i<size.length;i++) {
sizeString[i]=""+(i+12)*2;
size[i]=(i+12)*2;
}
Container container=getContentPane();
container.setLayout(new BorderLayout());
toolPanel=new JPanel();
JLabel label1=new JLabel("字体名称");
toolPanel.add(label1);
fontBox=new JComboBox(fontNames);
fontBox.addItemListener(//事件处理
new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if(event.getStateChange()==ItemEvent.SELECTED) {
displayText.setFont(new Font(fontNames[fontBox.getSelectedIndex()],displayText.getFont().getStyle(),displayText.getFont().getSize()));
}
}
});
toolPanel.add(fontBox);//添加
JLabel label2=new JLabel("字体风格");
toolPanel.add(label2);
String style_name[]= {"常规","倾斜","粗体","倾斜加粗体"};
styleBox=new JComboBox(style_name);
styleBox.addItemListener(//事件处理
new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if(event.getStateChange()==ItemEvent.SELECTED) {
if(styleBox.getSelectedIndex()==0)style=Font.PLAIN;
if(styleBox.getSelectedIndex()==1)style=Font.ITALIC;
if(styleBox.getSelectedIndex()==2)style=Font.BOLD;
if(styleBox.getSelectedIndex()==3)style=Font.ITALIC+Font.BOLD;
displayText.setFont(new Font(displayText.getFont().getName(),style,displayText.getFont().getSize()));
}
}
}
);
toolPanel.add(styleBox);//将风格栏加入面板
JLabel label3=new JLabel("字号");
toolPanel.add(label3);
sizeBox=new JComboBox(sizeString);
sizeBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if(event.getStateChange()==ItemEvent.SELECTED) {
displayText.setFont(new Font(displayText.getFont().getName(),displayText.getFont().getStyle(),size[sizeBox.getSelectedIndex()]));
}
}
});
toolPanel.add(sizeBox);//将字号栏加入面板
container.add(toolPanel,BorderLayout.NORTH);
//设置面板显示文本
displayText=new JTextArea();
displayText.setForeground(colorvalues[0]);
displayText.setFont(new Font("Serif",Font.PLAIN,24));
scroll= new JScrollPane(displayText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
container.add(scroll,BorderLayout.CENTER);
displayText.addKeyListener(//通过对displayText注册键盘事件来获得当前文本的行数
new KeyListener() {
public void keyPressed(KeyEvent event) {
rowNumber=displayText.getLineCount();//获得文本区的函数
setTitle("共有"+rowNumber+"行");
}
public void keyReleased(KeyEvent event) {
}
public void keyTyped(KeyEvent event) {
}
});
setSize(700,500);
setVisible(true);
}
//主函数
public static void main(String[] args) {
wenben application=new wenben();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//字体和颜色监听器
private class ItemHandler implements ActionListener{
public void actionPerformed(ActionEvent event) {
//颜色
for(int count=0;count<colorItems.length;count++)
if(colorItems[count].isSelected()) {
displayText.setForeground(colorvalues[count]);
break;
}
//字体
for(int count=0;count<fonts.length;count++)
if(event.getSource()==fonts[count]) {
displayText.setFont(new Font(fonts[count].getText(),style,72));
break;
}
repaint();//系统后台调用了paint方法
}
}
private class StyleHandler implements ItemListener{
//处理字体风格选项
public void itemStateChanged(ItemEvent e) {
style=0;
if(styleItem[0].isSelected())
style+=Font.BOLD;
if(styleItem[1].isSelected())
style+=Font.ITALIC;
displayText.setFont(new Font(displayText.getFont().getName(),style,72));
repaint();
}
}
}
java文本编辑器-课程设计
最新推荐文章于 2024-08-12 11:21:47 发布