D
Le
jp

Bonjour,
Est-ce que quelqu'un sait comment faire pour désactiver Ctrl+C, Ctrl+X et
Ctrl+V dans une JList?
Pour un objet qui hérite de JTextComponent je sais comment faire. Il
suffit de surcharger les méthodes cut(), copy() et paste(). Mais pour une
JList je ne vois pas comment. Y-a-t-il une méthode simple pour y arriver?
Merci d'avance.
Est-ce que quelqu'un sait comment faire pour désactiver Ctrl+C, Ctrl+X et
Ctrl+V dans une JList?
Pour un objet qui hérite de JTextComponent je sais comment faire. Il
suffit de surcharger les méthodes cut(), copy() et paste(). Mais pour une
JList je ne vois pas comment. Y-a-t-il une méthode simple pour y arriver?
Merci d'avance.
Le 25/03/2018 05:54, jp a écrit :
Je ne suis sûr de rien, mais n'y aurait-il pas moyen de capturer
les saisies au clavier et de filtrer les évènements pour ne pas
les transmettre aux éléments suivants ? Note que si cette méthode
fonctionne il te faudra aussi filtrer Ctrl+Inser et Shift+Inser
pour interdire tout copier coller.
Mais j'ai une petite question annexe : pour quelle raison interdire
cette fonctionnalité ? Ne pas l'avoir est *très* désagréable pour
l'utilisateur.
P.-S. : à moins que tu n'utilises vraiment l'adresse bloiiing.invalid
chez yahoo.com, le .invalid est au mauvais endroit : il faudrait
prendre plutôt ou
si cette adresse n'est pas valide.
--
Olivier Miakinen
Oui mais comment?
Ce ne serait pas dans tout le logiciel. Seulement au niveau de ma JList.
J'ai trouvé ça sur le net:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
//Intercepting Ctrl+v demo
public class TestEditorPane {
private JEditorPane editorPane;
public static class CombinedAction implements ActionListener {
private final ActionListener action1;
private final ActionListener action2;
public CombinedAction(ActionListener action1, ActionListener
action2) {
super();
this.action1 = action1;
this.action2 = action2;
}
@Override
public void actionPerformed(ActionEvent e) {
if (action1 != null) {
action1.actionPerformed(e);
}
if (action2 != null) {
action2.actionPerformed(e);
}
}
}
public TestEditorPane() {
}
private void initUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// JTEXTBOX
editorPane = new JEditorPane();
KeyStroke ctrlV = KeyStroke.getKeyStroke(KeyEvent.VK_V,
KeyEvent.CTRL_DOWN_MASK);
final ActionListener ctrlVAction =
editorPane.getActionForKeyStroke(ctrlV);
editorPane.registerKeyboardAction(new CombinedAction(ctrlVAction,
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("This is my action on CTRL+V");
//Effectivement ça permet une action, mais le Ctrl-V à
//quand-même lieu. Comment le supprimer?
}
}), ctrlV, JComponent.WHEN_FOCUSED);
// JSCROLLPANE
JScrollPane scroll1 = new JScrollPane(editorPane);
scroll1.setHorizontalScrollBarPolicy
(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scroll1.setVerticalScrollBarPolicy
(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(scroll1);
frame.setSize(400, 400);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
TestEditorPane test = new TestEditorPane();
test.initUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Ok. Rectifié.
Moi j'ai trouvé ça :
http://www.fobec.com/java/992/intercepter-tous-evenements-clavier.html
La fonction dispatchKeyEvent() laisse passer certains évènements clavier
en retournant 'false' (parfois en les ayant transformés, par exemple les
minuscules qui deviennent des majuscules), mais elle *bloque* d'autres
évènements clavier en retournant 'true' (c'est là qu'il faudra tester
les Ctrl+C et autres).
Merci, mais c'est raté. C'est le nom de domaine de *premier* niveau
nommé .invalid qui a été réservé pour les adresses invalides.
Donc ou , mais pas
(parce que là ce serait un nom de domaine
de *second* niveau .invalid.com).
Cordialement,
--
Olivier Miakinen
// Il y a aussi VK_COPY, VK_CUT et VK_PASTE pour les claviers
// qui possèdent physiquement ces touches.
e.consume(); // Et l'objet qui a émis l'évènement
// l'ignorera
La méthode consume est protected. Comment faire pour l'utiliser dans une
méthode public, car elle n'est pas visible...
Merci de m'avoir répondu.
Je regarde ça...
Ce coup-ci c'est bon. Je ne savais pas que c'était une norme. Je pensais
que c'était un usage non codifié...
Merci.
Je la vois toujours en public.