2013-03-19 2 views
0

Привет, мой код пока что-то вроде этого: Нажмите кнопку, откроется combobox. Я хочу выбрать опцию в ComboBox и в зависимости от выбранной опции. Я хочу открыть другую combobox, используя getSelectIndex().Создание actionlistener из метода в другом классе

Вот некоторые из частей моего кода, которые актуальны. Я знаю, что мне нужно сделать другие выпадающие списки не видимыми или удаленными, но на данный момент я просто пытаюсь сделать combobox. Как вы можете видеть, я вставил actionlistener для кнопки, которая работает и открывает combobox.however при выборе строки в combobox никакого события не происходит. Однако, когда я запускаю его, никаких выпадающих списков не отображаются.

public class Work extends JFrame { 
// variables for JPanel 

    private JPanel buttonPanel; 
    private JButton timeButton; 

    public Work() 
{ 
     setLayout(new BorderLayout()); 

     buttonPanel = new JPanel(); 
    buttonPanel.setBackground(Color.RED); 
    buttonPanel.setPreferredSize(new Dimension(400, 500)); 
     add(buttonPanel,BorderLayout.WEST); 
     timeButton = new JButton("Time"); 
    buttonPanel.add(timeButton); 


    buttontime clickTime = new buttontime(); // event created when time button is clicked 
    timeButton.addActionListener(clickTime); 

    Time timeObject = new Time(); 
    timeObject.SelectTime(); 
    buttontime2 selectDest = new buttontime2(); 
    timeObject.getAirportBox().addActionListener(selectDest); 



    } 



     public class buttontime implements ActionListener { //creating actionlistener for clicking on timebutton to bring up a combobox 
    public void actionPerformed(ActionEvent clickTime) { 
      Time timeObject = new Time(); 
      timeObject.SelectTime(); 
      add(timeObject.getTimePanel(),BorderLayout.EAST); 
      timeObject.getTimePanel().setVisible(true); 
      timeObject.getTimePanel().revalidate() ; 
      timeObject.getAirportBox().setVisible(true); 


    } 
    } 





      public class buttontime2 implements ActionListener{ 
    public void actionPerformed(ActionEvent selectDest) { 
    Time timeObject = new Time(); 
    timeObject.SelectTime(); 


    if(timeObject.getAirportBox().getSelectedIndex() == 1) { 



    timeObject.getEastMidBox().setVisible(true); 

    } 

    else if(timeObject.getAirportBox().getSelectedIndex() == 2) { 

    timeObject.getBirmBox().setVisible(true); 
} 
    else if(timeObject.getAirportBox().getSelectedIndex() == 3) { 

    timeObject.getMancbox().setVisible(true); 
    } 
    else if(timeObject.getAirportBox().getSelectedIndex() == 4) { 
timeObject.getHeathBox().setVisible(true); 
    } 

    } 
    } 



public static void main (String args[]) { 
events mainmenu = new events(); //object is created 


mainmenu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
mainmenu.setSize(800,500); 
mainmenu.setVisible(true); 
mainmenu.setLayout(new BorderLayout()); 
mainmenu.setTitle("Learning how to use GUI"); 
mainmenu.setBackground(Color.BLUE); 
mainmenu.setResizable(false); 

} 
} 

мой другой класс TIME

  import javax.swing.JOptionPane; 

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

class Time 
{ 

    private JComboBox timeAirportbox;//comboboxes declared 
    private JComboBox eastMidbox; 
    private JComboBox mancBox; 
    private JComboBox heathBox; 
    private JComboBox birmBox; 
    private String[] airport = {"","EM", "Bham", "Manc", "Heath"};//array of airports declared 
    private String[] destination = {"","NY", "Cali", "FlO", "MIAMI", "Tokyo"};//array  of destinations declared 
    private JPanel timePanel; 

