我在JScrollPane中有一个简单的JEditorPane,它在左侧显示行号。它的效果很好,除非你将窗口移出屏幕并再次将其拉回,当你停止拖动它时会看到这个:
任何想法?我是否需要监听移动/拖动事件并在某处调用重绘/重新验证?
认为它可能是显而易见的,但这里有一些代码。我正在使用JSyntaxPane。
public EditorPanel()
{
this.setLayout(new BorderLayout());
PythonSyntaxKit.initKit();
codeEditor = new JEditorPane();
JScrollPane scrPane = new JScrollPane(codeEditor);
Dimension d = new Dimension(710,702);
codeEditor.setPreferredSize(d);
codeEditor.setContentType("text/python");
codeEditor.setText("Welcome to PhysUtil!");
this.add(scrPane, BorderLayout.CENTER);
toolbar = new PhysUtilToolbar();
this.add(toolbar, BorderLayout.PAGE_START);
this.repaint();
}
//from MainFrame Class...
public EditorPanel mainEditor;
public MainFrame()
{
//Someone can figure out how to load the icon...kept throwing an error
//ImageIcon icon = new ImageIcon(getClass().getResource("exit.png"));
PhysUtilMenuBar menuBar = new PhysUtilMenuBar();
this.mainEditor = new EditorPanel();
menuBar.editorPanel = mainEditor;
this.setJMenuBar(menuBar);
this.setTitle("PhysUtil");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(mainEditor);
Image icon = Toolkit.getDefaultToolkit().getImage("icon.jpg");
this.setIconImage(icon);
this.setSize(800, 800);
this.setLocation(0, 0);
this.setVisible(true);
}
答案 0 :(得分:2)
添加一个WindowListener / WindowStateListener / WindowFocusListener ...并查看拖动应用时会触发的事件。到二级屏幕和/或后面。从那里,如果您知道触发的事件,请尝试监听最终事件(无论它将是什么)并使编辑器区域无效(使其变脏)并重新绘制它。 SSCCE也会有所帮助。