2012-02-05 14 views
8

Esiste un'implementazione o una libreria standard che fornisce un interruttore a levetta della GUI in Swing? So che Swing fornisce un interruttore pulsante, ma l'UX lascia un po 'a desiderare. Sto cercando questo:Esiste un interruttore di commutazione GUI standard in Java?

enter image description here

Inoltre, c'è un termine canonico per questo tipo di controllo? Apple HIG si riferisce ad esso come un UISwitch. Ho anche provato a cercare "toggle switch", ma non ho avuto molta fortuna. (Un sacco di risultati JavaScript, ma niente di nativo.)

+0

esempi simili possono essere trovati [qui] (http : //stackoverflow.com/a/5528653/230513) e [qui] (http://stackoverflow.com/a/6036048/230513). – trashgod

risposta

8

È possibile simularlo utilizzando due icone da rappresentare su & e impostarle su JToggleButton.

Per inciso, gli utenti desiderano vedere GUI logiche e coerenti che rappresentano il "percorso di minima sorpresa", sono gli sviluppatori che pensano che gli utenti desiderino una GUI "bella, intelligente" (e che possano progettarne una). Perché mai vorrebbe un tale controllo su un pulsante di attivazione standard?

+4

Un pulsante di attivazione come quello imita un vero interruttore fisico, quindi fintanto che l'utente sa cosa aspettarsi quando interagisce con esso, ci sarà una sorpresa minima in effetti. +1 per 'JToggleButton', è un modo più semplice per farlo e risparmiare tempo senza doverlo reinventare. – rtheunissen

+0

Apple sembra apprezzare l'idea: http://goo.gl/EhyDm – rtheunissen

+0

@ paranoid-android Finché è un componente normale del sistema operativo, non è più il percorso di sorpresa minima. OTOH Io sostengo che è solo un modo (e non necessariamente il migliore) per rappresentare un "interruttore modificabile". Un pulsante di attivazione o una casella di controllo sono altri due modi. –

3

L'oscillazione non ha un interruttore standard come quello che hai descritto. La tua migliore scommessa se non riesci a trovare una terza persona sarebbe semplicemente scriverne una. Il modo in cui mi piacerebbe avvicino sarebbe una struttura semplice come questo:

JLabel
• Override paintComponent
• Controllare lo stato con qualcosa di simile isOn()
• Aggiungere un MouseListener ai toggle Stato.
• La verniciatura personalizzata tiene conto dei valori e delle dimensioni dell'etichetta.

Potrei inviarti uno che ho scritto qualche tempo fa, ma probabilmente hai un'idea molto specifica di ciò che vuoi, quindi potrebbe valere la mezz'ora per costruirlo.

+0

L'implementazione di 'Icon' è anche un modo conveniente per cambiare l'aspetto. – trashgod

5

Non so di uno standard, ma Gerrit Grunwald che crea i componenti in acciaio della serie creato un'implementazione di questo che egli chiama un Steel Checkbox

Steel checkbox

+0

Il blog di Gerrit è una grande risorsa. Grazie! – cbednarski