------- android培训java培训、期待与您交流! ----------

概念原理的理解,不代表能熟练应用。

如果将多个知识点关联并应用起来,这能加快我们对知识的掌握。

作为一个初学者,最快速的上手方式应该就是学以致用了。

下面做了一个小窗口,主要是为了综合应用java的一些基础功能,界面稍显随意。

界面:

具体功能以及代码:

 /*具体实现功能:
* 1.根据地址栏的路径打开文本文件,显示在文本区域。
* 2.根据地址栏的网址获取网页源代码,显示在文本区域。
* 3.通过打开按钮打开本地文本文件,显示在文本区域。
* 4.通过保存按钮,把文本区域内容保存到本地。
*
* 应用到的知识点:
* 1.GUI;
* 2.IO;
* 3.net;*/ import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.BadLocationException; public class GUITest { public static void main(String[] args) {
new GetGUI(); } } //GUI界面设置。
class GetGUI{
JFrame f;
JTextField tf;
JButton but;
JButton but1;
JButton but2;
JTextArea ta;
JScrollPane scroll; JFileChooser JFC;
JDialog dia;
JLabel lab;
JButton okBut;
GetGUI(){
f = new JFrame("多功能小窗口");
tf = new JTextField("填写本地文本路径或网址(确认后请稍候...)",45);
but = new JButton("转到");
but2 = new JButton("打开");
but1 = new JButton("保存");
ta = new JTextArea(23,50);
JFC = new JFileChooser();
// 设置选择可选文件夹和文件。
JFC.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
// 设置可选文件后缀名(过滤器)。
FileFilter filter = new FileNameExtensionFilter(".txt","txt");
FileFilter filter1 = new FileNameExtensionFilter(".java","java");
JFC.setFileFilter(filter);
JFC.setFileFilter(filter1); dia = new JDialog(f,true);
lab = new JLabel();
okBut = new JButton("ok"); dia.add(lab);
dia.add(okBut);
dia.setBounds(350,150,500,100);
dia.setLayout(new FlowLayout()); // 文本区域设置滚动条。
scroll = new JScrollPane(ta);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); f.add(tf);
f.add(but);
f.add(but2);
f.add(but1);
f.add(scroll);
f.setBounds(300,100,600,550);
f.setLayout(new FlowLayout());
f.setResizable(false);
setGUI(); f.setVisible(true);
}
private void setGUI() {
okBut.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
dia.setVisible(false);
}
}); dia.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
dia.setVisible(false);
}
}); // 通过地址栏上回车键打开本地文件或网站的html源代码。
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ENTER) {
showContent();
}
}
}); tf.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e){
tf.setText(null);
}
}); // 通过“转到”按钮打开本地文本文件或网站的html源代码。
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showContent();
}
}); // 通过“打开”按钮打开本地文本文件。
but2.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
BufferedReader bufr = null;
int x = JFC.showOpenDialog(f);
try {
if (x==JFileChooser.APPROVE_OPTION) {
ta.setText(null);
tf.setText(null);
File fi2 = JFC.getSelectedFile();
bufr = new BufferedReader(new FileReader(fi2));
String line =null;
tf.setText(fi2.getAbsolutePath());
while ((line=bufr.readLine())!=null) {
ta.append(line+"\r\n");
}
}
} catch (FileNotFoundException e1) {
lab.setText("找不到文件");
dia.setVisible(true);
} catch (IOException e1) {
lab.setText("读取失败");
dia.setVisible(true);
}
}
}); // 通过“保存”按钮保存文件。
but1.addActionListener(new ActionListener() {
String address;
@Override
public void actionPerformed(ActionEvent e) {
// 弹出一个保存对话框,并返回int类型的值。
int x = JFC.showSaveDialog(f);
File fi = JFC.getSelectedFile();
// 利用返回的int值判断是否点击了对话框的保存按键
if (x==JFileChooser.APPROVE_OPTION && fi!=null) {
address = fi.getAbsolutePath();
String ends = JFC.getFileFilter().getDescription();
if (address.toUpperCase().endsWith(ends.toUpperCase())) {
// 如果文件使用的扩展名符合选定扩展名,则原名保存。
write2file();
} else {
// 如果不是选定扩展名,则要加上选定扩展名
address = address+ends;
write2file();
}
}
} // 保存文件的具体实现方法。
private void write2file() {
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(address));
int count = ta.getLineCount();
for (int x = 0; x < count; x++) {
// 获取行数,再通过行首位的偏移量获取每行内容。
String text = ta.getText(ta.getLineStartOffset(x),ta.getLineEndOffset(x)-ta.getLineStartOffset(x));
bufw.write(text);
bufw.flush();
}
} catch (BadLocationException e1) {
lab.setText("行数错误");
dia.setVisible(true);
} catch (IOException e2) {
lab.setText("保存失败");
dia.setVisible(true);
} finally {
try {
bufw.close();
} catch (IOException e1) {
lab.setText("关闭资源失败");
dia.setVisible(true);
}
}
}
}); f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
public void windowActivated(WindowEvent e1){
// 设置窗口激活状态的焦点。
but.requestFocus();
}
});
} // 打开本地文本文件和网址html源代码的具体实现方法。
private void showContent() {
BufferedReader bufr = null;
try {
File file = new File(tf.getText());
if (file!=null && file.isFile()) {
ta.setText(null);
bufr = new BufferedReader(new FileReader(file));
String line = null;
while ((line=bufr.readLine())!=null) {
ta.append(line+"\r\n");
}
}
else if (file!=null) {
URL url = new URL(tf.getText());
if (null!=url.openStream()) {
ta.setText(null);
URLConnection conn = url.openConnection();
bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line=bufr.readLine())!=null) {
ta.append(line+"\r\n");
}
bufr.close();
}else {
lab.setText("输入网址文件不存在,请重新输入");
dia.setVisible(true);
}
}
} catch (FileNotFoundException e) {
lab.setText("输入文件路径不存在,请重新输入");
dia.setVisible(true);
} catch (MalformedURLException e) {
lab.setText("输入网址或路径不正确,请重新输入");
dia.setVisible(true);
} catch (IOException e) {
ta.append(e.toString());
lab.setText("读取文件失败,请重新输入");
dia.setVisible(true);
}
finally {
if (bufr!=null) {
try {
bufr.close();
} catch (Exception e2) {
lab.setText("关闭资源失败");
dia.setVisible(true);
}
}
}
}
}

