首先,我是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
答案 0 :(得分:1)
在大多数情况下,swing组件可以看作是一个多级模型 - 视图 - 控制器实现者。
根据你的说法,我理解你想要在JComboBox中选择一个对象时,将该obejct放在你的JList中。
首先,我建议你看看Swing tutorial for JComboBox。
然后,您将看到您有一些可能性来处理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);
}
}