2012-03-07 12 views
6

Voglio scoprire se JPanel è sullo schermo o no. Ciò non significa che il metodo isVisible() potrebbe essere utilizzato per questa situazione. Voglio dire, voglio scoprire se un componente che è stato avviato prima, attualmente è uno dei componenti sul mio pannello principale o meno.come trovare un componente java che viene visualizzato sullo schermo

Modifica e ulteriore spiegazione: nel mio programma sono già stati avviati diversi pannelli e li utilizzo sul mio modulo in base alle esigenze. Voglio sapere per esempio jpanel1 in questo momento su uno qualsiasi dei pannelli che sono presenti sul mio modulo.

Esempio:

public class GUI extends JFrame() { 

    private JPanel1, jPanel2; 

    public static void main(String[] args) { 
     GUI gui = new GUI(); 
     jPanel1 = new JPanel(); 
     jPanel2 = new JPanel(); 
     gui.setContentpane(jPanel1); 
     gui.setVisible(true); 
    } 

} 

ora jPanel1 è visibile sullo schermo bu jPanel2 non è visibile. Come posso scoprire questo?

+0

sì è possibile, ti invitiamo a modificare la tua domanda con un [SSCCE] (http://sscce.org/), forse ci sono un altro scelte – mKorbel

+2

Vuoi dire isShowing() ?: http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html#isShowing() –

+0

@mKorbel: è chiaro e ho spiegato come significare. – sajad

risposta

10

Dopo indagini scopro questo metodo rappresenta che il componente viene visualizzato sullo schermo o meno:

isDisplayable()

nel mio esempio:

jPanel1.isDisplayable() // restituisce true

jPanel2.isDisplayable() // resi false

Semplice come questo!

+1

uno dei possibili modi +1 – mKorbel

+0

@mKorbel quindi ho reinventato la ruota? :) – Juvanis

+0

@deporter Penso di no :-), in fondo la tua risposta va nella giusta direzione, perché devi sapere in ogni momento cosa, dove e come funziona il tuo codice – mKorbel

0

Se stai cercando i figli di un pannello principale, puoi chiamare getComponents() sul pannello principale per restituire un array dei suoi componenti, quindi scorrere attraverso di essi per verificare se qualcuno di essi è il pannello che stai cercando. Potrebbe essere necessario chiamare questo in modo ricorsivo se il pannello non è un figlio diretto del pannello principale.

+0

no Mr. Ho diversi pannelli avviati prima nel mio programma e li uso sul mio modulo, se necessario. Voglio sapere ad esempio jpanel1 adesso su qualsiasi pannello che ora è presente sul mio modulo. – sajad

0

Scrivere la classe del proprio pannello che si estende JPanel. Aggiungi un nuovo metodo a questa classe denominata isOnTheScreen() che restituisce un valore booleano che indica se il pannello viene aggiunto o meno alla finestra.

public class MyPanel extends JPanel 
{ 
    boolean isAdded = false; 

    public boolean isOnTheScreen() 
    { 
     return isAdded; 
    } 

    public void setOnTheScreen(boolean isAdded) 
    { 
     this.isAdded = isAdded; 
    } 
} 

Dopo aver creato i propri oggetti del pannello, utilizzare i metodi di cui sopra per sapere se un pannello viene aggiunto al pannello principale/telaio oppure no. Supponiamo di aver aggiunto un pannello ad un telaio:

JFrame frame = new JFrame() 
MyPanel panel = new MyPanel(); 
frame.getContentPane().add(panel); 
panel.setOnTheScreen(true); 

Non appena lo si aggiunge alla schermata principale, in questo caso un telaio, chiami setOnTheScreen(true) E allo stesso modo chiami setOnTheScreen(false) quando si rimuove il pannello.

Dopo questo disegno è possibile determinare se un pannello viene aggiunto alla finestra principale o no invocando semplicemente isOnTheScreen() in qualsiasi altro punto del codice. Spero che questo design ti aiuti.

+1

grazie, ma questo non è un modo molto pulito. È difficile applicarlo in tutti i miei pannelli. Ho aggiunto un esempio del mio pourpse. Si prega di vederlo – sajad

+0

@sajad questo è un modo molto pulito. se credi nel potere dell'eredità, l'estensione del jpanel non dovrebbe essere difficile. comunque, è solo un suggerimento, quindi devi trovare un'altra soluzione. – Juvanis

+1

-1 a) duplicazione delle funzionalità esistenti, solo peggio (è necessario chiamare il codice client per essere efficace) b) non creare una sottoclasse se non è necessario (_non deve essere difficile_ non è una buona ragione). @sajad ben chiazzato :-) – kleopatra

4

jPanel1.isVisible()==true jPanel1.isVisible()==false

per il pannello jPanel1.isShowing() funziona anche

+1

Sì, 'isShowing()' funziona correttamente per i componenti nelle schede – BullyWiiPlaza

Problemi correlati