Res*_*had 1 java swing arraylist hashmap jcombobox
您好我有以下代码,以查看JComboBox中的项是否是类(Persoon)的实例.
public class ItemChangeListener implements ItemListener {
Persoon selectedPerson;
RekeningApp app;
PersoonView view;
public ItemChangeListener(PersoonView view) {
this.view = view;
}
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
System.out.println("Itemchangelistener " + item);
// do something with object
if(item instanceof Persoon) {
System.out.println("Instance");
this.selectedPerson = (Persoon) item;
view.setOverzicht(this.selectedPerson);
} else {
this.selectedPerson = null;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
item的输出是persoon.name变量的值.所以JComboBox中的项目实际上是字符串.
这就是JComboBox列表的设置方式.
personenList.addItem(persoon.getNaam());
我的问题是..如何检查这个Persoon对象是否存在并且与JComboBox中的相同?
您应该添加到JComboBox的Person对象,不只是名字,所以当你调用Object item = event.getItem();这将返回Person,而不是一个String.如果要在其中显示人名,请将类中JComboBox的toString方法覆盖为Person以下内容:
public String toString()
return this.naam;
}
Run Code Online (Sandbox Code Playgroud)
您应该将项目添加到列表中.
personenList.addItem(persoon);
Run Code Online (Sandbox Code Playgroud)
编辑
如果您不想(或可以)覆盖该toString方法,则应使用自定义渲染器.这是一个链接和示例:
http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer
toString仅用于显示目的的覆盖方法不是一个好习惯.这也是一个潜在的瓶颈.让我们举例来说,你需要展示两个JComboBox与人不同的东西:其中一个你只需要显示名字,而另一个你需要显示全名.您只能覆盖一次Person#toString()方法.
要经历的方法是使用ListCellRenderer.例:
public class Person {
private String _name;
private String _surname;
public Person(String name, String surname){
_name = name;
_surname = surname;
}
public String getName() {
return _name;
}
public String getSurname() {
return _surname;
}
}
Run Code Online (Sandbox Code Playgroud)
这是GUI:
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
private void initGUI(){
Person person1 = new Person("First", "Person");
Person person2 = new Person("Second", "Person");
Person[] persons = new Person[]{person1, person2};
/*
* This combo box will show only the person's name
*/
JComboBox comboBox1 = new JComboBox(new DefaultComboBoxModel(persons));
comboBox1.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(value instanceof Person){
Person person = (Person) value;
setText(person.getName());
}
return this;
}
} );
/*
* This combo box will show person's full name
*/
JComboBox comboBox2 = new JComboBox(new DefaultComboBoxModel(persons));
comboBox2.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(value instanceof Person){
Person person = (Person) value;
StringBuilder sb = new StringBuilder();
sb.append(person.getSurname()).append(", ").append(person.getName());
setText(sb.toString());
}
return this;
}
} );
JPanel content = new JPanel(new GridLayout(2, 2));
content.add(new JLabel("Name:"));
content.add(comboBox1);
content.add(new JLabel("Surname, Name:"));
content.add(comboBox2);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().initGUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果您运行此示例,您将看到如下内容:

正如您所看到的,它们都JComboBox包含Person对象,但每个对象的表示形式各不相同.
| 归档时间: |
|
| 查看次数: |
15337 次 |
| 最近记录: |