gpt4 book ai didi

java - Java组合框填充Vector时如何排序?

转载 作者:行者123 更新时间:2023-12-01 22:10:01 27 4
gpt4 key购买 nike

上下文:

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

问题:

为了联系客户,该应用程序有一些组合框。这些组合框由 vector 填充

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

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

但是无论我在何处放置对元素进行排序的指令,Eclipse 标记排序都会出现此错误:

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类(class):

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 语句之前添加了集合排序,

像这样:

        Collections.sort(requete);

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

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

有人知道如何正确排序我的组合框吗?

最佳答案

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com