概念原理的理解,不代表能熟练应用。
如果将多个知识点关联并应用起来,这能加快我们对知识的掌握。
作为一个初学者,最快速的上手方式应该就是学以致用了。
下面做了一个小窗口,主要是为了综合应用java的一些基础功能,界面稍显随意。
界面:
具体功能以及代码:
1 /*具体实现功能: 2 * 1.根据地址栏的路径打开文本文件,显示在文本区域。 3 * 2.根据地址栏的网址获取网页源代码,显示在文本区域。 4 * 3.通过打开按钮打开本地文本文件,显示在文本区域。 5 * 4.通过保存按钮,把文本区域内容保存到本地。 6 * 7 * 应用到的知识点: 8 * 1.GUI; 9 * 2.IO; 10 * 3.net;*/ 11 12 import java.awt.FlowLayout; 13 import java.awt.event.ActionEvent; 14 import java.awt.event.ActionListener; 15 import java.awt.event.FocusAdapter; 16 import java.awt.event.FocusEvent; 17 import java.awt.event.KeyAdapter; 18 import java.awt.event.KeyEvent; 19 import java.awt.event.WindowAdapter; 20 import java.awt.event.WindowEvent; 21 import java.io.BufferedReader; 22 import java.io.BufferedWriter; 23 import java.io.File; 24 import java.io.FileNotFoundException; 25 import java.io.FileReader; 26 import java.io.FileWriter; 27 import java.io.IOException; 28 import java.io.InputStreamReader; 29 import java.net.MalformedURLException; 30 import java.net.URL; 31 import java.net.URLConnection; 32 33 import javax.swing.JButton; 34 import javax.swing.JDialog; 35 import javax.swing.JFileChooser; 36 import javax.swing.JFrame; 37 import javax.swing.JLabel; 38 import javax.swing.JScrollPane; 39 import javax.swing.JTextArea; 40 import javax.swing.JTextField; 41 import javax.swing.filechooser.FileFilter; 42 import javax.swing.filechooser.FileNameExtensionFilter; 43 import javax.swing.text.BadLocationException; 44 45 public class GUITest { 46 47 public static void main(String[] args) { 48 new GetGUI(); 49 50 } 51 52 } 53 54 //GUI界面设置。 55 class GetGUI{ 56 JFrame f; 57 JTextField tf; 58 JButton but; 59 JButton but1; 60 JButton but2; 61 JTextArea ta; 62 JScrollPane scroll; 63 64 JFileChooser JFC; 65 JDialog dia; 66 JLabel lab; 67 JButton okBut; 68 GetGUI(){ 69 f = new JFrame("多功能小窗口"); 70 tf = new JTextField("填写本地文本路径或网址(确认后请稍候...)",45); 71 but = new JButton("转到"); 72 but2 = new JButton("打开"); 73 but1 = new JButton("保存"); 74 ta = new JTextArea(23,50); 75 JFC = new JFileChooser(); 76 // 设置选择可选文件夹和文件。 77 JFC.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); 78 // 设置可选文件后缀名(过滤器)。 79 FileFilter filter = new FileNameExtensionFilter(".txt","txt"); 80 FileFilter filter1 = new FileNameExtensionFilter(".java","java"); 81 JFC.setFileFilter(filter); 82 JFC.setFileFilter(filter1); 83 84 dia = new JDialog(f,true); 85 lab = new JLabel(); 86 okBut = new JButton("ok"); 87 88 dia.add(lab); 89 dia.add(okBut); 90 dia.setBounds(350,150,500,100); 91 dia.setLayout(new FlowLayout()); 92 93 // 文本区域设置滚动条。 94 scroll = new JScrollPane(ta); 95 scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 96 scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 97 98 f.add(tf); 99 f.add(but); 100 f.add(but2); 101 f.add(but1); 102 f.add(scroll); 103 f.setBounds(300,100,600,550); 104 f.setLayout(new FlowLayout()); 105 f.setResizable(false); 106 setGUI(); 107 108 f.setVisible(true); 109 } 110 private void setGUI() { 111 okBut.addActionListener(new ActionListener() { 112 113 @Override 114 public void actionPerformed(ActionEvent e) { 115 dia.setVisible(false); 116 } 117 }); 118 119 dia.addWindowListener(new WindowAdapter() { 120 public void windowClosing(WindowEvent e){ 121 dia.setVisible(false); 122 } 123 }); 124 125 // 通过地址栏上回车键打开本地文件或网站的html源代码。 126 tf.addKeyListener(new KeyAdapter() { 127 public void keyPressed(KeyEvent e){ 128 if (e.getKeyCode()==KeyEvent.VK_ENTER) { 129 showContent(); 130 } 131 } 132 }); 133 134 tf.addFocusListener(new FocusAdapter() { 135 public void focusGained(FocusEvent e){ 136 tf.setText(null); 137 } 138 }); 139 140 // 通过“转到”按钮打开本地文本文件或网站的html源代码。 141 but.addActionListener(new ActionListener() { 142 public void actionPerformed(ActionEvent e) { 143 showContent(); 144 } 145 }); 146 147 // 通过“打开”按钮打开本地文本文件。 148 but2.addActionListener(new ActionListener() { 149 150 @Override 151 public void actionPerformed(ActionEvent e) { 152 BufferedReader bufr = null; 153 int x = JFC.showOpenDialog(f); 154 try { 155 if (x==JFileChooser.APPROVE_OPTION) { 156 ta.setText(null); 157 tf.setText(null); 158 File fi2 = JFC.getSelectedFile(); 159 bufr = new BufferedReader(new FileReader(fi2)); 160 String line =null; 161 tf.setText(fi2.getAbsolutePath()); 162 while ((line=bufr.readLine())!=null) { 163 ta.append(line+"\r\n"); 164 } 165 } 166 } catch (FileNotFoundException e1) { 167 lab.setText("找不到文件"); 168 dia.setVisible(true); 169 } catch (IOException e1) { 170 lab.setText("读取失败"); 171 dia.setVisible(true); 172 } 173 } 174 }); 175 176 // 通过“保存”按钮保存文件。 177 but1.addActionListener(new ActionListener() { 178 String address; 179 @Override 180 public void actionPerformed(ActionEvent e) { 181 // 弹出一个保存对话框,并返回int类型的值。 182 int x = JFC.showSaveDialog(f); 183 File fi = JFC.getSelectedFile(); 184 // 利用返回的int值判断是否点击了对话框的保存按键 185 if (x==JFileChooser.APPROVE_OPTION && fi!=null) { 186 address = fi.getAbsolutePath(); 187 String ends = JFC.getFileFilter().getDescription(); 188 if (address.toUpperCase().endsWith(ends.toUpperCase())) { 189 // 如果文件使用的扩展名符合选定扩展名,则原名保存。 190 write2file(); 191 } else { 192 // 如果不是选定扩展名,则要加上选定扩展名 193 address = address+ends; 194 write2file(); 195 } 196 } 197 } 198 199 // 保存文件的具体实现方法。 200 private void write2file() { 201 BufferedWriter bufw = null; 202 try { 203 bufw = new BufferedWriter(new FileWriter(address)); 204 int count = ta.getLineCount(); 205 for (int x = 0; x < count; x++) { 206 // 获取行数,再通过行首位的偏移量获取每行内容。 207 String text = ta.getText(ta.getLineStartOffset(x),ta.getLineEndOffset(x)-ta.getLineStartOffset(x)); 208 bufw.write(text); 209 bufw.flush(); 210 } 211 } catch (BadLocationException e1) { 212 lab.setText("行数错误"); 213 dia.setVisible(true); 214 } catch (IOException e2) { 215 lab.setText("保存失败"); 216 dia.setVisible(true); 217 } finally { 218 try { 219 bufw.close(); 220 } catch (IOException e1) { 221 lab.setText("关闭资源失败"); 222 dia.setVisible(true); 223 } 224 } 225 } 226 }); 227 228 f.addWindowListener(new WindowAdapter() { 229 public void windowClosing(WindowEvent e){ 230 System.exit(0); 231 } 232 public void windowActivated(WindowEvent e1){ 233 // 设置窗口激活状态的焦点。 234 but.requestFocus(); 235 } 236 }); 237 } 238 239 // 打开本地文本文件和网址html源代码的具体实现方法。 240 private void showContent() { 241 BufferedReader bufr = null; 242 try { 243 File file = new File(tf.getText()); 244 if (file!=null && file.isFile()) { 245 ta.setText(null); 246 bufr = new BufferedReader(new FileReader(file)); 247 String line = null; 248 while ((line=bufr.readLine())!=null) { 249 ta.append(line+"\r\n"); 250 } 251 } 252 else if (file!=null) { 253 URL url = new URL(tf.getText()); 254 if (null!=url.openStream()) { 255 ta.setText(null); 256 URLConnection conn = url.openConnection(); 257 bufr = new BufferedReader(new InputStreamReader(conn.getInputStream())); 258 String line = null; 259 while ((line=bufr.readLine())!=null) { 260 ta.append(line+"\r\n"); 261 } 262 bufr.close(); 263 }else { 264 lab.setText("输入网址文件不存在,请重新输入"); 265 dia.setVisible(true); 266 } 267 } 268 } catch (FileNotFoundException e) { 269 lab.setText("输入文件路径不存在,请重新输入"); 270 dia.setVisible(true); 271 } catch (MalformedURLException e) { 272 lab.setText("输入网址或路径不正确,请重新输入"); 273 dia.setVisible(true); 274 } catch (IOException e) { 275 ta.append(e.toString()); 276 lab.setText("读取文件失败,请重新输入"); 277 dia.setVisible(true); 278 } 279 finally { 280 if (bufr!=null) { 281 try { 282 bufr.close(); 283 } catch (Exception e2) { 284 lab.setText("关闭资源失败"); 285 dia.setVisible(true); 286 } 287 } 288 } 289 } 290 }
虽然略显粗糙,但是功能都做出来了,活学活用,希望在java的路上继续前进,go!
Java基础:多功能小窗口,swing,io,net综合应用
原文:http://www.cnblogs.com/challengingtime/p/4676870.html