Donc Im en essayant d'écrire un éditeur simple. Je veux colorier sorcière grise tous les caractères sont entre « caractères Fragment qui le fait est:.JTextPane couleur tout au lieu de quelques caractères
class MainPanel extends JPanel {
private int WIDTH = 800;
private int HEIGHT = 500;
private JTextPane codePane = new JTextPane(); //Pole, w które wpisywany jest kod
private JLabel codeLabel = new JLabel("JNotepad");
private StyledDocument doc = codePane.getStyledDocument();
private final String[] keywords; //Słowa kluczowe
private final Map<String, String> shortcuts = new HashMap<>(); //syso -> System.out.println() itp.
MainPanel() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setLayout(new BorderLayout());
//Dodanie głównego pola w polu przewijanym
JScrollPane scroll = new JScrollPane(codePane);
add(scroll, BorderLayout.CENTER);
add(codeLabel, BorderLayout.SOUTH);
codePane.addKeyListener(new KeyHandler());
codePane.setFont(new Font("Monospaced", Font.PLAIN, 15));
//Załadowanie słów kluczowych
Scanner in = new Scanner(getClass().getResourceAsStream("res/keywords.txt"));
List<String> words = new LinkedList<>();
while (in.hasNext()) {
words.add(in.nextLine());
}
keywords = words.toArray(new String[words.size()]);
in.close();
}
private class KeyHandler extends KeyAdapter {
@Override
public void keyReleased(KeyEvent ev) {
highlight();
}
private void highlight() {
String code = codePane.getText();
//Zmiana koloru słów kluczowych
String[] words = code.replaceAll("\\(|\\)|\\{|\\}|\\[|\\]", " ").split("\\s");
int lastIndex = 0;
for (int a = 0; a < words.length; a++) {
SimpleAttributeSet set = new SimpleAttributeSet();
if (Arrays.asList(keywords).contains(words[a])) {
StyleConstants.setForeground(set, Color.BLUE);
}
doc.setCharacterAttributes(lastIndex, lastIndex + words[a].length(), set, true);
//Zwiekszenie ostatniego indexu
lastIndex += words[a].length() + 1; //+1 bo jeszcze spacja
}
}
}
}
Lorsque » se produit, il peint des caractères gris, mais il peint tous les caractères après le premier signe "Qu'est-ce. mal avec ce code EDIT: vous êtes, voici le code complet
Votre soulution ne fonctionne pas + que voulez-vous dire par "\"? – user2102972
Eh bien, c'est le cas. Pour code = "test1 \" test2 \ "test3 test4 \" test5 \ "" il imprime test2test5 sans guillemets. – rebeliagamer
Mais mon problème n'est pas d'imprimer correctement mais de bien colorier les lettres du volet. Les lettres après le guillemet sont toujours colorées ce qui est mauvais comportement. Et aussi je veux que les marques de qutation soient colorées aussi. Si vous voulez je peux vous donner le code entier pour voir le problème – user2102972