目前我做到在JTextArea查找某个字符然后滚动条会滚动到指定的行数,并且会高亮显示,
代码如下: setCaretPosition(text.getText().indexOf("aaaa"))
但效果不如 UltraEdit 查找功能强大,UltraEdit 查找功能会将查找出来的数据显示在 滚动条中间位置,不知道如何将查找出来的数据显示在滚动条中间,望高手帮帮忙,给段代码会提示啊!!!
7 个解决方案
#1
兄弟们帮帮忙啊
#2
滚动条中间位置 是什么意思啊?
这一行处于屏幕正中?
这一行处于屏幕正中?
#3
对,就是显示在JTextArea显示区域中间
#4
public class Study14 extends JFrame
{
static JTextArea ja=new JTextArea();
static javax.swing.JScrollPane jScrollPane = new JScrollPane(ja);
public Study14()
{
jScrollPane.setBounds(0,160,500,300);
add(jScrollPane);
try {
ReadFile.readFile("D:\\test\\V300R003C01B002_2010_09_13_TOR_BF_011_001_013(100914.051951)\\100914.051951\\TOR_BF_011_001_013_GTR_BIN.log", ja);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException, InterruptedException, BadLocationException
{
JFrame f = new Study14();
f.setVisible(true);
f.setBounds(400, 300, 800, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
System.out.println(jScrollPane.getVerticalScrollBar().getMaximum());
//Thread.sleep(2000);
System.out.println(ja.getLineCount());
int index = ja.getText().indexOf("2010-09-14 05:20:59");
ja.setCaretPosition(index); }
}
class ReadFile
{
public static void readFile(String fileName,JTextArea area) throws IOException
{
FileReader reader = null;
BufferedReader bf = null;
try
{
reader = new FileReader(new File(fileName));
bf = new BufferedReader(reader);
String line = null;
while((line=bf.readLine())!=null)
{
area.append(line+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
reader.close();
bf.close();
}
}
}
这是段demo代码,大家试试就更明白了
#5
ReadFile没必要自己编写。
DefaultEditorKit 提供了 read 方法。
DefaultEditorKit 提供了 read 方法。
#6
呵呵,谢谢提醒
这个问题该怎么解决啊,我接触swing才几天,搞不定啊
#7
已经搞定
分享一下:
int line = area.getLineOfOffset(area.getText().indexOf("aaa"));
int h = line * (area.getHeight() / area.getLineCount()) - (scrollPane.getHeight()/2);
scrollPane.getVerticalScrollBar().setValue(h);
分享一下:
int line = area.getLineOfOffset(area.getText().indexOf("aaa"));
int h = line * (area.getHeight() / area.getLineCount()) - (scrollPane.getHeight()/2);
scrollPane.getVerticalScrollBar().setValue(h);
#1
兄弟们帮帮忙啊
#2
滚动条中间位置 是什么意思啊?
这一行处于屏幕正中?
这一行处于屏幕正中?
#3
对,就是显示在JTextArea显示区域中间
#4
public class Study14 extends JFrame
{
static JTextArea ja=new JTextArea();
static javax.swing.JScrollPane jScrollPane = new JScrollPane(ja);
public Study14()
{
jScrollPane.setBounds(0,160,500,300);
add(jScrollPane);
try {
ReadFile.readFile("D:\\test\\V300R003C01B002_2010_09_13_TOR_BF_011_001_013(100914.051951)\\100914.051951\\TOR_BF_011_001_013_GTR_BIN.log", ja);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException, InterruptedException, BadLocationException
{
JFrame f = new Study14();
f.setVisible(true);
f.setBounds(400, 300, 800, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
System.out.println(jScrollPane.getVerticalScrollBar().getMaximum());
//Thread.sleep(2000);
System.out.println(ja.getLineCount());
int index = ja.getText().indexOf("2010-09-14 05:20:59");
ja.setCaretPosition(index); }
}
class ReadFile
{
public static void readFile(String fileName,JTextArea area) throws IOException
{
FileReader reader = null;
BufferedReader bf = null;
try
{
reader = new FileReader(new File(fileName));
bf = new BufferedReader(reader);
String line = null;
while((line=bf.readLine())!=null)
{
area.append(line+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
reader.close();
bf.close();
}
}
}
这是段demo代码,大家试试就更明白了
#5
ReadFile没必要自己编写。
DefaultEditorKit 提供了 read 方法。
DefaultEditorKit 提供了 read 方法。
#6
呵呵,谢谢提醒
这个问题该怎么解决啊,我接触swing才几天,搞不定啊
#7
已经搞定
分享一下:
int line = area.getLineOfOffset(area.getText().indexOf("aaa"));
int h = line * (area.getHeight() / area.getLineCount()) - (scrollPane.getHeight()/2);
scrollPane.getVerticalScrollBar().setValue(h);
分享一下:
int line = area.getLineOfOffset(area.getText().indexOf("aaa"));
int h = line * (area.getHeight() / area.getLineCount()) - (scrollPane.getHeight()/2);
scrollPane.getVerticalScrollBar().setValue(h);