Как полностью отключить взаимодействие с произвольным компонентом в Swing?
Допустим, у нас есть компонент c
. Он представлен объектом, так что мы никак не можем заменить его класс и переопределить методы. Компонент может быть любым.
Задача следующая: нужно сделать так, чтобы ни клавиатурой, ни мышью, ни чем-либо ещё нельзя было бы изменить данные компонента (набрать текст, нажать кнопку, выбрать элемент в JComboBox
и т. д.).
Я пытался обернуть компонент в JLayer<>
, но, кажется, это работает так себе:
add(new JLayer<JComponent>(c,new LayerUI<>(){
protected void processMouseEvent(MouseEvent e,JLayer<? extends JComponent>l){e.consume();}
protected void processKeyEvent(KeyEvent e,JLayer<? extends JComponent>l){e.consume();}
protected void processMouseMotionEvent(MouseEvent e,JLayer<? extends JComponent>l){e.consume();}
protected void processComponentEvent(ComponentEvent e,JLayer<? extends JComponent>l){}
protected void processFocusEvent(FocusEvent e,JLayer<? extends JComponent>l){}
}));
Есть ли у кого-то идея, как это можно сделать?
Ответы (1 шт):
Автор решения: talex
→ Ссылка
Почти правильно.
Нужно только вызвать setLayerEventMask
и перечислить нужные эвенты.
В джавадоке есть пример.