如何使用.DefaultListCellRenderer

时间:2010-03-26 10:15:39

标签: java swing

首先,我是Java编程的新手,我的母语不是英语,但我仍然希望得到大家的帮助。我尝试做的是一个带有jComboBox和jList的简单java接口。我想用对象名称弹出到jComboBox,当用户选择其中一个名称时,获取我将用于填充jList的object-id。这可能很简单,但我整天都遇到了这个问题。

private void loadComboBox() {
        biz.Object object = new biz.Object();
        try {
            ArrayList<biz.Object> arrayOfObjects= object.getAllObjects();// ArrayList of objects
            for (biz.Object o:arrayOfObjects)
            {
                 if (o != null)
                     cbm.addElement(o); //`toString-method


            }
 cb.setModel(cbm); //JComboBox  

2 个答案:

答案 0 :(得分:1)

在大多数情况下,swing组件可以看作是一个多级模型 - 视图 - 控制器实现者。

根据你的说法,我理解你想要在JComboBox中选择一个对象时,将该obejct放在你的JList中。

首先,我建议你看看Swing tutorial for JComboBox

然后,您将看到您有一些可能性来处理JComboBox发送的事件。

  • Adding an ActionListener到您的JComboBox。每次在JComboBox上执行操作时都会收到通知,因此会非常密集。因此,它可能不是最合适的。
  • Adding an ItemListener到您的JComboBox。每次选择的项目更改时都会收到通知。但它被调用的时间取决于之前的选择状态。

我怀疑第二种方法比第一种方案更可取,因为它适用于组合框模型数据,而不是仅仅依赖于可见组件状态(当然,首先做的是某种程度上 - 小于MouseListener,但是超过第二个。)

答案 1 :(得分:1)

我不是100%确定我是否理解你的问题 - 但很可能你甚至不需要实现自己的CellRenderer。也许以下代码对您有帮助?

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Test extends JPanel implements ItemListener {
    private JComboBox comboBox;
    private JList list;

    public Test() {
        comboBox = new JComboBox();
        list = new JList(new DefaultListModel());

        /* initialize combo box */
        loadComboBox();

        /* listen for combo box selections */
        comboBox.addItemListener(this);

        /* simple layout */
        setLayout(new BorderLayout());
        add(comboBox, BorderLayout.NORTH);
        add(new JScrollPane(list), BorderLayout.CENTER);
    }

    /**
     * Invoked when an item has been selected or deselected by the user.
     */
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            /* add item to list */
            ((DefaultListModel) list.getModel()).addElement(e.getItem());
        }
    }

    private void loadComboBox() {
        /* let's fake some content here */
        Object[] objects = { "foo", "bar", "baz", "qux",
                             "quux", "corge", "grault",
                             "garply", "waldo", "fred",
                             "plugh", "xyzzy", "thud" };

        /* put the objects into the combo box */
        comboBox.setModel(new DefaultComboBoxModel(objects));
    }

    public static void main(String[] args) {
        Test test = new Test();

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(test);

        frame.setSize(300, 400);

        frame.setVisible(true);
    }
}