java编写显示文本的应用程序, 需要用到图形界面GUI编程技术.
创新互联专业为企业提供监利网站建设、监利做网站、监利网站设计、监利网站制作等企业网站建设、网页设计与制作、监利企业网站模板建站服务,十多年监利做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
步骤一: 需要搭建一个整体的外观, 调整布局和组件的位置.
主要需要使用的组件
JTextField 文本框组件: 用于当做地址栏, 填写文件的路径
JButton 按钮, 用于响应点击事件,根据地址栏的地址读取文件, 并且显示到文本域里
JTextArea 文本域, 用于显示文件里的字符串信息
JLabel 标签, 用于显示行数信息
布局: 使用边界布局BorderLayout,可以快速按照上下左右中的位置快速布局.
步骤二: IO流,读取文本文件信息,并统计行数.
由于要按行读取,方便计算文件的行数, 所以使用Buffered 可以事半功倍.
核心代码如下
StringBuffer txtbuf=new StringBuffer();//用于保存文本信息
int lines=0;//用于计算行数
try {
BufferedReader br = new BufferedReader(new FileReader(fp));
String hasRead=null;
while((hasRead=br.readLine())!=null){
txtbuf.append(hasRead+"\n");
lines++;
}
br.close();//IO流用完记得关闭
} catch (Exception e) {
//当IO出现异常时,要进行提示
JOptionPane.showMessageDialog(this, "文件读取错误,确认文件存在,\n或者没有被其他文件打开.","IO错误",JOptionPane.ERROR_MESSAGE);;
}
步骤三:整合代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class ShowTextFrame extends JFrame implements ActionListener{
JTextArea jta;//该文本域用于显示文本信息
JTextField jtf;//该文本框,用于填写文件路径
JLabel jl;//该标签用于保存读取到的行数
JButton jbt;//按钮
public ShowTextFrame() {
jtf = new JTextField(18);
jbt = new JButton("读取并显示");
jbt.addActionListener(this);
JPanel jp1 = new JPanel();
jp1.add(jtf);
jp1.add(jbt);
add(jp1,BorderLayout.NORTH);
jta = new JTextArea();
JScrollPane jsp = new JScrollPane(jta);//文本域添加到滚动面板
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//垂直滚动条一直显示
add(jsp);
jl = new JLabel("文件共有0行");
JPanel jp2 = new JPanel();
jp2.add(jl);
add(jp2,BorderLayout.SOUTH);
setTitle("显示文本");//窗口标题
setSize(380, 320);
setLocationRelativeTo(null);//窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(jbt==e.getSource()){
String fp = jtf.getText().trim();
Info info = getInfo(fp);
jta.setText(info.txt);//把文本信息显示到文本域
jl.setText("文件共有"+info.lines+"行");//把行数显示显示到JLabel
}
}
public Info getInfo(String fp){//通过文件路径,获取文件信息(字符串信息和行数信息)
StringBuffer txtbuf=new StringBuffer();
int lines=0;
try {
BufferedReader br = new BufferedReader(new FileReader(fp));
String hasRead=null;
while((hasRead=br.readLine())!=null){
txtbuf.append(hasRead+"\n");
lines++;
}
br.close();//IO流用完记得关闭
} catch (Exception e) {
//当IO出现异常时,要进行提示
JOptionPane.showMessageDialog(this, "文件读取错误,确认文件存在,\n或者没有被其他文件打开.","IO错误",JOptionPane.ERROR_MESSAGE);;
}
return new Info(txtbuf.toString(), lines);
}
public static void main(String[] args) {
new ShowTextFrame();//创建窗口实例
}
}
class Info{//辅助类, 用于传递信息
String txt;//文字信息
int lines;// 行数信息
public Info(String txt, int lines) {
this.txt = txt;
this.lines = lines;
}
}
运行效果图
在main.xml定义一个Button
Button
android:id = "@+id/myBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的详细介绍"/
Activity的代码
public class MainActivity extends Activity {
Button myButton;
String introduce = "内容主题文本,可以用赋值(值传递还是地址传递)如:daXia.toString()";//介绍:你要传的内容
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button) findViewById(R.id.myBtn);
//点击按钮在当前Activity(如:MainActivity.this)弹出一个新的AlertDialog对话框
myButton.setOnClickListener(new OnClickListener() {//导包:import android.view.View.OnClickListener;
@Override
public void onClick(View v) {
new AlertDialog.Builder(MainActivity.this)
//设置对话框内容
.setTitle("我的详细介绍")
.setMessage(introduce)
.setPositiveButton("确定", null)
.show();
}
});
}
}
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class H {
/**
* 功能:Java读取txt文件的内容
* 步骤:1:先获得文件句柄
* 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
* 3:读取到输入流后,需要读取生成字节流
* 4:一行一行的输出。readline()。
* 备注:需要考虑的是异常情况
* @param filePath
*/
public static void readTxtFile(String filePath){
try {
String encoding="GBK";
File file=new File(filePath);
if(file.isFile() file.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);//创建读入的buffer
String lineTxt = null;
while((lineTxt = bufferedReader.readLine()) != null){//按行输出读取的内容
System.out.println(lineTxt);
}
read.close();
}else{
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
public static void main(String argv[]){
String filePath = "L:\\Apache\\htdocs\\res\\read.txt";//文件路径名称
readTxtFile(filePath);
}
}
复制粘贴自网上,添加了部分备注。。
importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjavax.swing.JButton;importjavax.swing.JEditorPane;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;publicclassWindowTestextendsJFrameimplementsActionListener,KeyListener{privatestaticfinallongserialVersionUID=1L;/***主方法*/publicstaticvoidmain(String[]args){WindowTestwin=newWindowTest();}/***下面是具体实现*/JTextFieldtext;JButtonbutton;JEditorPanetextArea;publicWindowTest(){super("测试窗体");text=newJTextField(15);text.addKeyListener(this);JPanelp1=newJPanel();p1.add(newJLabel("输入字符:"));p1.add(text);button=newJButton("清除");button.addActionListener(this);p1.add(button);p1.setBounds(5,5,220,100);textArea=newJEditorPane();textArea.setBounds(1,1,216,200);JPanelp2=newJPanel();p2.add(newJLabel("显示字符:"));p2.add(textArea);p2.setBounds(5,115,340,220);JPanelp3=newJPanel();p3.add(p1);p3.add(p2);add(p3);setBounds(160,60,400,300);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@OverridepublicvoidkeyPressed(KeyEvente){}@OverridepublicvoidkeyReleased(KeyEvente){if(e.getKeyCode()==KeyEvent.VK_ENTER){textArea.setText("");}else{Stringstr=text.getText();textArea.setText(str);}}@OverridepublicvoidkeyTyped(KeyEvente){}@OverridepublicvoidactionPerformed(ActionEvente){text.setText("");textArea.setText("");}}
我编译时报了
p185_6.java:50: 警告: catch 子句无法访问
catch(IOException e2){System.out.println("文件读写错");}
改正后文件可以在页面内显示,就是位置有点问题。
可以把add(jta,BorderLayout.SOUTH);改成add(jta,BorderLayout.CENTER);
如果想使用滚动条,可以把JTextArea放在JScrollPane里,然后再放在JFrame中。
add(jta,BorderLayout.SOUTH);改成add(new JScrollPane(jta),BorderLayout.CENTER);