Можно ли связать количество выбранных элементов в JTable? - PullRequest
1 голос
/ 09 ноября 2011

Я хотел бы иметь метку или текстовое поле с номером, представляющим количество строк, выбранных в JTable. Я использую Netbeans и экспериментировал со свойствами привязки ... В JTable есть свойство selectedElements ... похоже на

jTable[${selectedElements.length}]

или

jTable[${selectedElements.size}]

должен сделать свое дело, если привязан к свойству text метки / текстового поля. Конечно, это не работает. Можно ли использовать связывающее выражение для получения количества выбранных элементов?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Я бы ожидал, что второй вариант сработает, но это не так.Причина, вероятно, заключается в следующем (из api doc ELProperty)

Очень важно, чтобы любые свойства компонента, адресованные через ELProperty, следовали спецификации Java Beans, включая уведомление об изменении свойства запуска;в противном случае ELProperty не может ответить на изменение

метод size () списка не соответствует ни одному из двух условий.

один выход - подключить конвертер (ручное кодирование), никогда не будет использовать Netbeans: -)

    AutoBinding sizeBinding = 
        Bindings.createAutoBinding(UpdateStrategy.READ,
            table, ELProperty.create("${selectedElements}"),
            countLabel, BeanProperty.create("text")
            );
    Converter<List<?>, String> converter = new Converter<List<?>, String>() {

        @Override
        public String convertForward(List<?>value) {
            if (value !=  null) {
                return "" + value.size();
            }
            return "empty";
        }

        @Override
        public List<?> convertReverse(String value) {
            return null;
        }

    };
    sizeBinding.setConverter(converter);

Другой способ - реализовать и подключить BeanAdapterProvider / -Factory, как упоминалось в том же документе, не пытался.

2 голосов
/ 09 ноября 2011

Вы можете получить количество выбранных строк, используя JTable#getSelectedRowCount(). Чтобы привязать вашу метку к этому, вы можете добавить прослушиватель выбора списка в модель выбора списка, а когда значение изменится, вы можете обновить текст на вашей метке.

Я не уверен, как использовать Netbeans для достижения этой цели, но вы можете сделать это с помощью стандартных компонентов Swing.

...