java 桌面_java图形界面写个小桌面,内置简单小软件

packagecom.swing;importjava.awt.Desktop;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JInternalFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;/*** 简易笔记本

*@authormay

**/

public class Notepad extendsJInternalFrame {private static final long serialVersionUID = -6148113299360403243L;private JMenuBar menuBar = null;//菜单栏

private JTextArea textArea = null;//输入框

private JScrollPane scrollPane = null;//带滚动条的面板

private MyAction myAction = new MyAction();//事件对象

private String dir = null;//保存打开过或者保存过文件的文件夹

private String fileDir = null;//保存你打开文件的文件夹

private boolean ctrlClick = false;//用于检测当前,你是否按下了Ctrl键

private boolean sClick = false;//用于检测当前,你是否按下了s键

publicNotepad() {super("notepad");this.setSize(600, 500);//窗口的大小

menuBar = new JMenuBar();//创建菜单栏

JMenu menu1 = new JMenu("文件");//创建菜单

JMenuItem menuItem2 = new JMenuItem("打开");//创建菜单项

JMenuItem menuItem4 = new JMenuItem("保存");//创建菜单项

menuItem4.addActionListener(myAction);//绑定事件

menuItem2.addActionListener(myAction);//绑定事件

JMenuItem menuItem3 = new JMenuItem("打开文件所在目录");

menuItem3.addActionListener(myAction);

menu1.add(menuItem2);

menu1.add(menuItem3);

menu1.add(menuItem4);

JMenu menu2= new JMenu("版本信息");

menu2.addMouseListener(newMouseAdapter() {

@Overridepublic voidmouseClicked(MouseEvent e) {//定义弹窗后的按钮的文字

String[] options = {"确定"};//创建一个弹窗

JOptionPane.showOptionDialog(Notepad.this, "version:0.1-snapshoot", "关于", JOptionPane.OK_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, "确定");

}

});

menuBar.add(menu1);

menuBar.add(menu2);this.setJMenuBar(menuBar);

textArea= newJTextArea();//添加键盘检测事件

textArea.addKeyListener(newkeyOption());//this.getContentPane().add(menuBar, BorderLayout.NORTH);//设置字体

textArea.setFont(new Font("微软雅黑", Font.PLAIN, 18));

scrollPane= newJScrollPane(textArea);//当文本水平溢出时出现滚动条

scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);//当文本垂直溢出时出现滚动条

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);this.getContentPane().add(scrollPane);//居中显示//this.setLocationRelativeTo(null);//最小化

this.setIconifiable(true);//可关闭

this.setClosable(true);//可改变大小

this.setResizable(true);//销毁窗口

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.setVisible(true);

}/*** 打开文件选择和保存对话框

*@paramflag*/

public voidopenChooseDialog(String flag) {

BufferedReader reader= null;

JFileChooser fileChooser= newJFileChooser();if(dir != null) {//定位上次打开和保存过文件的位置

fileChooser.setCurrentDirectory(newFile(dir));

}switch(flag) {case "打开"://指定它的父窗口

fileChooser.showOpenDialog(Notepad.this);//定义文件选择模式

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

File file=fileChooser.getSelectedFile();if(file != null) {try{//得到选择文件的路径

dir =file.getAbsolutePath();

fileDir=dir;

dir= dir.substring(0, dir.lastIndexOf("\\") + 1);

reader= new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));

String str=reader.readLine();

textArea.setText("");//读取文件内容

while(str != null) {

textArea.append(str+ "\n");

str=reader.readLine();

}

}catch(Exception ex) {

ex.printStackTrace();

}finally{if(reader != null) {try{

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}break;case "保存"://打开保存文件的对话框

fileChooser.showSaveDialog(Notepad.this);//得到保存文件后的文件对象

File saveFile =fileChooser.getSelectedFile();if(saveFile != null) {//得到保存文件的路径

String absolutePath =saveFile.getAbsolutePath();

fileDir=absolutePath;

FileOutputStream out= null;

BufferedWriter buffOut= null;

dir= absolutePath.substring(0, absolutePath.lastIndexOf("\\") + 1);//保存文件

try{

out= newFileOutputStream(absolutePath);

buffOut= new BufferedWriter(newOutputStreamWriter(out));

String text=textArea.getText();if(text != null) {

buffOut.write(text);

}

buffOut.flush();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if(out != null) {

out.close();

}if(buffOut != null) {

buffOut.close();

}

}catch(IOException e1) {

e1.printStackTrace();

}

}

}break;case "打开文件所在目录":if(dir != null) {try{//打开文件目录

Desktop.getDesktop().open(newFile(dir));

}catch(IOException e) {

e.printStackTrace();

}

}break;

}

}/*** 事件监听类

*@authormay

**/

private class MyAction implementsActionListener {

@Overridepublic voidactionPerformed(ActionEvent e) {

JMenuItem item=(JMenuItem) e.getSource();

String flag=item.getText();switch(flag) {case "打开":

openChooseDialog(flag);break;case "保存":

openChooseDialog(flag);break;case "打开文件所在目录":

openChooseDialog(flag);break;

}

}

}/*** 键盘监听内部类

*@authormay

**/

private class keyOption extendsKeyAdapter {

@Overridepublic voidkeyPressed(KeyEvent e) {int keyCode =e.getKeyCode();if(17 ==keyCode) {

ctrlClick= true;

}else if(83 ==keyCode) {

sClick= true;

}//判断Ctrl与s键是否按下,按下就开始保存

if(ctrlClick &&sClick) {

FileOutputStream out= null;

BufferedWriter buffOut= null;try{if(fileDir != null) {

out= newFileOutputStream(fileDir);

buffOut= new BufferedWriter(newOutputStreamWriter(out));

String text=textArea.getText();if(text != null) {

buffOut.write(text);

}

buffOut.flush();

}else{

openChooseDialog("保存");

}

}catch(Exception ex) {

ex.printStackTrace();

}finally{try{if(out != null) {

out.close();

}if(buffOut != null) {

buffOut.close();

}

}catch(IOException e1) {

e1.printStackTrace();

}

}

}

}

@Overridepublic voidkeyReleased(KeyEvent e) {int keyCode =e.getKeyCode();if(17 ==keyCode) {

ctrlClick= false;

}else if(83 ==keyCode) {

sClick= false;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值