Actionlistener В Actionlistener

Тема в разделе "Java", создана пользователем denis90, 8 янв 2012.

Статус темы:
Закрыта.
  1. denis90

    denis90 Гость

    Итак опыт работы с Явой 2 дня.
    Делаю человеку курсовую работу. Нужно смоделировать работу аэропорта.
    GUI на Swinge

    Немного контекста: есть панелька на которой расположены кнопки разных действий (Зарегистрировать рейс, разрешить посадку, разрешить взлёт и т.д). При нажатии на кнопку для примера "Зарегистрировать рейс" ниже должна появиться формочка для ввода данных и кнопка "Добавить".

    Нижу привожу код обработчика события нажатия на кнопку "Зарегистрировать рейс"

    Код (C++):
    btnRegister.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    GridBagLayout gbLayout = (GridBagLayout) inputDataPanel.getLayout();
    inputDataPanel.removeAll();
    GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;

    JLabel label1 = new JLabel("Flight ID: ");
    gbLayout.setConstraints(label1, c);
    inputDataPanel.add(label1);

    c.gridx = 1;
    final JTextField txtFlightId = new JTextField(10);
    gbLayout.setConstraints(txtFlightId, c);
    inputDataPanel.add(txtFlightId);

    c.gridx = 0;
    c.gridy = 1;

    JLabel label2 = new JLabel("Plain Model: ");
    gbLayout.setConstraints(label2, c);
    inputDataPanel.add(label2);

    c.gridx = 1;

    final JTextField txtPlaneModel = new JTextField(10);
    gbLayout.setConstraints(txtPlaneModel, c);
    inputDataPanel.add(txtPlaneModel);

    c.gridx = 0;
    c.gridy = 2;

    JLabel label3 = new JLabel("Destination: ");
    gbLayout.setConstraints(label3, c);
    inputDataPanel.add(label3);

    c.gridx = 1;

    final JTextField txtOrigin = new JTextField(10);
    gbLayout.setConstraints(txtOrigin, c);
    inputDataPanel.add(txtOrigin);

    c.gridx = 0;
    c.gridy = 3;
    c.gridwidth = 2;
    c.gridheight = 1;
    c.anchor = GridBagConstraints.CENTER;
    c.insets = new Insets(15,0,0,0);

    JButton btnAddPlane = new JButton("Add Plane");
    gbLayout.setConstraints(btnAddPlane, c);
    btnAddPlane.setFocusable(false);


    c.gridx = 0;
    c.gridy = 4;

    final JLabel lblError = new JLabel(" ");
    gbLayout.setConstraints(lblError, c);
    inputDataPanel.add(lblError);


    btnAddPlane.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){

    String flightID = txtFlightId.getText();
    if (flightID.isEmpty()){
    lblError.setText("<html><span style=\"color:red\">Error: Flight ID field is empty!</span></html>");
    return;
    }
    String planeModel = txtPlaneModel.getText();
    if(planeModel.isEmpty()){
    lblError.setText("<html><span style=\"color:red\">Error: Plane Model field is empty!</span></html>");
    return;
    }
    String originCity = txtOrigin.getText();
    if (originCity.isEmpty()){
    lblError.setText("<html><span style=\"color:red\">Error: Destination field is empty!</span></html>");
    return;
    }

    if(!atc.isRegistered(flightID)){
    atc.addFlight(new Plane(flightID,planeModel,originCity));
    lblError.setText(flightID + " added!");
    }
    else{
    lblError.setText("<html><span style=\"color:red\">Error: " + flightID + " is registered!</span></html>");
    }

    }
    });


    inputDataPanel.add(btnAddPlane);

    inputDataPanel.revalidate();
    }
    });

    Внутри обработчика создается формочка, кнопка "Добавить" и опять таки обработчик для кнопки "Добавить".

    Вопрос: Насколько мои действия адекватны?
    Как можно по другому? Как нужно?
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Форма регистрации рейса - это, как понимаю, inputDataPanel?
    В общем, не вижу смысла каждый раз пересоздавать все ее содержимое при нажатии кнопки "Зарегистрировать". По идее, эту панель нужно создать один раз (например, в конструкторе родительской формы), а потом просто делать видимой при необходимости (когда жмется кнопка "Зарегистрировать" или что-то еще) и снова невидимой, когда она больше не нужна.
     
  3. denis90

    denis90 Гость


    При нажатии на другие кнопки контроля, такие как "Запрос посадки", "Взлет" и так далее на этой же панели должны создаваться
    новые формочки. Посему динамически генерю их.


    Или Вы просто предлагаете создать сразу все панели с формочками и по мере нажатия на кнопки управления отрисовывать соответствующую?
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Именно. Можно эти всевозможные формочки создать на отдельных панелях, которые потом просто класть в inputDataPanel и показывать таким образом пользователю. В любом случае, это:
    а) резко упрощает код обработчика btnRegister и прочих
    б) избавляет приложение от необходимости по многу раз выполнять один и тот же код.
     
  5. denis90

    denis90 Гость

    Спасибо за совет.
    Уже делаю
     
Статус темы:
Закрыта.

Поделиться этой страницей