4

JComboBoxは 3 つの Items を含むを持っています{"Personel", "Magasinier", "Fournisseur"}

JComboBoxこれは、選択できない値であるvalue を表示します"Choisir une option :"

私は後にこのコードを試しましたinitComponents();:

this.jComboBox1.setSelectedItem("Choisir une option :");

しかし、うまくいきません。

どうやってやるの ?

4

3 に答える 3

5

JComboBox次の SSCCE などのコードを使用して、モデルの選択コードをオーバーライドできます。

public class JComboExample {

  private static JFrame frame = new JFrame();
  private static final String NOT_SELECTABLE_OPTION = " - Select an Option - ";
  private static final String NORMAL_OPTION = "Normal Option";

  public static void main(String[] args) throws Exception {
    JComboBox<String> comboBox = new JComboBox<String>();

    comboBox.setModel(new DefaultComboBoxModel<String>() {
      private static final long serialVersionUID = 1L;
      boolean selectionAllowed = true;

      @Override
      public void setSelectedItem(Object anObject) {
        if (!NOT_SELECTABLE_OPTION.equals(anObject)) {
          super.setSelectedItem(anObject);
        } else if (selectionAllowed) {
          // Allow this just once
          selectionAllowed = false;
          super.setSelectedItem(anObject);
        }
      }
    });

    comboBox.addItem(NOT_SELECTABLE_OPTION);
    comboBox.addItem(NORMAL_OPTION);

    frame.add(comboBox);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        frame.setVisible(true);
      }
    });
  }
}

これにより、最初に「 」が選択されたコンボ ボックスが表示されます- Select an Option -。ユーザーが別のオプションを選択するとすぐに、元のオプションを再度選択することはできなくなります。

于 2013-05-21T09:28:22.717 に答える
2

私はこの質問に出くわし、ダンカンの答えにいくつかの変更を加えました. 私のソリューションは次のようになります。

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

public class JEComboBox<T> extends JComboBox<T> {

  public JEComboBox(final T placeHolder){
    setModel(new DefaultComboBoxModel<T>() {
      private static final long serialVersionUID = 1L;
      boolean selectionAllowed = true;

      @Override
      public void setSelectedItem(Object anObject) {
        if (!placeHolder.equals(anObject)) {
          super.setSelectedItem(anObject);
        } else if (selectionAllowed) {
          // Allow this just once
          selectionAllowed = false;
          super.setSelectedItem(anObject);
        }
      }
    });
    addItem(placeHolder);
  }
}

プレースホルダーを追加するときは、匿名オブジェクトを作成し、toString メソッドをオーバーライドします。実装は次のようになります。

public class car{
  String final model;
  public car(String model){
    this.model = model;
  }
}

JEComboBox の作成:

JEComboBox comboBoxWithPlaceHolder = new JEComboBox<Car>(new Car{
  public String toString(){
    return "- Select your car -"
  }
});

長所

  • コンボボックスは汎用です

短所

  • T および Override toString() メソッドの匿名サブタイプを実装する必要があるため、最終クラスでは機能しません (匿名サブタイプはインターフェースを実装する必要があるため、インターフェースから継承するクラスをコンボボックスが保持している場合、混乱する可能性があります。 null を返すメソッドになります。)
于 2014-07-29T12:58:35.880 に答える