上下文:
我正在使用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/