    public void SelectTime() { 



//combobox objects created 

    timePanel = new JPanel(); 
    timePanel.setBackground(Color.BLUE); 
    timePanel.setPreferredSize(new Dimension(400, 400)); 

    timeAirportbox = new JComboBox(airport);//array is inserted into the JComboBox 
    timePanel.add(timeAirportbox); 
    timeAirportbox.setVisible(false); 


    eastMidbox = new JComboBox(destination); 
    timePanel.add(eastMidbox); 
    eastMidbox.setVisible(false); 

    mancBox = new JComboBox(destination); 
    timePanel.add(mancBox); 
    mancBox.setVisible(false); 

    heathBox = new JComboBox(destination); 
    timePanel.add(heathBox); 
    heathBox.setVisible(false); 

    birmBox = new JComboBox(destination); 
    timePanel.add(birmBox); 
    birmBox.setVisible(false); 




} 



    public JPanel getTimePanel() { 
    return timePanel; 
    } 

    public JComboBox getAirportBox() { 
    return timeAirportbox;  
    } 

    public JComboBox getEastMidBox() { 
    return eastMidbox; 
    }  

    public JComboBox getMancbox() { 
    return mancBox; 
    } 

    public JComboBox getHeathBox() { 
    return heathBox; 
    } 

    public JComboBox getBirmBox() { 
    return birmBox; 
    }  





    } 

ответ

2

Объект Time, который встроен в Рабочем конструктор не используется:

Time timeObject = new Time(); 
    timeObject.SelectTime(); 
    buttontime2 selectDest = new buttontime2(); 
    timeObject.getAirportBox().addActionListener(selectDest); 

Как только применяя слушатель действия selectedDest в выпадающий список того времени, которое не используется, тогда слушатель никогда не будет вызван.

Вы можете сделать две вещи, чтобы сделать его работу:

  • Переместить код, который создает слушателя и присвоить его Combox в первом слушателю buttontime
  • Создание объекта времени только один раз и сохранить его как член вашего рабочего экземпляра. Поскольку ваш слушатель является нестационарным внутренним классом класса Work, он сможет использовать его вместо создания нового объекта Time.

Edit: я не видел, что в вашем втором слушателя, вы СНОВА строительства нового объекта Time. Этот объект действительно отличается от того, который вы создали ранее, поэтому его изменение не повлияет на другое. Вы действительно должны создать объект «Время» один раз и сохранить его как переменную-член в своем рабочем классе, а затем использовать этот объект в своих слушателях, а не воссоздавать его.

Чтобы было ясно, сделать это следующим образом:

public class Work extends JFrame { 

    // ... 

    private Time timeObject; 

    public Work() { 

     // ... 

     timeObject = new Time(); 
     timeObject.SelectTime(); 
     buttontime2 selectDest = new buttontime2(); 
     timeObject.getAirportBox().addActionListener(selectDest); 

    } 

    public class buttontime implements ActionListener { 
     public void actionPerformed(ActionEvent clickTime) { 
      // use timeObject, don't create it and don't call SelectTime() 
      // example: 
      add(timeObject.getTimePanel(),BorderLayout.EAST); 
      // .... 
     } 
    } 

    public class buttontime2 implements ActionListener { 
     public void actionPerformed(ActionEvent clickTime) { 
      // use timeObject, don't create it and don't call SelectTime() 

     } 
    } 
} 

Также к сведению:

  • Вы не простирается JFrame, нет никаких причин, чтобы сделать это. Обновите свой код, чтобы ваш фрейм был только переменной-членом вашего класса Work.
  • Следуйте за Java standard code conventions, особенно подходящим для использования с именами классов: buttonlistener должно быть ButtonListener, а метод должен начинаться с строчной буквы: SelectTime должно быть selectTime.
+0

Спасибо за ответ, который я увижу, смогу ли я это сделать. Я запутался в концепции Object, хотя и как я могу хранить это как переменную-член – user2188332

+0

Спасибо, что вы расширили мое понимание – user2188332

Смежные вопросы