2015-07-22 3 views
0

У меня есть основной код JFrame в классе:Jframe. Получение значения из ComboBox, в другом классе, используя getSelectedItem()

@SuppressWarnings("serial") 
public class CreateBuildAndPr extends JFrame { 

....some code... 

    private JComboBox comboBoxClients = new JComboBox(); 
    private JComboBox comboBoxBranch = new JComboBox(); 

    ....some code... 

     public String getClient(){ 
      String getClient = comboBoxClients.getSelectedItem().toString(); 
      //System.out.printf("\nClient: \n" + getClient); 
      return getClient; 
     } 

     /** 
     * Create the frame. 
     */ 
     public CreateBuildAndPr() { 
      lblCreateBuildAnd.setFont(new Font("Tahoma", Font.BOLD, 11)); 
      comboBoxBranch.setModel(new DefaultComboBoxModel(new String[] {"1a", "2a", "3a", "4a"})); 
      comboBoxClients.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3"})); 
      textFieldInfo.setColumns(10); 
      btnCreateBuild.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent arg0) { 

        CreateNewBuildAndPr callSe = new CreateNewBuildAndPr(); 
        callSe.newBuild(); 
       } 
      }); 

      initGUI(); 
     } 

Так что, когда я называю этот метод getClient(), в классе CreateBuildAndPr, выбранное значение из ComboBox является верный. Давайте скажем: «2». Но когда я звоню из другого класса, всегда возвращается результат «1». Вот другой класс:

public class CreateNewBuildAndPr extends ConnectionsUrlAndDb { 

    @Test 
    public void newBuild() { 


    CreateBuildAndPr createBuildAndPr = new CreateBuildAndPr(); 



     System.out.printf("\n\nSelenium: " +createBuildAndPr.getClient()); 
     String info = createBuildAndPr.getInfo(); 
     System.out.printf("\n\nSelenium: " +info); 
     String branch = createBuildAndPr.getBranch(); 
     System.out.printf("\n\nSelenium: " +branch); 

... more code .... } 

Как я могу исправить getSelectedItem в другом классе?

+0

Как закрывается первый кадр? Я не вижу ожидания, пока первый кадр не будет закрыт в методе 'newBuild'. – KDM

+0

Нет никакого ожидания. jFrame - это только CreateBuildAndPr. CreateNewBuildAndPr - это только класс, а не jFrame. Таким образом, основной кадр никогда не закрывается, просто вызывайте другие методы из другого класса. – Rumen

+0

Итак, когда значение комбо изменилось? Когда вы должны печатать его? Рамка будет отображаться, и ваш код, следующий за вызовом 'new', будет продолжен. Он не ждет, когда вы выберете комбо. Вы можете использовать модальное диалоговое окно и дождаться его закрытия до того, как вы напечатаете выбранное значение. – KDM

ответ

0

Эта линия

CreateBuildAndPr createBuildAndPr = new CreateBuildAndPr(); 

создает новый объект этого класса. Вы хотите связать существующий с JComboBox и его выбранным значением. Решение состояло бы в том, чтобы передать combobox (или даже ссылку на фрейм, который содержит его), в объект CreateNewBuildAndPr в качестве параметра.

Например изменить ваш CreateNewBuildAndPr класс содержит переменную

private JComboBox clientCombo; 

и определить новый конструктор в этом классе, как

public CreateNewBuildAndPr (JComboBox clientCombo) 
{ 
    this.clientCombo = clientCombo 
} 

и в вашем JFrameActionListener передать выпадающий как переменную

CreateNewBuildAndPr callSe = new CreateNewBuildAndPr(comboBoxClients); 

, который позволит вам u ссылаться на это поле со списком в классе CreateNewBuildAndPr.

clientCombo.getSelectedItem()... 

Я просто использовал единственную JComboBox в качестве примера. Если вы передали весь объект GUI, вы можете получить к нему доступ и использовать его методы, такие как getInfo(), которые, как вам кажется, есть.

+0

Спасибо! Это работает отлично! – Rumen

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