黑马程序员——GUI:对前一篇博客中文件浏览器的修改

来源:互联网 发布:淘宝卖家说给补偿5元 编辑:程序博客网 时间:2024/05/21 17:59
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.将提示信息加入到会话框,不再在文本区域

2.增加了键盘操作,使操作更加舒适

3.对代码结构做了小部分优化

package test.GUI;import java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class GUIDemo {private JFrame frame;private JButton button;private JButton button2;private JTextArea textArea;private JTextField textField;public void init() {frame = new JFrame("文件浏览器");button = new JButton("转到");button2 = new JButton("保存");textArea = new JTextArea(60, 60);JScrollPane jScrollBar1 = new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);textArea.setLineWrap(true);textField = new JTextField(30);textField.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubsuper.keyTyped(e);if(e.getKeyCode()==KeyEvent.VK_ENTER){showInTextArea();}}});frame.setBackground(Color.white);frame.setBounds(200, 200, 800, 600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(new FlowLayout());frame.getContentPane().add(textField);frame.getContentPane().add(button);frame.getContentPane().add(button2);frame.getContentPane().add(jScrollBar1);button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {showInTextArea();}});button2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String path = textField.getText();File file = new File(path);if (file.exists()) {if (path.endsWith(".txt")) {saveTxt(file);} else {addDialog("文件类型错误");}}else{addDialog("文件路径错误");}}});frame.setVisible(true);}public void showInTextArea() {textArea.setText("");String path = textField.getText();File file = new File(path);if (file.exists()) {if (file.isDirectory()) {showDirectory(file, 1);} else if (path.endsWith(".txt")) {showTxt(file);} else {addDialog("暂不支持打开该类型文件");}}else{addDialog("文件路径错误");}}public void showDirectory(File file, int level) {for (int i = 1; i < level; i++) {textArea.append("        |");}if (file.isDirectory()) {textArea.append("-----" + file.getName() + "\r\n");level++;File[] files = file.listFiles();for (File f : files) {showDirectory(f, level);}} else {textArea.append("-----" + file.getName() + "\r\n");}}public static void main(String[] args) {new GUIDemo().init();}public void showTxt(File file) {BufferedReader bufr = null;try {bufr = new BufferedReader(new InputStreamReader(new FileInputStream(file)));String str;while ((str = bufr.readLine()) != null) {textArea.append(str + "\r\n");}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (bufr != null)try {bufr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void saveTxt(File file){BufferedWriter bufw = null;try {bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));bufw.write(textArea.getText());} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(bufw!=null)try {bufw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void addDialog(String s){final JDialog dialog = new JDialog(frame, "错误提示", true);dialog.setLayout(new FlowLayout());JButton button = new JButton("确定");button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dialog.setVisible(false);}});button.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubsuper.keyPressed(e);if(e.getKeyCode()==KeyEvent.VK_ENTER){dialog.setVisible(false);}}});dialog.setBounds(500, 300, 400, 100);JLabel label = new JLabel(s);dialog.getContentPane().add(label);dialog.getContentPane().add(button);dialog.setVisible(true);}}

第三次修改:

1.打开和保存采用FileDialog类提供的方法

2.文件显示采用JTextArea ,用边界布局方式填充JFrame的JRootpane,这样改变JFrame就不会有空白部分,文件的写入和保存采用JTextArea的read()和writer()方式,利用流对象编写更加简洁

3.增加菜单,采用菜单操作的方式

<pre name="code" class="java">package test.GUI;import java.awt.BorderLayout;import java.awt.FileDialog;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.Reader;import java.io.Writer;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.ScrollPaneConstants;public class FileBrowserDemo {private JFrame frame;private JMenuBar menuBar;private JMenu fileMenu;private JMenuItem openItem;private JMenuItem saveItem;private JMenuItem osi;private JMenuItem exitItem;private JTextArea textArea;private JScrollPane scroll;private File file;public FileBrowserDemo() {init();event();}public void init() {frame = new JFrame("文件浏览器");menuBar = new JMenuBar();fileMenu = new JMenu("文件");openItem = new JMenuItem("打开");saveItem = new JMenuItem("保存");osi = new JMenuItem("另存为");exitItem = new JMenuItem("退出");textArea = new JTextArea();file = null;// 为textArea设置滚动条scroll = new JScrollPane(textArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);textArea.setWrapStyleWord(true);frame.setBounds(100, 100, 800, 600);/* * 问题:在拖动改变JFrame 大小的时候TextArea不会改变 * 解决方案:将JFrame的rootPane设置为边界布局管,然后加入TextArea的时候不设置方向 * ,这样TextArea就会填充满整个rootPane */frame.getContentPane().setLayout(new BorderLayout());frame.getContentPane().add(scroll);frame.setJMenuBar(menuBar);menuBar.add(fileMenu);fileMenu.add(openItem);fileMenu.add(saveItem);fileMenu.add(osi);fileMenu.add(exitItem);frame.setVisible(true);}public void event() {openItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {FileDialog openDia = new FileDialog(frame, "打开文件",FileDialog.LOAD);openDia.setVisible(true);file = new File(openDia.getDirectory() + openDia.getFile());if (file.exists()) {// 设置标题为文件名字frame.setTitle(openDia.getFile());Reader reader = null;try {reader = new InputStreamReader(new FileInputStream(file));textArea.read(reader, "");/* * String line; textArea.setText(""); while((line = * bufr.readLine())!=null){ * textArea.append(line+"\r\n"); } */} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} finally {try {if (reader != null)reader.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}}});saveItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (file != null &&file.exists()) {save(file);} else {FileDialog openDia = new FileDialog(frame, "保存文件",FileDialog.LOAD);openDia.setVisible(true);file = new File(openDia.getDirectory() + openDia.getFile());save(file);}}});osi.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {FileDialog openDia = new FileDialog(frame, "保存文件",FileDialog.LOAD);openDia.setVisible(true);file = new File(openDia.getDirectory() + openDia.getFile());save(file);}});exitItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});}public boolean save(File file) {if (file.exists()) {Writer writer = null;try {writer = new OutputStreamWriter(new FileOutputStream(file));textArea.write(writer);return true;} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} finally {try {if (writer != null)writer.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}return false;}public static void main(String[] args) {new FileBrowserDemo();}}



0 0