Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > работа с двумя jFrame


Автор: joker332 24.2.2011, 12:20
Я создал два JFrame , как по нажатию на кнопку открыть второй JFrame??
я начинаючий.....

Автор: Skipy 24.2.2011, 13:40
А как Вы открываете первый?

Автор: _Y_ 24.2.2011, 14:11
Код

frame2.setVisible(true);

Понятно, что слушатель кнопки должен получить ссылку на frame2 (например, в своем конструкторе).

---------
Вообще-то тема для GUI ветки

Автор: zhz 4.4.2011, 14:17
Дабы не создавать новую тему, спрошу здесь. В  NetBeans создал Desktop приложение, При выборе пункта меню, открывается второй Jframe, где пользователь вводит данные нажимает кнопку, Jframe закрывается, и в главном окне, например меняется надпись JLabel, иными словами, как управлять поведением компонентов, из другого Jframe, как к ним обращаться? 

И еще вопрос, делая New->JFrame Form создается новый файл NewJFrame.java в котором реализован  public static void main(String args[]) {}, зачем он нужен? ваедь уже есть один? 
И еще один непонятный момент, как в JTextArea реализовать контекстное меню, чтобы пользователь мог вставить данные не только через контрол+цэ но и через "правой кнопкой мышки"?

Автор: _Y_ 4.4.2011, 18:47
Цитата(zhz @  4.4.2011,  14:17 Найти цитируемый пост)
как управлять поведением компонентов, из другого Jframe, как к ним обращаться

По тому же принципу - ссылки на компоненты первого JFrame можно передать второму в конструкторе, например. Ну и потом обращаться к ним когда надо.
Цитата(zhz @  4.4.2011,  14:17 Найти цитируемый пост)
делая New->JFrame Form 

Это, надо понимать, из NetBeans. Значит точно не ко мне smile 
Цитата(zhz @  4.4.2011,  14:17 Найти цитируемый пост)
 JTextArea реализовать контекстное меню

Погугли на Java и "контекстное меню". Наверняка куча примеров найдется. Потом бери самый короткий пример и вперед. На каком компоненте его вызывать - не важно. Принцип один и тот же.

Автор: zhz 5.4.2011, 10:19
_Y_,  Что то наверное не так делаю..... Вот смотрите.. по нажатию кнопки, отображаю JFrame:
Код

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        NewJFrame frame = new NewJFrame(jLabel1);
        frame.setVisible(true);
        
    }

в конструктое передал JLabel1. Создал соответствующий конструктор в NewJFrame.java :
Код

public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    NewJFrame(JLabel jLabel1) {
       // только здесь я могу обратиться к JLabel1
    }



Только вот обращаться к JLabel1 я могу ТОЛЬКО внутри конструктора! я мне надо , например по жажатию кнопки на 2-ом JFrame.

Автор: jk1 5.4.2011, 14:16
Цитата

Только вот обращаться к JLabel1 я могу ТОЛЬКО внутри конструктора!


Создайте переменную и сохраните там ссылку:
Код

public class NewJFrame extends javax.swing.JFrame {
    
    JLabel otherFrameLabel;

    public NewJFrame() {
        initComponents();
    }

    NewJFrame(JLabel jLabel1) {
        this();
        otherFrameLabel = jLabel1;
    {

     someOtherMethod(){
         otherFrameLabel.setText("New text");
     }


Автор: zhz 5.4.2011, 15:05
jk1, Спасибо, буду пробовать. Только вопрос возник, в 10 ой строчке, зачем this()?

Автор: jk1 5.4.2011, 15:10
Цитата

Только вопрос возник, в 10 ой строчке, зачем this()? 


Я увидел initComponents(); и предположил, что Вы работаете с визуальным редактором NetBeans. Если это действительно так, то этот метод хорошо бы вызывать во всех конструкторах или вызывать из всех конструкторов конструктор по умолчанию, что я и сделал.

Автор: _Y_ 5.4.2011, 22:54
Цитата(zhz @ 5.4.2011,  15:05)
в 10 ой строчке, зачем this()?

Чуть расширенное объяснение:

this() в этом случае вызывает дрогой конструктор, тот что без параметров и в котором вызывается initComponents(). Такая структура позволяет обращаться из одного конструктора к другому и избегать повторений одного и того же кода в разных конструкторах. Да и структуру выполнения программы делает более логичной.

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