上下文:

我正在使用Applet女巫管理保真卡。该应用程序的过去版本是由其他开发人员完成的。没有文档。我必须改善它。

问题:

为了吸引客户,该应用程序具有一些组合框。那些组合框由垂直填充

我尝试对组合框中的项目进行排序,但每次失败

我已经读过有关Collections.sort(x);的内容;其中x可以是列表或向量

但是无论我在哪里放置元素排序指令,蚀标记排序都会出现此错误:

Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (Vector<NomClient>). The inferred type NomClient is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>


这是组合框的代码:

    private JComboBox<Object> getComboBox() {
    if (this.comboBox == null) {
        this.comboBox = new JComboBox<Object>();
        this.comboBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {

                try {
                    SelectionNumeroCarteFidelite2.this.name = SelectionNumeroCarteFidelite2.this.comboBox
                            .getSelectedItem().toString();
                    SelectionNumeroCarteFidelite2.this.mod2 = new DefaultComboBoxModel<Object>(
                            Select.listePrenomclientfidelite(SelectionNumeroCarteFidelite2.this.name));
                    SelectionNumeroCarteFidelite2.this.comboBox_1
                            .setModel(SelectionNumeroCarteFidelite2.this.mod2);
                    SelectionNumeroCarteFidelite2.this.lblTaperOuSlectionner
                            .setVisible(false);
                } catch (final Exception e1) {


                    final String message = "Choix Impossible - Merci de vérifier votre sélection";
                    System.out.print("Nom " + message);
                    final AlerteSelection fenetre = new AlerteSelection(
                            SelectionNumeroCarteFidelite2.this.interfaceactuelle,
                            message);
                    fenetre.setVisible(true);
                    SelectionNumeroCarteFidelite2.this.interfaceactuelle
                            .setEnabled(false);
                    SelectionNumeroCarteFidelite2.this.lblValider
                            .setVisible(false);
                    SelectionNumeroCarteFidelite2.this.lblTaperOuSlectionner
                            .setVisible(true);
                }

            }
        });
        this.comboBox.setEnabled(false);
        this.comboBox.setForeground(Color.GRAY);
        this.comboBox.setFont(new Font("Tahoma", Font.BOLD, 11));
        this.comboBox.setEditable(true);
        this.comboBox.setBorder(null);
        this.comboBox.setBackground(Color.WHITE);
        this.comboBox.setBounds(528, 426, 278, 22);

        this.mod = new DefaultComboBoxModel<Object>(
                Select.listenomclientfidelite());
        this.comboBox.setModel(this.mod);
        AutoCompletion.enable(this.comboBox);

    }
    return this.comboBox;
}


这是Select.listenomclientfidelite()的代码

public static Object[] listenomclientfidelite() {
    final Vector<NomClient> requete = new Vector<NomClient>();
    try {
        c = Connexion.getCon();
        final String sql = "SELECT DISTINCT NOMCLIENT FROM CARTE_DE_FIDELITE INNER JOIN CLIENT ON CLIENT.IDCLIENT=CARTE_DE_FIDELITE.IDCLIENT";
        preStm = c.prepareStatement(sql);
        rs = preStm.executeQuery();
    } catch (final Exception e) {
        System.out.print("erreur" + e.getMessage());
    }
    try {
        requete.add(null);
        NomClient liste;
        while (rs.next()) {
            liste = new NomClient();
            liste.setNom(rs.getString(1));
            requete.add(liste);
            System.out.println("listenomclientfidelite, liste is : "+liste);
        }
        rs.close();
        preStm.close();
    } catch (final Exception e) {
        System.out.print("errorlistenom" + e.getMessage());
    }

    return requete.toArray(new Object[0]);


在Hovercraft Full Of Eels的建议下,我修改了我的类NomClient之后,我了解到我的NomCli类是问题所在,而不是使用vector,因此这是一个新步骤,但尚无解决方案,因此这是我的修改后的NomClient类:

public class NomClient implements Comparable<NomClient> {

String nom;

public String getNom() {
    return this.nom;
}

public void setNom(final String nom) {
    this.nom = nom;
}

@Override
public String toString() {
    return this.nom;
}

@Override
public int compareTo(NomClient other) {
    System.out.println("nom : "+this.nom);
    System.out.println("nom to string : "+this.nom.toString());
    System.out.println(other.nom);
    System.out.println("compare to : "+other.nom.toString());
    int last = this.nom.toString().compareTo(other.nom.toString());
    return last == 0 ? this.nom.compareTo(other.nom) : last;
}


}

我还在sselect.listenomclientfidelite()的return语句之前添加了Collection排序,

像这样 :

        Collections.sort(requete);

            return requete.toArray(new Object[0]);


现在,我必须处理java.lang.NullPointerException。 “其他”为空

有没有人对我的组合框进行正确排序?

最佳答案

如果您不能更改NomClient类以使其实现Comparable<NomClient>,这意味着您必须为其提供public int compareTo(NomClient o)方法,则在您的sort方法调用中使用Comparator<NomClient>。这是您创建的具有一个方法public int compare(NomClient o1, NomClient o2)的类,该类返回-1、0或1,具体取决于o1在功能上是否小于,等于或大于o2参数。您将在Collections.sort(myCollection, myComparator)方法调用中将Comparator实例作为第二个参数传递。

请注意,您的问题与使用Vector无关,而与NomClient类未实现Comparable无关。

关于java - 填充Vector时如何对Java组合框进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31987564/

10-09 03:06