Domanda

Sto avendo difficoltà a capire questo fuori.

La situazione non è difficile immaginare quindi spero ho potuto inviare questo senza un codice di esempio. Ho JPanel con CardLayout. Il pannello contiene diversi altri pannelli come singole schede. Quello che sto cercando di achive è quello di creare un JButton che renderà il pannello spettacolo principale scheda ultima apertura (quello prima che la corrente è stato mostrato). Nessun grosso problema ho pensato in un primo momento.

Così ho iniziato dal pensiero come ottenere la scheda visibile corrente (pannello) e ha scoperto che non esiste un metodo nativo per questo nel Pannello o meglio CardLayout che contiene solo metodi prima (), Last (), next () e precedente (), che non servono a me.

Poi ho pensato che forse più adeguati per svolgere il mio obiettivo potrei passare attraverso tutti i componenti del pannello principale e la prova che uno è visibile che sarebbe quella attuale. Lo trovo un po 'complicato, bene, ma come faccio a fare questo spettacolo pannello da CardLayout se non ho il suo nome carta di chiamare il metodo CardLayout spettacolo (genitore, il nome)?

A questo punto, non ho idea. Ho cercato su Internet, ma non ho trovato una soluzione, solo che poche persone hanno cercato di capire qualcosa di simile. Quindi spero che qualcuno che già delt con questo tipo di problema si imbatte in questa discussione: -)

Grazie per eventuali suggerimenti.

Con i migliori saluti

Martin S.

È stato utile?

Soluzione

Questo solleva la questione di come si è arrivati ??al la scheda corrente, in primo luogo. Se è stato utilizzato next() per arrivare alla scheda corrente, quindi previous() si arriva alla scheda precedente e viceversa. Se si utilizza first() o last(), allora sei fuori di fortuna.

Naturalmente, si può sempre duplicare alcune delle informazioni memorizzate dal CardLayout per raggiungere il tuo obiettivo: se si mantiene un array di nomi dei componenti (e aggiornarlo ogni volta che si chiama addLayoutComponent), nonché un indice precedente (e aggiornare questo con next, previous e altre chiamate), allora si può solo ricerca il nome del componente e l'uso precedente show di mostrare la carta precedente.


Aggiornamento: Dal momento che si conoscono i nomi delle schede, ecco come è possibile mantenere il precedente nome della scheda:

String prevTab, curTab;

public void showTab(String newTab) {
  prevTab = curTab;
  curTab = newTab;
  layout.show(parent, curTab);
}

public void goBack() {
  layout.show(parent, prevTab);
}

Altri suggerimenti

È possibile creare una mappa mappa oggetto. E aggiungere pannelli e nomi di layout della carta e alla mappa. In seguito, se avete la JPanel mostrato in precedenza, si ottiene il suo nome da mappa tramite map.get (JPanel p). E per trovare ciò che JPanel era visibile prima del momento, è necessario aggiungere ComponentListener ad ogni JPanel. E fa per cambiare un po 'variabile statica in caso di evento componentHidden (per esempio statico JPanel prev_shown).

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