Как полностью отключить взаимодействие с произвольным компонентом в 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){}
}));
Есть ли у кого-то идея, как это можно сделать?
Источник: Stack Overflow на русском