问个关于JTextArea和JScrollPane的问题

sb5000 2010-08-23 09:01:54
我的程序需要实现一个功能,就是从一个txt中读入文本到TextArea中,将TextArea放入滚动面板使其可以滚动,运行后若文本长度超过一定长度会自动显示滚动条
现在的问题是运行程序后如果文本长度过长,滚动条的初始位置是在最下方,光标定位到文本末端
部分代码如下求教如何使滚动条一开始在最上方

String readMe = "";
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\INSTALL.LOG");
if(file.exists()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String text;
while((text = input.readLine())!=null)
buffer.append(text+"\n");
input.close();
readMe = buffer.toString();
} catch(IOException ioException) {}
}

textArea.setText(readMe);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);

scrollPanel = new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
...全文
247 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huntor 2010-08-23
  • 打赏
  • 举报
回复
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import static javax.swing.ScrollPaneConstants.*;

public class JTextAreaExample extends JFrame{
private JTextArea textarea = new JTextArea();
private DefaultEditorKit kit = new DefaultEditorKit();
public JTextAreaExample(){
super("JTextArea Example");
setDefaultCloseOperation(EXIT_ON_CLOSE);
textarea.setLineWrap(true);
textarea.setWrapStyleWord(true);
getContentPane().add(new JScrollPane(textarea,VERTICAL_SCROLLBAR_AS_NEEDED,HORIZONTAL_SCROLLBAR_NEVER));

setPreferredSize(new Dimension(800,600));
pack();
setLocationRelativeTo(null);
addWindowListener(new WindowAdapter(){
@Override public void windowOpened(WindowEvent evt){
try{
kit.read(new java.io.FileReader("./JTextAreaExample.java"),textarea.getDocument(),0);
textarea.setCaretPosition(0);
}catch(java.io.IOException e){
textarea.setText(e.getMessage());
}catch(BadLocationException e){
}
}
});
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
new JTextAreaExample().setVisible(true);
}
});
}
}
Tassdars 2010-08-23
  • 打赏
  • 举报
回复
和IDE工具没关系,我直接用的javac.exe编译的,没用任何IDE,JDK版本是1.6.0_20,要不楼主试一下,或者换台电脑
sb5000 2010-08-23
  • 打赏
  • 举报
回复
会不会跟编译器有关系呢。。。我用MyEclipse 8.0M1
Tassdars 2010-08-23
  • 打赏
  • 举报
回复
楼主,我用你新发的代码又跑了一遍,滚动条还是最上面,我帮不了你了,不知道你的是啥问题
sb5000 2010-08-23
  • 打赏
  • 举报
回复
public class Help extends JFrame{
private JTextArea textArea;
private JScrollPane scrollPanel;

public Help(String title) {
super(title);

textArea = new JTextArea();

String readMe = "";
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\test.txt");
if(file.exists()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String text;
while((text = input.readLine())!=null)
buffer.append(text+"\n");
input.close();
readMe = buffer.toString();
} catch(IOException ioException) {}
}

textArea.setText(readMe);


scrollPanel = new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

this.add(scrollPanel);

this.setSize(300,600);
this.setLocation(400, 50);

}



我把其他代码都注释掉了,就剩这样最简单的跑。。。滚动条还是在最下面- -我也搞不懂了
Tassdars 2010-08-23
  • 打赏
  • 举报
回复
楼主,我搞不懂了,我用你的代码跑了以后,光标出现在第一行第一个字符,滚动条在最上面,我不知道你是怎么弄的,根本都不用设置滚动条位置,然后我在想,你是不是在代码的其他地方干了什么事
sb5000 2010-08-23
  • 打赏
  • 举报
回复
是不是因为我文件读取方式跟你不一样造成的问题呢。。。
Tassdars 2010-08-23
  • 打赏
  • 举报
回复
但是我这个是经过实践检验才发上来的啊,我用你的代码试试
sb5000 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tassdars 的回复:]
JScrollPane.getVerticalScrollBar().setValue(JScrollPane.getVerticalScrollBar().getMinimum());
或者直接设为0,但Minimum可能不为0,虽然大多数情况下我们都设为0,或者说组件默认设为0
JScrollPane.getVerticalScrollBar().setValue(0);
水平滚动条用这……
[/Quote]


这个方法我试过,设成0或者设成Minimum都不管用- -
Tassdars 2010-08-23
  • 打赏
  • 举报
回复
JScrollPane.getVerticalScrollBar().setValue(JScrollPane.getVerticalScrollBar().getMinimum());
或者直接设为0,但Minimum可能不为0,虽然大多数情况下我们都设为0,或者说组件默认设为0
JScrollPane.getVerticalScrollBar().setValue(0);
水平滚动条用这个:JScrollPane.getHorizontalScrollBar().
owen_008 2010-08-23
  • 打赏
  • 举报
回复
给楼主顶一个~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~呵呵
sb5000 2010-08-23
  • 打赏
  • 举报
回复
谢谢楼上了,其实就是再加一行代码
textArea.setCaretPosition(0);
哈哈,万分感谢

62,635

社区成员

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

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