2015-06-04 3 views
1

В моем коде у меня есть простой JComboBox, который используется для включения или отключения определенной функции. Код JComboBox является:Выбранная опция JComboBox не влияет на изменение

public static JComboBox getErrorLoggingOnOrOff(){ 
    String[] options = { "On", "Off" }; 
    JComboBox combo = new JComboBox(options); 
    return combo; 
} 

Проблема в том, что это всегда возвращает значение, находясь на независимо от того, когда я нажимаю «Выкл.» JComboBox вызывается здесь: Обратите внимание, что я включил System.out.println() (и проверку для null) только для проверки вывода.

String option = combo.getSelectedItem().toString(); 
.... 
if(option.equals("On")){ 
    System.out.println("On selected"); 
    return; 
} 
else if(option.equals("Off")){ 
    System.out.println("Off selected"); 
    return; 
} 
else { 
    System.out.println("Null value for option.... :-/"); 
} 

Все указатели будут высоко оценили, искренне озадачен, почему это не происходит, без сомнения, просто через поле зрения.

С уважением, Рег.

EDIT Вот полный отрывок кода

final JMenuItem enableErrorLogging = new JMenuItem("Enable Error Logging"); 
    enableErrorLogging.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.ALT_MASK)); 
    enableErrorLogging.setMnemonic(KeyEvent.VK_M); 
    menu.add(enableErrorLogging); 
    enableErrorLogging.addActionListener(new ActionListener() { 

     public void actionPerformed(final ActionEvent e) { 
      if (ui.getWorkspace().getCurrentProject() == null) { 
       openProjectMessagePane(); 
       return; 
      } 

      JComboBox combo = getErrorLoggingOnOrOff(); 
      JPanel panel = new JPanel(new GridLayout(0, 1)); 
      panel.add(new JLabel("Turn Error Logging On Or Off")); 
      panel.add(combo); 
      String option = combo.getSelectedItem().toString(); 

      try{ 

      int r = JOptionPane.showConfirmDialog(frame, panel, "Enable Error Logging?", 
        JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE); 
      if (r == JOptionPane.OK_OPTION) { 
      if(option.equals("On")){     
       System.out.println("On selected"); 
       return; 
      } 
      else if(option.equals("Off")){ 
       System.out.println("Off selected"); 
       return; 
      } 
      else{ 
       System.out.println("Null value for option.... :-/"); 
      } 
       } 
      } catch (Exception ex) { 
       LOGGER.debug(ex); 
      } 
     } 
    }); 
+0

Вы можете предоставить исполняемую версию кода, или она слишком длинная? – bakalolo

+0

Возможно, это слишком долго ... Я буду искать другие экзерты, которые потенциально могут вызвать проблемы! – Reginald

+0

@bakalolo Поместите весь код для этой операции там, не обращайте внимания на мой предыдущий комментарий. Спасибо за ваш интерес. – Reginald

ответ

2

Использование .equals для сравнения строк, не ==

т.е.

if(option.equals("On")) { 
    // ... 
} 
else if(option.equals("Off")) { 
    // ... 
} 

Здесь может быть другая проблема :

JComboBox combo = getErrorLoggingOnOrOff(); 
JPanel panel = new JPanel(new GridLayout(0, 1)); 
panel.add(new JLabel("Turn Error Logging On Or Off")); 
panel.add(combo); 

// Here, you seem to be getting the 'selected item' before even 
// showing it using a JOptionPane, which I believe will be null by default 
String option = combo.getSelectedItem().toString(); 

try { 
    int r = JOptionPane.showConfirmDialog(frame, panel, "Enable Error Logging?", 
     JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE); 
    if (r == JOptionPane.OK_OPTION) { 
      if(option.equals("On")) { 
       // ... 
      } 
    } 
} 

Место String option = combo.getSelectedItem().toString(); после того, как вы позвоните JOptionPane.showConfirmDialog(...).

+0

Если это все, я буду чувствовать себя очень, очень смущенным ... – Reginald

+0

@Reginald Да, совершенно уверен, что все. – Gosu

+0

Не решила проблема ... Однако я отредактирую вопрос, чтобы показать это изменение. – Reginald

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