gpt4 book ai didi

Java:包裹在 JScrollPane 中的 JEditorPane 的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:21 24 4
gpt4 key购买 nike

我正在尝试为我的软件构建一个简单的帮助系统。
由JEditorPane(加载HTML文件)构建的帮助系统包裹在JScrollPane内,在同一个窗口内有一个JLabel。
当用户将鼠标移到 JEditorPane 上的特定单词上时 - JLabel 中会出现更多解释。

我成功了,但问题是,出于某种原因,它只在文本的开头工作。(HTML 文件很长,必须滚动...)
在我向下滚动页面并将鼠标悬停在一个词上后,它抛出 BadLocationException

在下面的代码中,有一个 JEditorPane 包裹在 JScrollPane 中。
当用户移动鼠标时,它打印鼠标指向的当前字母。(在帮助系统上我通过这个位置找到单词的值并根据它打印对 JLabel 的解释)< br/>但是,正如我所说,它只在文本的开头起作用。
为什么?



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


谢谢

最佳答案

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

应该是:

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

关于Java:包裹在 JScrollPane 中的 JEditorPane 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com