Java Swing - JList пользовательский рендеринг ячейки - получение действий

Есть два способа перегрузить операторы :

  • как «свободную» функцию (т.е. не являющуюся членом) вне класса, для которого вы хотите их перегрузить,
  • как функция-член.

Приведенная выше ссылка поясняет в хорошей таблице, что перегрузка возможна в виде функций-членов для =, (), [] и ->, но запрещена как свободная функция ,

Кроме того, оператор разрешения области действия ::, а также доступ к элементу ., краткий указатель доступа к элементу на элемент .* и троичный условный оператор x ? y : z не могут быть перегружены [ 1112] вообще.


Редактировать: Вот пример , где operator* определен как функция-член и operator+ как не-функция:

class Rational {
    int p; 
    int q; 
public:  
    Rational (int d=0, int n=1) : p{d}, q{n} { } 
    Rational operator*(const Rational& r) const {    // for curent object * r
        return Rational(p*r.p,q*r.q); 
    }
    int numerator() const {return p; }
    int denominator() const { return q; } 
}; 

Rational operator+(const Rational &a, const Rational &b) {   // for object a + object b
    return Rational(a.numerator()*b.denominator()+b.numerator()*a.denominator(),
                                                      a.denominator()*b.denominator());
}

6
задан Evan Fosmark 13 April 2009 в 03:25
поделиться

2 ответа

Элемент, который вы возвращаете как средство визуализации ячеек списка, предназначен именно для этого: рендеринга . Зарегистрируйте слушателей в JList (обычно вам нужен ListSelectionListener).

6
ответ дан 8 December 2019 в 13:49
поделиться

Рендерер может выглядеть как фабрика для возврата компонентов для ячеек, но на самом деле он соответствует навесному весу рендеринг и использует один и тот же компонент для визуализации всех ячеек (каждый вызов getListCellRendererComponent () должен реконфигурировать один и тот же экземпляр компонента для конкретной ячейки и вернуть его так,

Таким образом, вы можете иметь JList (а также JTable и JTree ) отображать огромное количество ячеек, не имея создать компоненты для каждой ячейки. Как побочный эффект, компонент рендеринга не может реагировать на события, так как он используется только во время цикла рендеринга, но не появляется в дереве компонентов.

Как сказал Нил Коффи,

11
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: