gpt4 book ai didi

java - 如何使用 Map 元素作为 JComboBox 的文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:50 27 4
gpt4 key购买 nike

我正在用一个集合的所有元素填充一个 JComboBox(使用 addItem())。集合中的每个元素都是一个 HashMap(因此它是一个 Hashmap 的 ComboBox..)。

我的问题是 - 鉴于我需要每个项目都是一个 HashMap 我如何将文本设置为出现在 GUI 的组合框中?它需要是 map 中某个键的值。通常,如果我用自己的类型填充组合框,我会覆盖 toString() 方法...但我不确定如何实现这一点,因为我使用的是 Java HashMap。

任何想法(如果可能的话,不实现我自己的 HashMap)?

更新:如果我想要自定义功能,似乎无论如何都无法避免让 JComboBox 中的对象覆盖 toString()。我希望有一种方法 (1) 指定要加载到 JComboBox 中的对象,以及 (2) 指定这些对象在 GUI 中的显示方式。

最佳答案

(2) specify how these objects are to appear in the GUI.

您可以将任何对象添加到模型,然后创建自定义渲染器以您想要的任何方式显示对象。显示 toString() 方法和自定义呈现器方法的简单示例:

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;

// Easiest approach is to just override toString() method
// of the Item class

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

// Most flexible approach is to create a custom render
// to diplay the Item data

comboBox = new JComboBox( model );
comboBox.setDragEnabled(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 );
}

}

关于java - 如何使用 Map 元素作为 JComboBox 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812850/

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