Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Использование экземпляра JFrame


Автор: SherbAnt 9.12.2009, 01:26
Доброго времени суток, профессионалы.
Помогите, начинающему java падавану. smile 
В программе имеется экземпляр gui класса "Gui" унаследованного от JFrame (Swing). Есть несколько классов, они же отдельные *.java файлы.
Как использовать один и тот же экземпляр gui из разных классов? Например вызывать некие методы.

например, у меня есть класс Gui
Код

public class Gui extends JFrame{
    private JLabel label = new JLabel("Hello");
        
    public Gui(){
        super("");
        this.setBounds(0,0,250,150);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        Container container = this.getContentPane();
        container.setLayout(new GridBagLayout());
        container.add(label);
    }
        
        public void setText(String a){]
                this.label.setText(a);
        }
}


Хочу создать его экземпляр в, например, Main'е
Код

public class Main {
    public static void main(String[] args){
                Gui gui = new Gui();
                gui.setText("Бла, бла");
        }
}


... и потом пользовать в, например Dig'е

Код

public class Dig{
        public void setGuiText(String a){]
                gui.setText("Бла, бла");
        }
}


Если в Dig'е создавать свой экземпляр класса Gui, то создается новое окно. Может можно как то передавать ссылку на экземпляр, или что то такое?
Краем уха слышал про делегирование и MVC, но разобраться самостоятельно не получается.

Автор: Galaran 9.12.2009, 02:23
Например так:

Код

public class Gui extends JFrame {

      private JLabel label = new JLabel("Hello");

      public Gui() {
            super("");
            this.setBounds(0, 0, 250, 150);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setResizable(false);
            Container container = this.getContentPane();
            container.setLayout(new GridBagLayout());
            container.add(label);
      }

      public void setText(String a) {
            this.label.setText(a);
      }

}


Код

public class Main {

      public static void main(String[] args) throws Exception {
            Gui gui = new Gui();
            gui.setText("Бла, бла");
            Dig dig = new Dig(gui);
            gui.setVisible(true);
            
            Thread.sleep(3000);
            dig.setGuiText("Бла, бла, бла");
      }

}


Код

public class Dig {
      
      private Gui gui;

      public Dig(Gui gui) {
            this.gui = gui;
      }

      public void setGuiText(String a) {
            gui.setText(a);
      }

}

Автор: SherbAnt 9.12.2009, 11:16
 smile блин. как же в голову то не пришло... ведь элементарно... Спасибо большое!
А зачем в Main'е это?
Код

Thread.sleep(3000);

зачем ждать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)