急!急!急!请教如何在JFrame中读取和显示文本文档内容?

qq402018423 2012-05-05 02:59:07
我想编一个java应用程序,在菜单下新的窗口里 读取的文本文档可以在窗口里显示出来,我只会在控制台显示,所以请教大家,希望大家帮帮忙,急用。

...全文
1014 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengwuqin 2012-05-08
  • 打赏
  • 举报
回复
我觉得思路应该是这样的:把文本文档中的内容读出来,至于显示嘛,应该要一个控件,随便你选了,JTextArea、JLabel应该都可以的,把读出来的内容显示在控件里面就行了!具体的代码应该很简单吧.
ncisjava 2012-05-08
  • 打赏
  • 举报
回复
jdk的Demo有个Notepad示例,完整规范的源代码,好好使用Demo吧
sdojqy1122 2012-05-07
  • 打赏
  • 举报
回复
发现越来越像记事本了。
提供两个思路
键盘监听器按trc+s 时执行保存操作。KeyAdapter 或者 KeyListener
或者另外设置一个按钮。
点击执行保存操作。这个是ActionListener

接着是保存操作的问题:
把JTextArea的文本重新覆盖掉原文件。用到输出流。
qq402018423 2012-05-07
  • 打赏
  • 举报
回复

package adminframe.xitiku;

import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Xitiku1 extends JFrame {

public Xitiku1() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}

}

public String ImportText() {
String str = "";

try {
Scanner scanner = new Scanner(new File("D:\\abc.txt"));
while (scanner.hasNextLine()) {
str += scanner.nextLine();
str+='\n';
}
} catch (FileNotFoundException e) {
System.out.println("file doesn't exist");
}
return str;

}

private void jbInit() throws Exception {
// TODO Auto-generated method stub

getContentPane().setLayout(null);// 清空布局管理器
lab.setFont(new java.awt.Font("楷体_GB2312", Font.BOLD, 25));
lab.setText(" 例 题 讲 解 ");
lab.setBounds(new Rectangle(218, 25, 300, 20));

// setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点
// width:组件的长度 height:组件的高度
jScrollPane1.setBounds(new Rectangle(22,50, 600, 420));
jScrollPane1.setBorder(BorderFactory.createEtchedBorder());

lab1.setFont(new java.awt.Font("楷体_GB2312", Font.BOLD, 10));
lab1.setText(ImportText());
lab1.setBounds(new Rectangle(22, 15, 300, 100));
jScrollPane1.getViewport().add(lab1);
//设置文本自动换行
lab1.setLineWrap(true);
//设置滚动面板管理文本域
jScrollPane1.setViewportView(lab1);
lab1.setEditable(false);

this.setTitle("第一章");
this.getContentPane().add(lab);
this.getContentPane().add(lab1);
this.getContentPane().add(jScrollPane1);

jScrollPane1.getViewport().add(lab1);

// setLocationRelativeTo(this);

}

JLabel lab = new JLabel();
JTextArea lab1 = new JTextArea();
JScrollPane jScrollPane1 = new JScrollPane();

}



现在已经完成文本文件读取并显示内容了,可是我现在需要将现有代码功能改成 :在现有基础上(读取文本文件并显示内容)增加可以对所读取的文本文件进行修改的功能

请各位大能指点小弟迷津
sdojqy1122 2012-05-07
  • 打赏
  • 举报
回复
大哥有什么不一样吗??
按的意思是。
str = "我是读取 电脑目录下的 文本文件";
System.out.print(str);
如果str 能换行说明 下面就能换行。
jta.setText(str);
实在不行把你代码贴出来。
qq402018423 2012-05-07
  • 打赏
  • 举报
回复
我是读取 电脑目录下的 文本文件,不是像你初始化setText("")的一样
sdojqy1122 2012-05-07
  • 打赏
  • 举报
回复
你确定你取出的数据有换行?如果用的是nextLine()是没有换行的哦,系统会默认把换行符截掉。


import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class TestFrame extends JFrame {
JTextArea jta ;
public TestFrame() {
jta = new JTextArea();
add(jta,BorderLayout.CENTER);
jta.setText("asdfbac\nwerwrowaer\nafsef");
this.pack();
this.setVisible(true);
}

public static void main(String[] args){
new TestFrame();
}
}

