我有一个人[]有三个人(p1,p2,p3)。Person类有两个属性name和email。
我使用了以下代码。
Person p1 = new Person("Smith", "smith@mail.com");
Person p2 = new Person("Tom", "tom@gmail.com");
Person p3 = new Person("John","john@mail.com");
Person[] per_arr = new Person[] { p1, p2, p3};
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JComboBox<String> combo1 = new JComboBox<String>();
JComboBox<String> combo2 = new JComboBox<String>();
for (Person p : per_arr) {
combo1.addItem(p.getName());
combo2.addItem(p.getEmail());
}
panel.add(combo1);
panel.add(combo2);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
但我不想这样用。我想使用两个组合框与相同的型号。我尝试使用DefaultComboBoxModel并重写getElementAt()方法,如下所示。
public class MyModel extends DefaultComboBoxModel<Object> {
public MyModel(Object[] items) {
super(items);
}
@Override
public Object getElementAt(int index) {
if (super.getElementAt(index) instanceof Person) {
return (Person)super.getElementAt(index);
} else {
return null;
}
}
}
问题是如何使用相同的ComboBoxModel在一个JComboBox中添加Person[]的所有名称,并在另一个JComboBox中添加所有电子邮件。
使用ComboBoxModel
的一个实例和JComboBox
的两个实例,每个实例具有相同的模型。让每个JComboBox
都有一个自定义呈现器,用于显示该JComboBox
所需的Person
属性。
在下面的示例中,每个组合都获得实现策略模式的单个呈现器的自己的实例,并传递一个函数
,该函数在调用呈现器时选择正确的属性:
DefaultComboBoxModel model = new DefaultComboBoxModel(…);
JComboBox<String> combo1 = new JComboBox<>(model);
combo1.setRenderer(new PersonRenderer(Person::getName));
JComboBox<String> combo2 = new JComboBox<>(model);
combo2.setRenderer(new PersonRenderer(Person::getEmail));
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.util.function.Function;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
/**
* @see http://stackoverflow.com/a/37222598/230513
*/
public class ComboRendererTest {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new FlowLayout());
DefaultComboBoxModel model = new DefaultComboBoxModel(new Person[]{
new Person("Alpher", "alpher@example.com"),
new Person("Bethe", "bethe@example.com"),
new Person("Gammow", "gammow@example.com")});
JComboBox<String> combo1 = new JComboBox<>(model);
combo1.setRenderer(new PersonRenderer(Person::getName));
JComboBox<String> combo2 = new JComboBox<>(model);
combo2.setRenderer(new PersonRenderer(Person::getEmail));
f.add(combo1);
f.add(combo2);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static class PersonRenderer extends DefaultListCellRenderer {
Function<Person, String> personAttribute;
public PersonRenderer(Function<Person, String> personAttribute) {
this.personAttribute = personAttribute;
}
@Override
public Component getListCellRendererComponent(JList<?> list, Object
value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel l = (JLabel) super.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
Person p = (Person) value;
l.setText(personAttribute.apply(p));
return l;
}
}
private static class Person {
private final String name;
private final String email;
public Person(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new ComboRendererTest()::display);
}
}
在Java中,对于两个JVM(运行在同一台物理机器上),是否有办法使用/共享相同的内存地址空间?假设JVM-1中的生产者将消息放在特定的预定义内存位置,如果JVM-2上的消费者知道要查看哪个内存位置,那么它是否可以检索消息?
问题内容: 我正在将AngularJS与c#mvc一起使用。我有一个主页,用户可以在其中输入一些数据,并将其传递给第二个模块,在该模块中,我将使用这些数据进行处理和决策。我必须使用第二个模块中第一个模块中输入或更新的数据。有人可以帮我实现这个目标吗? 问题答案: 希望以下实现可以帮助您有所了解。
我正在试图弄清楚如何在Helm中的两个图表之间共享数据。 在两个图表之间共享configmap的最佳实践是什么?
问题内容: 假设我有一个要注入到config中的模块: 有两个子模块: 这是第一个: 第二个是相同的,以简化示例: 您会注意到,您可以将它们作为提供者来访问以配置选项: 如果我们在控制器中,则可以覆盖每个范围,例如: 但是,如果他们总是共享相同的财产怎么办?如何在提供商之间共享某些东西? 我可以同时为和注入和配置共享属性吗? 如何同时访问和作为单个模块的扩展? 问题答案: 将模块插入两个共享这些属
我有大约60个套接字和20个线程,我想确保每个线程每次都在不同的套接字上工作,所以我根本不想在两个线程之间共享同一个套接字。 在我的类中,我有一个后台线程,它每60秒运行一次并调用方法。在方法中,我迭代我拥有的所有套接字,然后通过调用类的方法开始逐个ping它们,并根据响应将它们标记为活的或死的。在方法中,我总是需要迭代所有套接字并ping它们以检查它们是活的还是死的。 现在,所有读取器线程将并发
问题内容: 我需要在两个(或更多个)组合框之间共享数据,但是我想独立选择元素。例如,如果我在第一个comboBox中选择Object1,则我的第二个ComboBox也选择Object1,因为它们具有相同的模型(DefaultComboBoxModel,并且此模型还管理所选的对象)。但是我不想要这种行为。我想在我的comboBoxes中独立选择对象。当我在第一个comboBox中选择对象时,我的第二