Highlight error line in editor

This commit is contained in:
Victor 2014-09-18 14:08:15 +03:00
parent f2049dd085
commit 37a802603f
2 changed files with 15 additions and 0 deletions

View File

@ -19,6 +19,7 @@ import javax.swing.JTextPane;
import javax.swing.event.CaretEvent; import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener; import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException; import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent; import javax.swing.text.JTextComponent;
import javax.swing.text.Utilities; import javax.swing.text.Utilities;
@ -97,6 +98,7 @@ public final class AnalyzerPanel extends JPanel {
try { try {
syn.analyze(); syn.analyze();
} catch (ExceptionWithLineNumber ex) { } catch (ExceptionWithLineNumber ex) {
highlightErrorLine(ex.getLineNumber() - 1);
showMessageBox("Error", ex.getMessage(), true); showMessageBox("Error", ex.getMessage(), true);
return; return;
} }
@ -134,4 +136,13 @@ public final class AnalyzerPanel extends JPanel {
} catch (IOException ex) {} } catch (IOException ex) {}
return text.toString(); return text.toString();
} }
private void highlightErrorLine(int line) {
final Element map = textPane.getDocument().getDefaultRootElement();
final Element lineElem = map.getElement(line);
int endOffset = lineElem.getEndOffset();
if (line == map.getElementCount() - 1) endOffset--;
textPane.requestFocusInWindow();
textPane.select(lineElem.getStartOffset(), endOffset);
}
} }

View File

@ -12,6 +12,10 @@ public abstract class ExceptionWithLineNumber extends Exception {
super(message); super(message);
this.lineNumber = lineNumber; this.lineNumber = lineNumber;
} }
public int getLineNumber() {
return lineNumber;
}
@Override @Override
public String getMessage() { public String getMessage() {