Toon posts:

[Java] TableModels

Pagina: 1
Acties:

Verwijderd

Topicstarter
Situatieschets:

Ik heb in mijn applicatie een JTable die de data toont die mijn applicatie beheert. Omdat ik verschillende overzichten in deze zelfde tabel toon maak ik gebruik van diverse TableModels.

Om interactie tussen de gebruiker en de data te bewerkstelligen zit er aan de JTable een MouseAdapter vast. Wanneer de gebruiker nu op de data in de tabel klikt moet er iets gebeuren met de data (wat er dan gebeurt is niet van toepassing). Daar dit per Model weer verschilt wil ik een functie starten die voor het dan geladen TableModel van toepassing is.

Het probleem is nu dat ik wel het TableModel op kan vragen welke nu geladen is, maar mijn functie is niet ondergebracht in TableModel, maar in mijn eigen gedefinieerde TableModel welke weer een uitbreiding is van de klasse AbstractTableModel.

Moet ik nu perse mijntabel.getModel() casten naar het onderliggende zelfgedefinieerde model of is er nog een mogelijkheid om mijn functie direct aanspreekbaar te maken zodat ik niet hoef te casten?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11:06

Robtimus

me Robtimus no like you

Je hebt een verzameling eigen implementaties van TableModel, die allemaal dezelfde eigen method implementeren? Wat je dan kan doen is die method in een interface zetten (MyTableModel oid), en dan al die eigen implementaties ook MyTableModel laten implementeren. Je hoeft dan alleen maar te casten naar die ene interface. Als je maar 1 implementatie hebt is die interface natuurlijk niet noodzakelijk.

Maar ja, als je methods van een class wilt gebruiken die een subclass / implementatie is van de gereturnde waarde van je getModel() method, dan moet je casten. Zit weinig anders op.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik denk dat je in dit geval idd zult moeten casten naar je eigen tablemodel.

JTable table = ...;
JouwTableModel model = (JouwTableModel)table.getModel();
model.jouwFunctie().

Je kan eventueel ook kijken naar covariante return types (dus je maakt een subclass van JTable en bij getModel is het return type geen TableModel, maar JouwTableModel. Ik denk dat dit in dit geval een beetje overkill is. Zo nu en dan een keer casten is geen doodzonde hoor... maak de oplossing niet erger dan het probleem.

[ Voor 13% gewijzigd door Alarmnummer op 04-08-2004 13:55 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Kan je niet voor elke TableModel geen aparte MouseAdapter maken, en dan als je van TableModel wisselt, meteen van MouseAdapter wisselen?

"Beauty is the ultimate defence against complexity." David Gelernter