1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Actionlistener В Actionlistener

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

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

    denis90 Гость

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

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

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

    Код:
    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

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

    denis90 Гость

    Репутация:
    0

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


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

    LuMee Well-Known Member

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

    denis90 Гость

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

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