2017-04-18 10 views
0

私は2つのJComboBoxに同じエントリ(ENUMリストから)を設定しました 選択したアイテムが変更されたときのアクションイベントがありますが、私には分かりません。JComboBoxの選択をスワップ

コードが通貨を変換しています... Box1 = USD、Box2 = EUROの場合、Box1をERUOに変更するとBox2 to = USDが必要になります。以下は私のActionListenerには、誰もが、私はこれを理解助けることができ

 fromCombo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String finalAmt = convertCurr(fromField.getText(), 
       fromCombo.getSelectedItem().toString(), 
       toCombo.getSelectedItem().toString()); 

      //Check for Errors 
      try { 
       Double.parseDouble(finalAmt); 

       //CHANGE LABELS 
       toLabel.setText(finalAmt + " " + 
        toCombo.getSelectedItem().toString()); 

       toField.setText(String.valueOf(finalAmt)); 
      } catch (NumberFormatException nfe) { 
       fromLabel.setText(finalAmt); 

       toLabel.setText(finalAmt); 

       toField.setText(finalAmt); 
      } finally { 
       fromLabel.setText(fromField.getText() + " " + 
        fromCombo.getSelectedItem().toString() + " equals"); 
      } 

     } 
    }); 

    toCombo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String finalAmt = convertCurr(fromField.getText(), 
       fromCombo.getSelectedItem().toString(), 
       toCombo.getSelectedItem().toString()); 

      //Check for Errors 
      try { 
       Double.parseDouble(finalAmt); 

       //CHANGE LABELS 
       toLabel.setText(finalAmt + " " + 
        toCombo.getSelectedItem().toString()); 

       toField.setText(String.valueOf(finalAmt)); 
      } catch (NumberFormatException nfe) { 
       fromLabel.setText(finalAmt); 

       toLabel.setText(finalAmt); 

       toField.setText(finalAmt); 
      } finally { 
       fromLabel.setText(fromField.getText() + " " + 
        fromCombo.getSelectedItem().toString() + " equals"); 
      } 
     } 
    }); 
    fromField.postActionEvent(); 

ですか?より多くの情報が必要ですか?

編集:ここではサンプルが抜け落ちており、コードベースです。

public class tDropDowns extends JPanel implements ActionListener { 

private final JComboBox<CurrencyConstant> fromCombo; 
private final JComboBox<CurrencyConstant> toCombo; 

public tDropDowns() { 
    fromCombo = new JComboBox<>(CurrencyConstant.values()); 
    fromCombo.setName("fromCombo"); 

    toCombo = new JComboBox<>(CurrencyConstant.values()); 
    toCombo.setName("toCombo"); 

    // TODO: Layout code goes here... 
    JPanel entryFields = new JPanel(); 
    entryFields.setLayout(new GridBagLayout()); 
    //entryFields.setBorder(new EmptyBorder(10, 10, 10, 10)); 
    entryFields.setAlignmentX(Component.LEFT_ALIGNMENT); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.insets = new Insets(5, 10, 5, 10); 

    gbc.gridx = 0; 
    gbc.gridy = 0; 
    entryFields.add(fromCombo, gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 1; 
    entryFields.add(toCombo, gbc); 

    this.add(entryFields); 

    // Set initial values: 
    fromCombo.setSelectedItem(CurrencyConstant.USD); 
    toCombo.setSelectedItem(CurrencyConstant.EUR); 

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

     } 
    }); 

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

     } 
    }); 
} 

@Override 
public void actionPerformed(ActionEvent arg0) 
{ 

} 

public static void createAndShowGUI() { 
    JFrame frame = new JFrame("Currency Converter Dropdowns"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setMinimumSize(new Dimension(300, 150)); 
    JComponent newContentPane = new tDropDowns(); 
    newContentPane.setLayout(new BoxLayout(newContentPane, 
     BoxLayout.PAGE_AXIS)); 
    newContentPane.setOpaque(true); 
    frame.setContentPane(newContentPane); 
    frame.pack(); 
    frame.setResizable(false); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(tDropDowns::createAndShowGUI); 
} 

}

+0

可能であれば、クラス全体を投稿して、JFrame全体を自分で構築しなくても動作をテストしやすくしてください。 – DiabolicWords

+0

私は先に進み、2つのドロップダウンのためだけにJFrame情報を取り除きました。 – Wes

答えて

1

詳細なポストをありがとうございました。ここにあなたの問題の解決策があります。私は各適用された三項演算子にコードが何をするのかを明確にするためにコメントを付けました。

あなたがしなければならないことは、クリックされたComboBoxに現在どの通貨が設定されているかを調べることです。そして、もう一方のボックスに反対の通貨を設定します。私は三項演算子でこれを解決しました。

// Set initial values: 
    fromCombo.setSelectedItem(CurrencyConstant.USD); 
    toCombo.setSelectedItem(CurrencyConstant.EUR); 

    fromCombo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      toCombo.setSelectedItem(
       // Is EUR in fromCombo selected? Then set USD in toCombo. Else set EUR in toCombo. 
       (fromCombo.getSelectedItem() == CurrencyConstant.EUR) ? CurrencyConstant.USD : CurrencyConstant.EUR 

      ); 
     } 
    }); 

    toCombo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      fromCombo.setSelectedItem(
       // Is EUR in toCombo selected? Then set USD in fromCombo. Else set EUR in fromCombo. 
       (toCombo.getSelectedItem() == CurrencyConstant.EUR) ? CurrencyConstant.USD : CurrencyConstant.EUR 

      ); 
     } 
    }); 

通貨計算などをトリガーする残りのコードを追加できるようになりました。

これが役に立ちます。

+0

ありがとうございます。これはそれでした。 – Wes

+0

私の喜び。 :) – DiabolicWords

関連する問題