虽然略显粗糙,但是功能都做出来了,活学活用,希望在java的路上继续前进,go!

黑马程序员_Java基础:多功能小窗口,swing,io,net综合应用的更多相关文章

  1. 黑马程序员_Java基础组成

    Java语言基础组成 2.1关键字 main不是关键字,但被JVM所识别的名称. 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有字母都为小写. 用于定义数据类型的关 ...

  2. 黑马程序员_Java基础:网络编程总结

    ------- android培训.java培训.期待与您交流! ---------- Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是 ...

  3. 黑马程序员_Java基础视频-深入浅出精华版--PPT 文件列表

    \day01\code\第一章_Java概述.ppt;\day01\resource\资料\50道编程题(有精力的同学看看).doc;\day01\resource\资料\Sun_Java程序员认证考 ...

  4. 黑马程序员_Java基础视频-深入浅出精华版--视频列表

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  5. 课程2:《黑马程序员_Java基础视频-深入浅出精华版》-视频列表-

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  6. 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— GUI(Graphical User Interface)(图形用户接口):用图形 ...

  7. 黑马程序员_Java基础:集合总结

    ------- android培训.java培训.期待与您交流! ---------- 一.集合概念 相信大家都知道,java是一门面向对象的编程语言,而对事物的体现都是以对象的形式,所以为了方便对多 ...

  8. 黑马程序员_Java基础:反射机制(Reflection)总结

    ------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...

  9. 黑马程序员_Java基础:IO流总结

    ------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...

随机推荐

  1. SourceInsight 精确导入Linux kernel源码的方法

    相信有很多人用 SourceInsight 查看 Linux Kernel 源码,但导入源码时会遇到一些问题.1.如果把整个源码树都导入进去,查看符号定义的时候,会发现有大量重复定义,很难找到正确的位 ...

  2. Oracle中获取当前时间半小时前的时间

    最近项目中有个要根据半个小时前的数据情况判断某一栏位的值,但是一直没想到怎样获取当前时间的半小时前的时间,今天突然想到可以通过sysdate做差来获取,比如sysdate-1这样的,刚开始没有对结果进 ...

  3. 伪静态URLRewrite学习笔记

    UrlRewrite: UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址,类似于Apache的mod_rewrite.将我们的动态网页地址转化为静态的地址,如ht ...

  4. NHibernate系列文章十一:NHibernate并发控制

    摘要 在同一时刻数据访问量和更新次数比较大的系统中,产生了数据的并发访问问题.并发访问使得在这样的环境中,所有用户(程序.实际用户.进程.线程等)的操作不产生负面问题. 如果不使用并发,在两个用户同时 ...

  5. 怎么去除google的 安全搜索

    想要避开安全搜索 更改右上角的搜索设置,将搜索语言改为英文,然后保存搜索设置 第二次进入搜索设置里找Filter explicit results前的面的勾去掉即可.

  6. Hadoop MapReduce编程 API入门系列之小文件合并(二十九)

    不多说,直接上代码. Hadoop 自身提供了几种机制来解决相关的问题,包括HAR,SequeueFile和CombineFileInputFormat. Hadoop 自身提供的几种小文件合并机制 ...

  7. python 格式化 json输出

    利用python格式化json 字符串输出. $ echo '{"json":"obj"}' | python -m json.tool 利用python -m ...

  8. golang 格式化时间为字符串

    package main import ( "fmt" "reflect" "time" ) func main() { //格式化字符串为 ...

  9. jstl <c:forEach> 介绍

    varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性.就拿varStatus="status"来说,事实上定义了一个status ...

  10. 动端逐渐出了许多的移动端的框架,比如Sencha Touch、JQTouch、Jquery-moblie、jqMobi等等。这些框架都有优缺点,不同的框架应用在不同的项目中。现简单阐述一下各框架的优缺点:

    移动前端工作的那些事---前端制作之微信小技巧篇   (2013-11-15 15:20) 转载▼ 标签: it css3/javascript html5 webapp 手机网站搭建 分类: 前端制 ...