import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
class test extends JFrame implements ActionListener
{
JEditorPane edPane = new JEditorPane();
JScrollPane jsp = new JScrollPane(edPane);
JButton bt = new JButton("찾기");
private JTextField find;
private int toffset=0;
public test(){
JPanel northP = new JPanel();
find = new JTextField(17);
northP.add( find, BorderLayout.CENTER);
northP.add(bt, BorderLayout.EAST);
this.getContentPane().add(northP, BorderLayout.NORTH);
JPanel centerP = new JPanel();
this.getContentPane().add(jsp, BorderLayout.CENTER);
edPane.setContentType("text/html");
edPane.setText("<html><body>"+
"STAR<br>" +
"RIP<br>" +
"EIGRP<br>" +
"aaa<br>"+
"bbb<br>"+
"ccc<br>"+
"ddd<br>"+
"STAR<br>"+
"111<br>"+
"222<br>"+
"RIP<br>"+
"333<br>"+
"444<br>"+
"STAR<br>"+
"</body></html>");
this.setSize(300,300);
this.show();
bt.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bt){
/* 텍스트필드에 STAR 입력 후 버튼클릭하면 이벤트 처리하는 함수 */
// 1.텍스트에 입력된 STAR자열을 받아 JEditorPane 에서 차례차레 찾아가며 JEditorPane의 그 문자에 requestFocus()를 맞춘다.
// 2.즉, 그 스트링이 있는 JEditorPane 의 라인이 JEditorPane 화면상에 보이게 한다. ex) 인터넷익스플로어처럼..
// 3. 찾아진 문자에 대해 마우스드래그를 씌운채로 리퀘스트포커스가 맞춰지도록 한다.
// 4.그리고 System.out.println()으로 찾고자 하는 스트링이 들어있는 JEditorPane 각각의 라인이 몇번째 라인인지 출력
String tempfind = find.getText();
edPane.selectAll();
String tempString = edPane.getSelectedText();
// 문자열들의 길이
int tfGetLength = tempfind.length();
int taGetLength = tempString.length();
for(;toffset < taGetLength;toffset++){
// 문자 비교
if(tempString.regionMatches(toffset, tempfind, 0,tfGetLength)) break;
}
edPane.select(toffset,toffset + tfGetLength); //toffset 부터 문자열 선택
edPane.requestFocus();
toffset++; // 이어서 찾기 위해
}
}
public static void main(String[] args)
{
new test();
}
}
문]
예를 들어, 텍스트필드에 STAR 라는 문자를 입력후 버튼클릭하면 JEditorPane에서 그 문자열을 찾아 그 문자열이 있는부분마다 포커스가 맞춰지도록 하고싶습니다. 인터넷익스플로어의 "찾기" 기능처럼 구현하기를 원하는데 쉽지가 않네요..;;
댓글 없음:
댓글 쓰기