Java: Qualche modo per squirrelling un oggetto su un Componente da qualche parte nel Componente?

StackOverflow https://stackoverflow.com/questions/227249

  •  03-07-2019
  •  | 
  •  

Domanda

Come seguito alla mia sulla domanda java.awt.Component .getName () proprietà , mi chiedo se esiste un modo per fare scoppiare un oggetto arbitrario da qualche parte in un Componente, simile a proprietà tag in .NET ? Questo sarebbe davvero utile per qualsiasi codice che funzioni con un componente ma non necessariamente quale sia quel componente.

Ad esempio, supponiamo che stia cercando di implementare un sistema di aiuto a livello di applicazione che sappia guardare qualsiasi componente attualmente puntato dal mouse, raggiungere quel componente ed estrarre il testo della guida e visualizzarlo nel suo riquadro sullo schermo (no, non voglio usare una descrizione comando). La mia risposta attualmente è usare il Nome (getName () / setName ()) per memorizzare il testo di aiuto, e questo funzionerà, ma il Nome deve essere una stringa. Se volessi diventare più elaborato e conservare qualcosa di diverso da una stringa, penso che sarei bloccato.

È stato utile?

Soluzione

Generalmente creo un hash e inserisco (componente, cookie) ogni volta che aggiungo un componente allo schermo. Quando hai bisogno del tuo oggetto cookie (forse in un evento), l'evento ottiene sempre una copia del componente, e quindi sei solo un get (componente) di distanza dal tuo cookie.

In alcune condizioni estreme, ho sottoclassato il controllo e ho appena aggiunto un campo. È una soluzione rapida e sporca poiché la sottoclasse del componente è proprio come poche righe di codice e può andare nella stessa classe del file in cui si sta generando lo schermo. Ciò è utile solo se hai solo bisogno di archiviare i tuoi dati collegati a un singolo tipo di controllo.

Altri suggerimenti

JComponent ha putClientProperty e getClientProperty .

Il componente non ha modo di farlo. Tuttavia, un'opzione sarebbe quella di utilizzare una mappa statica e fornire un wrapper attorno ad essa in modo da poter eseguire una query per i dati relativi a qualsiasi UI (o altro) oggetto. Ho già fatto questo genere di cose prima e fintanto che lo configuri come un tipo di servizio con interfacce, può essere piuttosto elegante e non rompe il tuo design OO.

Sì, potresti usare get / setName per impostare un tipo di identificatore, quindi usare quell'identificatore per mappare il tuo aiuto. il materiale CSH JavaHelp funziona in questo modo, tranne per il fatto che credo che stia mettendo il componente stesso in una mappa?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top