0

私の問題は少しトリッキーです。を使用していEditable JComboBoxます。大文字と小文字を区別する項目が含まれる場合があります。たとえば、 と がある場合がItem1ありitem1ます。したがって、私の場合、これら 2 つの項目は異なるものとして扱われるべきです。

しかし問題は、これら 2 つの項目が同じものとして扱われることです。どの項目を選択しても、常に最初の項目 ( Item1) が選択されます。Google で検索しましたが、解決策が見つかりませんでした。だから、私はここにいます。

コード:

//loading of Items
jdcbmItemType = new javax.swing.DefaultComboBoxModel(ItemTypeHandler.getItemTypeComboData(MainFrame.companyId));

private void jcbItemTypeMouseReleased(MouseEvent evt)
{
    if (jcbItemType.getSelectedIndex() != -1)
    {
        loadItemTypeDetails(((ItemObject) jcbItemType.getSelectedItem()).getId());
    }
    else
    {
        resetFields();
    }
}

public static Vector<ItemObject> getItemTypeComboDataV(BigInteger companyId, BigInteger categoryId, boolean addFirstElement, TriState deleted) throws ExceptionWrapper, EJBException
{
    try
    {            
        return (Vector<ItemObject>)lookupItemTypeFacade().getItemTypeComboData(companyId, categoryId, addFirstElement, deleted);
    } catch (ExceptionWrapper exceptionWrapper)
    {
        throw exceptionWrapper;
    } catch (EJBException ejbEx)
    {
        throw ejbEx;
    } catch (Exception ex)
    {
        throw new ExceptionWrapper(ex.getMessage());
    }
}

ItemObjectBigIntegerは、1 つのフィールドがで、別のフィールドが である customClassですString

getItemTypeComboData正常に機能しています。したがって、ここからのリストを取得すると想定できItemObject、それはうまく変換されますVector<ItemObject>

jcbItemType.getSelectedIndex()と に対して常に同じインデックスを返しItem1ますitem1。しかし、それは に対して異なるインデックスを返しますitem2

itemStateChangedなるほど、イベントが使えればいいですね。でも私の場合は使えません。しかし、私の質問は、異なる名前の文字列に対しては正常MouseReleasedFocusLost機能しますが、大文字と小文字が異なる同じ文字列では機能しません。本当につまずきました。

質問をする別の方法:

大文字と小文字を区別するアイテムをイベントでチェックしますMouseReleasedか?FocusLost

この問題を解決するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

3

これが私のSSCCEで、これは問題なく動作します。これがあなたが探しているものではない場合は、SSCCEを投稿して、より良い助けを求めてください!


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

public class ComboBoxTest {

    JComboBox combo;
    JTextField txt;

    public static void main(String[] args) {
        new ComboBoxTest();
    }

    public ComboBoxTest() {
        String items[] = {"Item1", "item1"};
        JFrame frame = new JFrame("JComboBox Case-sensitivity Test");
        JPanel panel = new JPanel();
        combo = new JComboBox(items);
        combo.setEditable(true);

        txt = new JTextField(10);
        panel.add(combo);
        panel.add(txt);
        frame.add(panel);
        combo.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent ie) {
                String str = (String) combo.getSelectedItem();
                txt.setText(str);
            }
        });
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 100);
        frame.setVisible(true);
    }
}
于 2012-05-21T05:57:50.210 に答える
0

私はあなたがこのようにやっていると思います:-

String[] items = {"item1", "item2"};
JComboBox cb = new JComboBox(items);
cb.setEditable(true);

次に、次のような配列形式のように、これに挿入したJCombobox要素にアクセスする必要があります。-MyItemListener actionListener = new MyItemListener(); cb.addItemListener(actionListener);

class MyItemListener implements ItemListener {
// This method is called only if a new item has been selected.
public void itemStateChanged(ItemEvent evt) {
    JComboBox cb = (JComboBox)evt.getSource();

    // Get the affected item
    Object item = evt.getItem();

    if (evt.getStateChange() == ItemEvent.SELECTED) {
        // Item was just selected
    } else if (evt.getStateChange() == ItemEvent.DESELECTED) {
        // Item is no longer selected
    }
    }
 }

itemListenerを追加した後、個々のJComboboxアイテムを使用してさまざまなタスクを実行できます

于 2012-05-21T05:31:44.077 に答える
0

これを試してみてください、うまくいきます...

ActionListener() を使用してクリックをキャプチャし、次に getSelectedItem() を使用して JComboBox でクリックされた項目をキャプチャします

これを試して、

コンソールで出力を確認してください

myComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent ie) {
            String str = (String) myComboBox.getSelectedItem();
           System.out.println(str);
        }
于 2012-05-21T06:16:37.427 に答える