Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [java] trovare finestra parent

    Ciao,
    ho un bottone contenuto in una finestra e vorrei, alla pressione di questo, mediante la cattura dell'evento, determinare facilmente a quale finestra tale bottone appartiene.

    Ora nel gestore degli eventi mi tocca fare questo:
    codice:
    ((Window)((Component)((Component)((JPanel)((JButton)e.getSource()).getParent()).getParent()).getParent()).getParent()).dispose();
    Mi sembra parecchio orribile e soprattutto non riutilizzabile per finestre diverse.

    Come faccio?

    Ciao!

  2. #2

    Re: [java] trovare finestra parent

    Originariamente inviato da superpelo
    Ciao,
    ho un bottone contenuto in una finestra e vorrei, alla pressione di questo, mediante la cattura dell'evento, determinare facilmente a quale finestra tale bottone appartiene.

    Ora nel gestore degli eventi mi tocca fare questo:
    codice:
    ((Window)((Component)((Component)((JPanel)((JButton)e.getSource()).getParent()).getParent()).getParent()).getParent()).dispose();
    Mi sembra parecchio orribile e soprattutto non riutilizzabile per finestre diverse.

    Come faccio?

    Ciao!
    Non l'ho mai utilizzato ma se non sbaglio c'è un metodo getTopLevelAncestor che serve proprio a questo
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Non fai prima ad estendere la classe JButton in modo da prendere nel costruttore un riferimento al suo contenitore e fartelo restituire?
    codice:
    public class MioBottone extends JButton {
       private Container c;
       public MioBottone(Container c, String s) {
          super(s);
          this.c = c;
          ...
       }
    
       public Container getContainer() { return c; }
    }
    
    ...
    
    public class Finestra extends JFrame {
       ...
       private MioBottone mb;
       ...
       public Finestra() {
          mb = new MioBottone(this, "Ciao");
          getContentPane().add(mb);
       }
       ...
       public void actionPerformed(ActionEvent ae) {
          Container c = ((MioBottone) ae.getSource()).getContainer();
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.