2011-02-07 5 views
3

Предположим, у вас есть JCheckBox, который вы хотите использовать в качестве индикатора включения/выключения. Вы используете setEnabled(false) для отключения щелчков мышью на JCheckBox. Но setEnabled(false) также выделяет checkbox и текст checkbox. Есть ли способ настроить setEnabled(false) так, чтобы седаться не было?Есть ли способ настроить Java setEnabled (false)?

Если это невозможно, это единственное решение, что-то вроде линий ButtonModel?

+2

Если вы хотите, чтобы для всех ваших флажков изменились внешний вид и ощущение. Чтобы отключить мыши, вы также можете добавить над ним прозрачный компонент (вы также должны отключить прием фокуса, или пользователь может использовать клавиатуру для его проверки). – mihi

+0

Это распространенная проблема с интерфейсами пользовательского интерфейса. Состояние отключено (только для чтения) не очень читаемо. Мне интересно, что делают другие, чтобы решить эту проблему. –

+2

Используйте другой элемент пользовательского интерфейса, возможно, JLabel с изменяющимся текстом или что-то еще. Флажки являются «зарезервированными элементами» в терминах удобства использования. Использование флажка в качестве индикатора, который нельзя использовать для изменения настройки, аналогичен использованию #define, чтобы сделать C похожим на другой язык. Конечно, это законно, но почему вы когда-нибудь заставляете пользователей проходить эту боль? – jprete

ответ

5

Вы можете подклассифицировать JCheckBox и переопределить processMouseEvent/processKeyEvent, чтобы ничего не делать.

public class ReadOnlyCheckBox extends JCheckBox { 
    public ReadOnlyCheckBox (String text, boolean selected) { 
     super(text,selected); 
    } 

    protected void processKeyEvent(KeyEvent e) { 
    } 

    protected void processMouseEvent(MouseEvent e) { 

    } 
} 
+0

+1 для очень полезного решения. – Arvanem

2

Расширение JCheckBox позволит вам переопределить метод setEnabled и передать свой CustomJCheckBox на любой код, ожидающий JCheckBox в качестве параметра. Это должно помешать вам переопределить все остальное из флажка, как и для реализации ButtonModel.

Я немного смущен тем, что вы используете для этого флажка - он не включен, но вы все еще хотите, чтобы чек появился или нет, на основе какого-то другого параметра? Зачем использовать входной элемент в этом случае?

+0

Чтобы устранить путаницу - внешний вид JCheckBox полезен и ясен, чтобы указать, была ли установлена ​​настройка или нет. Да, это элемент ввода, но идея состоит в том, чтобы отключить ввод. – Arvanem

+0

Я чувствую, что вы можете столкнуться с проблемами с путаницей пользователя, не указав четко, что этот флажок не будет отвечать на клики. Любая причина, по которой вы не можете использовать какой-либо значок с включенным/отключенным? –

Смежные вопросы