Как полностью отключить взаимодействие с произвольным компонентом в 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 и перечислить нужные эвенты.

В джавадоке есть пример.

→ Ссылка