Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с несколькими окнами swing. 
:(
    Опции темы
Kremlin
Дата 23.10.2011, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.10.2011

Репутация: нет
Всего: нет



Есть два окна: в первом меню, во втором ввод логин пароля.
Второе окно появляется при нажатии кнопки, причем первое окно становится невидимым.
Первое окно
Код

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;

public class MainWindow extends JFrame {

    private static final long serialVersionUID = 1L;
    JTextField fileBankomat,fileBank;
    MainWindow(){
        super("Main menu");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        JPanel panel = new JPanel();
        JLabel menuLabel = new JLabel("Menu");
        
        JButton button1=new JButton("LogIn");
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                JFrame myWindow = new LoginWindow();
                myWindow.setVisible(true);
                setVisible(false);
            }
        });
        
        JButton button2=new JButton("Add Money");
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                new LoginWindow();
            }
        });
        
        Box box1 = Box.createHorizontalBox();
        box1.add(menuLabel); 
        box1.add(Box.createHorizontalStrut(6));
        box1.add(button1);
        box1.add(Box.createHorizontalGlue());
        box1.add(button2);

        
        Box box2 = Box.createHorizontalBox(); 
        JLabel labelPath1 = new JLabel("Enter bankomat.txt path"); 
        fileBankomat=new JTextField("bankomat.txt");
        box2.add(labelPath1);
        box2.add(Box.createHorizontalStrut(6));
        box2.add(fileBankomat);
        
        Box box3 = Box.createHorizontalBox(); 
        JLabel labelPath2 = new JLabel("Enter bank.txt path"); 
        fileBank=new JTextField("bank.txt");
        box3.add(labelPath2);
        box3.add(Box.createHorizontalStrut(6));
        box3.add(fileBank);

        Box mainBox = Box.createVerticalBox();
        menuLabel.setPreferredSize(labelPath1.getPreferredSize()); 
        fileBankomat.setPreferredSize(new Dimension(200,20));
        fileBank.setPreferredSize(new Dimension(200,20));
        mainBox.setBorder(new EmptyBorder(12,12,12,12));
        mainBox.add(box1);
        mainBox.add(Box.createVerticalStrut(10));
        mainBox.add(box2);
        mainBox.add(Box.createVerticalStrut(10));
        mainBox.add(box3);
        panel.add(mainBox);
        setContentPane(mainBox); 
        pack();
    }

}

Второе окно 
Код

import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class LoginWindow extends JFrame {
    /**
     * 
     */JButton button;
    private static final long serialVersionUID = 1L;
    /* Для того, чтобы впоследствии обращаться к содержимому текстовых полей, рекомендуется сделать их членами класса окна */ 
    JTextField loginField;
    JPasswordField passwordField; 
    LoginWindow(){
        super("Вход в систему");
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
        // Настраиваем первую горизонтальную панель (для ввода логина)
        Box box1 = Box.createHorizontalBox();
        JLabel loginLabel = new JLabel("Логин:");
        loginField = new JTextField(15); 
        box1.add(loginLabel); 
        box1.add(Box.createHorizontalStrut(6));
        box1.add(loginField);
        
        // Настраиваем вторую горизонтальную панель (для ввода пароля) 
        Box box2 = Box.createHorizontalBox(); 
        JLabel passwordLabel = new JLabel("Пароль:"); 
        passwordField = new JPasswordField(15);
        box2.add(passwordLabel);
        box2.add(Box.createHorizontalStrut(6));
        box2.add(passwordField);
        
        // Настраиваем третью горизонтальную панель (с кнопками)
        Box box3 = Box.createHorizontalBox(); 
        JButton ok = new JButton("OK");
        ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                
            }   
        });
        
        button = new JButton("Выход");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if (JOptionPane.showConfirmDialog(button, "Вы уверены, что хотите выйти?") == JOptionPane.YES_OPTION) setVisible(false); 
            }   
        });
        JButton cancel = new JButton("Отмена");
        box3.add(Box.createHorizontalGlue());
        box3.add(ok); 
        box3.add(Box.createHorizontalStrut(12));
        box3.add(cancel); 
        box3.add(Box.createHorizontalStrut(12));
        box3.add(button); 
        
        // Уточняем размеры компонентов 
        loginLabel.setPreferredSize(passwordLabel.getPreferredSize()); 
        
        // Размещаем три горизонтальные панели на одной вертикальной 
        Box mainBox = Box.createVerticalBox();
        mainBox.setBorder(new EmptyBorder(12,12,12,12));
        mainBox.add(box1);
        mainBox.add(Box.createVerticalStrut(12));
        mainBox.add(box2);
        mainBox.add(Box.createVerticalStrut(17));
        mainBox.add(box3);
        setContentPane(mainBox);
        
        pack();
    
    }
}

Создается все вот так
Код


public class Gui {
    public static void main (String [] args) {
        
        new MainWindow();
    } 
}

Как сделать, чтобы после нажатия ОК или Отмена заново появилось первое окно(не новое а уже существующее), и как передать ему значения, которые ввели в полях логин пароль.
PM MAIL   Вверх
Connie
Дата 28.10.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Пердать во второе окно в конструкторе ссылку на первое и тогда
Код

.....
JPasswordField passwordField; 
private MainWindow parent;
    LoginWindow(MainWindow parent){
        super("Вход в систему");
this.parent = parent;
        setVisible(true);
....

ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                parent.setVisible(true);
            }   
        });
        
        button = new JButton("Выход");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if (JOptionPane.showConfirmDialog(button, "Вы уверены, что хотите выйти?") == JOptionPane.YES_OPTION) setVisible(false); 
                parent.setVisible(true);
            }   
        });


А вообще лучше для второго окна использовать предка Dialog и показывать его в модальном режиме, тогда в первом окне будет примерно так
Код

button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                LoginWindow lw = new LoginWindow();
                setVisible(false);
                lw.setVisible(true);
                setVisible(true);
            }
        });

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.