qq402018423 2012-05-07
  • 打赏
  • 举报
回复
txt 里面有换行 怎么在JTextArea.setText("");显示里 也跟着换行
sdojqy1122 2012-05-07
  • 打赏
  • 举报
回复
JTextArea.setText("");
qq402018423 2012-05-07
  • 打赏
  • 举报
回复
9楼的程序 编译的时候 import java.nio.file.Files;导入这个包报错。
我按照10楼的方法做的,IO读取,用JTextField.setText("");显示文本内容的 ,结果文本内容全部显示在一行。
我想JTextField显示文本内容 按照txt原内容显示 怎么办啊
wangdong20 2012-05-06
  • 打赏
  • 举报
回复
JTextField.setText("");
huntor 2012-05-05
  • 打赏
  • 举报
回复
使用了LineBreakMeasurer和TextLayout。jdk7编译运行。
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.text.*;
import java.util.List;
import javax.swing.*;

public class TextLayoutExample {
private TextLayoutExample(){}
public static void main(final String... args) {
EventQueue.invokeLater(new Runnable(){
@Override public void run(){
JFrame frame = new JFrame("TextLayout Example");
try {
frame.add(new TextViewer(Files.readAllLines(new File("TextLayoutExample.java").toPath(), Charset.forName("ASCII"))));
} catch(IOException e) {
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(800,600));
frame.pack();
frame.setVisible(true);
}
});
}
private static class TextViewer extends JPanel {
private List<String> content = null;
public TextViewer(){}
public TextViewer(List<String> content) { this.content = content;}
public void setContent(List<String> content) { this.content = content ; repaint();}
@Override public void paintComponent(Graphics g) {
if(content == null) return;
Point2D.Float pen = new Point2D.Float(10,20);
Graphics2D g2d = (Graphics2D) g;
for(String s: content) {
if(s.isEmpty()) continue;
AttributedCharacterIterator asi = new AttributedString(s).getIterator();
LineBreakMeasurer lbm = new LineBreakMeasurer(asi, g2d.getFontRenderContext());
float wrappingWidth = getSize().width - 15;
while (lbm.getPosition() < asi.getEndIndex()){
TextLayout layout = lbm.nextLayout(wrappingWidth);
pen.y += (layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (wrappingWidth - layout.getAdvance());

layout.draw(g2d, pen.x + dx, pen.y);
pen.y += layout.getDescent() + layout.getLeading();
}
}
}
}
}
sdojqy1122 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
上面是我图片链接网址 不知道能不能打开,我想要的和你说的记事本还是有些区别别的
[/Quote]
图裂了,哥们,如果你能把文本内容读出来,理论可以实现你的需求。你可以再把你需求讲明白一点。
周靖峰 2012-05-05
  • 打赏
  • 举报
回复
先用IO函数读出文本文件的内容,然后将内容显示在一个JTextArea中,如果不是显示在JTextArea。那就多加几个JLabel好了,每个JLabel表示一行,但是JLabel要自己安排好位子。如果你JLabel也不想用,那就自己用Graphics画吧
qq402018423 2012-05-05
  • 打赏
  • 举报
回复
上面是我图片链接网址 不知道能不能打开,我想要的和你说的记事本还是有些区别别的
qq402018423 2012-05-05
  • 打赏
  • 举报
回复
http://b155.photo.store.qq.com/psb?/264b37c4-d111-493c-bd4a-fa37779d04ec/swwWxhTurRLv4pkI6DLcUFUQPUwYWTy0WP0fWuDFiwc!/b/YYM7ZlxZEQAAYmZYbFyPEQAA
sdojqy1122 2012-05-05
  • 打赏
  • 举报
回复
你图片裂了。原理是一样的。
qq402018423 2012-05-05
  • 打赏
  • 举报
回复
我不是要做一个记事本,我是想把文本文档内容在JFrame窗口里显示出来
sdojqy1122 2012-05-05
  • 打赏
  • 举报
回复
记事本,网上很多代码。
qq402018423 2012-05-05
  • 打赏
  • 举报
回复
如果 我说的不清楚,大家可以加我qq,我可以截图。这里图片不显示,谢谢了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