gpt4 book ai didi

java - 编辑字段中具有不同文本的可编辑 JComboBox

转载 作者:行者123 更新时间:2023-12-01 11:05:11 25 4
gpt4 key购买 nike

我一直在寻找一种方法来拥有 JComboBox其中列表中的项目正常显示,但在编辑字段中仅显示数字。

我遇到了这段代码(仅根据我的需要稍加修改):

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class ComboBoxItem extends JFrame implements ActionListener {
public ComboBoxItem() {
Vector model = new Vector();
model.addElement( new Item(1, "car" ) );
model.addElement( new Item(2, "plane" ) );
model.addElement( new Item(3, "train" ) );
model.addElement( new Item(4, "boat" ) );

JComboBox comboBox;

comboBox = new JComboBox( model );
comboBox.addActionListener( this );
getContentPane().add(comboBox, BorderLayout.NORTH );

comboBox = new JComboBox( model );

// I want the comboBox editable.
//comboBox.setEditable(true);

comboBox.setRenderer( new ItemRenderer() );
comboBox.addActionListener( this );
getContentPane().add(comboBox, BorderLayout.SOUTH );
}

public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
Item item = (Item)comboBox.getSelectedItem();
System.out.println( item.getId() + " : " + item.getDescription() );
}

class ItemRenderer extends BasicComboBoxRenderer {
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);

if (value != null) {
Item item = (Item)value;
setText( item.getDescription().toUpperCase() );
}

if (index == -1) {
Item item = (Item)value;
setText( "" + item.getId() );
}
return this;
}
}

class Item {
private int id;
private String description;

public Item(int id, String description) {
this.id = id;
this.description = description;
}

public int getId() {
return id;
}

public String getDescription() {
return description;
}

public String toString() {
return description;
}
}

public static void main(String[] args) {
JFrame frame = new ComboBoxItem();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}
}

这很有效,直到我使用 comboBox.setEditable(true); 使组合框可编辑。 .

背景信息:

当用户在编辑字段中键入内容时,我计划使用数据库中的对象填充弹出列表。当用户从弹出列表中选择一个项目时,编辑字段应仅显示该对象的 id ,但弹出列表应该显示更多信息,以便用户可以做出明智的选择。

无论可编辑功能是否打开,任何人都可以帮助我完成这项工作吗?

最佳答案

您需要的是覆盖组合框的默认编辑器,因为当您将组合框设置为可编辑时,它会使用编辑器来呈现您在下拉列表中选择的内容。

下面是使用BasicComboBoxEditor 的一种实现方式。您只需要重写 setItem 方法即可。

comboBox.setEditor(new ItemEditor());

class ItemEditor extends BasicComboBoxEditor {
public void setItem(Object anObject) {
Item item = (Item) anObject;
editor.setText(item.getId() + "");
}
}

关于java - 编辑字段中具有不同文本的可编辑 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33038195/

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