2011-02-26 2 views
3

소프트웨어에 대한 간단한 도움말 시스템을 구축하려고합니다.
JScrollPane 내부에 래핑 된 JEditorPane (HTML 파일과 함께로드 됨)을 사용하여 작성한 도움말 시스템. 동일한 창 내부에 JLabel이 있습니다.
사용자가 특정 단어의 JEditorPane 위로 마우스를 이동하면 더 많은 설명이 JLabel에 나타납니다.Java : JScrollPane에 싸여있는 JEditorPane의 이상한 동작

나는 그것을 성공하지만 어떤 이유로 텍스트의 시작 부분에서만 작동한다. (HTML 파일은 길고 스크롤해야한다 ...)
페이지를 아래로 스크롤하면 단어 위로 마우스를 가져 가면 BadLocationException이 표시됩니다.

아래 코드에는 JScrollPane에 래핑 된 JEditorPane이 있습니다.
사용자가 마우스를 움직이면 마우스가 가리키는 현재 문자가 인쇄됩니다. (도움말 시스템에서이 위치로 단어의 값을 찾아 JLabel에 대한 설명을 인쇄하십시오.)
그러나 나는 텍스트의 시작 부분에서만 작동한다고했습니다.
왜?



import java.awt.Component; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.LayoutManager; 
import java.awt.Point; 
import java.io.IOException; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.text.BadLocationException; 

public class JEditorPaneTestApp extends JFrame { 

    private JEditorPane editorPan; 
    private JScrollPane scrollPan; 

    public JEditorPaneTestApp() { 
     super(); 
     try { 
      editorPan = new javax.swing.JEditorPane("file:///path/toHTML/file/helpFile.html"); 
     } 
     catch (IOException e) {e.printStackTrace();} 

     scrollPan = new JScrollPane(editorPan); 

     this.add(scrollPan); 

     editorPan.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { 
        public void mouseMoved(java.awt.event.MouseEvent evt) { 
         Point p = new Point(evt.getX(), evt.getY()); 
         int pos = editorPan.viewToModel(p); 
         try { 
         System.out.println(editorPan.getText(pos--, pos).charAt(0)); 
         } 
         catch (BadLocationException e1) { 
          System.out.println("Invalid location");/* e1.printStackTrace();*/ 
         } 
        } 
       }); 
     scrollPan.setViewportView(editorPan); 
     this.add(scrollPan); 

     // 
     this.getContentPane().setLayout(new LayoutManager() { 
      @Override public Dimension preferredLayoutSize(Container arg0) {return null;} 
      @Override public Dimension minimumLayoutSize(Container arg0) {return null;} 
      @Override public void removeLayoutComponent(Component arg0) {} 
      @Override public void addLayoutComponent(String arg0, Component arg1) {} 
      @Override public void layoutContainer(Container conter) { 
       scrollPan.setBounds(0, 0, conter.getWidth(), conter.getHeight()); 
      } 
     }); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setVisible(true); 

    } 

    public static void main(String[] args) { 
     JEditorPaneTestApp test = new JEditorPaneTestApp(); 
    } 
} 


감사

답변

3
System.out.println(editorPan.getText(pos--, pos).charAt(0)); 

은 다음과 같아야합니다

System.out.println(editorPan.getText(pos--, 1).charAt(0)); 
+0

, 그래서 사실, 그래서 간단한 덕분에 많은 !!!!! – Arnon