0

なぜそれが起こっているのか理解できない奇妙なことがあります。ここを含めてウェブを検索しましたが、答えが見つかりませんでした。私は 3 つの ComboBox を持っています。アプレット変換ツールです。メイン ComboBox で変換したいフィールドを選択するたびに、変換する値を他の 2 つにロードします。しかし、毎回ロードした後、変換したいものを選択して、両方のコンボボックスに影響を与えています。これはコードです: // これはオブジェクトです //////

     MyEvent handler = new MyEvent();

    MainCombo = new JComboBox(issueArray);
    MainCombo.setBounds(120, 50, 120, 20);
    MainCombo.addActionListener(handler);
    add(MainCombo);

    Combo1 = new JComboBox(Angle);
    Combo1.setBounds(120, 90, 120, 20);
    Combo1.addActionListener(handler);
    add(Combo1);

    Combo2 = new JComboBox(Angle);
    Combo2.setBounds(320, 90, 120, 20);
    Combo2.addActionListener(handler);
    add(Combo2);

    //The Method To Change Values In The ComboBox 
     public void loadIssueParam(String Issue){
    Combo1.removeAllItems();
    Combo2.removeAllItems();
    switch (Issue) {
        case "Angle":
            {
                DefaultComboBoxModel newModel= new DefaultComboBoxModel(Angle);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Area":
            {
                DefaultComboBoxModel   newModel= new DefaultComboBoxModel(Area);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Data":
            {
                DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Data);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Energy":
            {
                DefaultComboBoxModel   newModel= new DefaultComboBoxModel(Energy);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Force":
            {
                DefaultComboBoxModel      newModel= new DefaultComboBoxModel(Force);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Length":
            {
                DefaultComboBoxModel      newModel= new DefaultComboBoxModel(Length);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Mass":
            {
                DefaultComboBoxModel        newModel= new DefaultComboBoxModel(Mass);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Power":
            {
                DefaultComboBoxModel       newModel= new DefaultComboBoxModel(Power);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Pressure":
            {
                DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Pressure);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Speed":
            {
                DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Speed);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Temperature":
            {
                DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Temperature);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Time":
            {
                DefaultComboBoxModel  newModel= new DefaultComboBoxModel(Time);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
        case "Volume":
            {
                DefaultComboBoxModel newModel= new DefaultComboBoxModel(Volume);
                Combo1.setModel(newModel);
                Combo2.setModel(newModel);
                break;
            }
    }

    /// I THINK MAYBE THIS METHOD HAVE SOMETHING TO DO WITH IT - OR I NEED SOME HOW TO
    /// CLEAR THE SELECTION.



      private class MyEvent implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent event){
        if(event.getSource()==MainCombo){
        JComboBox cb=(JComboBox)event.getSource();
        IssueBox=(String)cb.getSelectedItem();
        loadIssueParam(IssueBox);
    } 
        if(event.getSource()==Combo1){
        JComboBox cb=(JComboBox)event.getSource();
        fromBox=(String)cb.getSelectedItem();
    } 
        if(event.getSource()==Combo2){
        JComboBox cb=(JComboBox)event.getSource();
        toBox=(String)cb.getSelectedItem();
    }
    }
}

サブ選択を行うたびに、両方のサブコンボボックスに影響します。

助けてくれてありがとうニロ

4

1 に答える 1

3

ああ、あなたのコードを見て、あなたの問題を理解しました。問題は、両方のサブコンボ ボックスが同じモデルを共有しているため、1 つのサブコンボ ボックスで選択を変更すると、共有モデルの状態が変更され、他のサブコンボ ボックスの選択が変更されることです。あなたの問題を解決し、それぞれに独自のモデルを与えてください。

つまり、

switch (Issue) {
    case "Angle":
        {
            DefaultComboBoxModel newModel1 = new DefaultComboBoxModel(Angle);
            DefaultComboBoxModel newModel2 = new DefaultComboBoxModel(Angle);
            Combo1.setModel(newModel1);
            Combo2.setModel(newModel2);
            break;
        }
    // etc... 

また、 や などのマップの使用を検討してHashMap<String, String[]>くださいHashMap<String, Vector<String>>。これを実行してマップを正しく埋めれば、その巨大な switch ステートメントは次のように単純化できます。

Combo1.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
Combo2.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));

次に、Java の命名規則について説明します。

于 2012-10-21T00:32:06.807 に答える