IT_Programming/Java

JEditorPane 에서 특정문자열에 포커스 설정하기

JJun ™ 2008. 8. 20. 09:04

 

 

 

 

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();

  }

}