Problème:Essayer de se concentrer sur JTextPane après sur l'élément JList doubleclicking (Java)
je l'JList suivante que j'ajouter à la textPane, et le montrer sur le caret en mouvement. Cependant, après un double-clic sur l'élément Jlist, le texte est inséré, mais le curseur n'apparaît pas dans le JTextPane.
Voici le code suivant:
listForSuggestion = new JList(str.toArray());
listForSuggestion.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listForSuggestion.setSelectedIndex(0);
listForSuggestion.setVisibleRowCount(visibleRowCount);
listScrollPane = new JScrollPane(listForSuggestion);
MouseListener mouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent mouseEvent) {
JList theList = (JList) mouseEvent.getSource();
if (mouseEvent.getClickCount() == 2) {
int index = theList.locationToIndex(mouseEvent.getPoint());
if (index >= 0) {
Object o = theList.getModel().getElementAt(index);
//System.out.println("Double-clicked on: " + o.toString());
//Set the double clicked text to appear on textPane
String completion = o.toString();
int num= textPane.getCaretPosition();
textPane.select(num, num);
textPane.replaceSelection(completion);
textPane.setCaretPosition(num + completion.length());
int pos = textPane.getSelectionEnd();
textPane.select(pos, pos);
textPane.replaceSelection("");
textPane.setCaretPosition(pos);
textPane.moveCaretPosition(pos);
}
}
theList.clearSelection();
Toute idée sur la façon de « de mise au point » la sélection sur la JList ou faire le caret apparaissent sur le JTextPane après l'insertion de texte?
Je vais élaborer plus si ce n'est pas assez clair. S'il vous plaît, aidez, merci!
@aioobe: Hmm. D'abord essayer cela a fonctionné. Ensuite, je double à nouveau la liste, et après le texte apparaît sur le panneau de texte, pas plus de Caret. Pourquoi est-ce si bizarre? –
J'ai remarqué qu'après avoir double-cliqué sur la deuxième fois, la mise au point se fait sur le 'JToolBar' (un des boutons). Que devrais-je faire? –
Essayez d'inclure le grabfocus dans un SwingUtilities.invokeLater. – aioobe