Czy ktoś może mi pomóc zrozumieć następującą konstrukcję? Mam problem ze zrozumieniem, jeśli jest to inicjator lub anonimowa klasa. Nie znam tej składni.
JTable jt = new JTable(data, fields) **{
public TableCellRenderer getCellRenderer(int row, int column) {
// TODO Auto-generated method stub
return renderer;
}
};**
Odpowiedzi:
6 dla odpowiedzi № 1Tworzy anonimową klasę wewnętrzną, która rozszerza JTable i nadpisuje metodę getCellRenderer.
Długie wyjaśnienie:
Tworzysz klasę, która rozszerza JTable bez jawnego przypisania jej nazwy zamiast używania deklaracji standardowej klasy:
public class ExtendedJTable extends JTable{}
Widoczność tej klasy jest ograniczona doklasa, w której jest zdefiniowana i utworzona. Jest to bardzo przydatne na przykład wtedy, gdy potrzebujesz, tak jak w opublikowanym przez ciebie kodzie, nadpisanie metody (getCellRenderer ()) określonej klasy (JTable), w niektórych celach ograniczonych do bieżącego kontekstu klasy.
Takie podejście ma pewne zalety, a także pewne ograniczenia. Dla głębszej dyskusji przyjrzyj się temu artykuł.
2 dla odpowiedzi nr 2
Robisz 2 rzeczy tutaj:
- utworzyć obiekt klasy, która rozszerza JTable. To jest anonimowa klasa, ponieważ nie jest zadeklarowana osobno nigdzie indziej.
- W tej klasie nadpisujesz metodę JTable getCellRenderer (int row, int column);