소프트웨어에 대한 간단한 도움말 시스템을 구축하려고합니다.
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();
}
}
감사
, 그래서 사실, 그래서 간단한 덕분에 많은 !!!!! – Arnon