Si vous voulez que votre nouvelle ligne d'avoir la même empreinte que le précédent, vous pouvez le faire en vérifiant simplement les premiers caractères de la ligne précédente. Regardez cela:
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainFrame = new JFrame("test");
mainFrame.setSize(300, 100);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = mainFrame.getContentPane();
pane.setLayout(new BorderLayout());
JTextPane jtp = new JTP();
pane.add(jtp);
mainFrame.setVisible(true);
}
});
}
static class JTP extends JTextPane {
JTP() {
((AbstractDocument)getDocument()).setDocumentFilter(new Filter());
}
}
static class Filter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
StringBuilder indentatedString = new StringBuilder(string);
if(string.equals("\n")) {
AbstractDocument doc = ((AbstractDocument)fb.getDocument());
Element line = doc.getParagraphElement(offset);
int lineStart = line.getStartOffset(), lineEnd = line.getEndOffset();
String content = doc.getText(lineStart, lineEnd - lineStart);
int start = 0;
while(content.charAt(start)==' ') {
indentatedString.insert(0," ");
start++;
}
}
fb.insertString(offset, indentatedString.toString(), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
if(text.==0) {insertString(fb, offset, text, attrs);}
else if(text.length()>0) {remove(fb, offset, length);insertString(fb, offset, text, attrs);}
else {fb.replace(offset, length, text, attrs);}
}
}
}
La partie importante ici est seulement le DocumentFilter qui fait le travail.
Si vous tentez d'implémenter un éditeur de code source, vous pouvez consulter le JEditorPane [https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html](https://fr docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html) et le StyledEditorKit [https://docs.oracle.com/javase/8/docs/api/javax/swing/text/StyledEditorKit.html] (https://docs.oracle.com/javase/8/docs/api/javax/swing/text/StyledEditorKit.html). – VirtualMichael
Si l'une de nos solutions a résolu votre problème, veuillez sélectionner la meilleure réponse. Si vous avez encore des problèmes, n'hésitez pas à nous le faire savoir. – Sharcoux