Java 如何到达jSwing combobox中的对象?
我正在开发一个基于maven的java桌面应用程序,并使用jSwing框架作为接口。我需要在combobox中向人们显示任务的名称,但我不确定我是否做得很好 在这个代码部分中,我从数据库中获取了任务作为列表,然后在combobox中显示它们Java 如何到达jSwing combobox中的对象?,java,swing,button,combobox,Java,Swing,Button,Combobox,我正在开发一个基于maven的java桌面应用程序,并使用jSwing框架作为接口。我需要在combobox中向人们显示任务的名称,但我不确定我是否做得很好 在这个代码部分中,我从数据库中获取了任务作为列表,然后在combobox中显示它们 List<TmsTask> task; int i; try { task = Application.getApp().getMainService().getTasksList(); for (
List<TmsTask> task;
int i;
try {
task = Application.getApp().getMainService().getTasksList();
for (i = 0; i <= task.size(); i++) {
jComboBoxTask.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{task.get(i).getTaskName(),
task.get(i + 1).getTaskName(),
task.get(i + 2).getTaskName()}));
}
} catch (Exception ex) {
Logger.getLogger(BindTask.class.getName()).log(Level.SEVERE, null, ex);
}
列表任务;
int i;
试一试{
task=Application.getApp().getMainService().getTasksList();
for(i=0;ifor(i=0;i@camickr是正确的(在注释中)。使用组合框显示对象中的所有字段没有多大意义。只需从对象中重写toString
方法,默认渲染器就会显示它
下面是如何使用一个简单的Person对象(姓名、年龄)执行此操作
封装测试;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.SwingUtilities;
公共类ObjectsInComboBox扩展了JFrame{
公共对象组合框(){
超级(“组合框”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(新尺寸(300300));
getContentPane().setLayout(新的FlowLayout());
JComboBox personComboBox=新JComboBox();
getContentPane().add(personComboBox);
包装();
addItem(新人(“约翰”,31岁));
附加项(新人(“乔治”,55岁));
addItem(新人(“Mike”,12));
addItem(新人(“Brian”,36岁));
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(()->{
ObjectsInComboBox框架=新建ObjectsInComboBox();
frame.setVisible(true);
});
}
}
班主任{
私有字符串名称;
私人互联网;
公众人物(字符串名称,整数年龄){
this.name=名称;
这个。年龄=年龄;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
@凌驾
公共字符串toString(){
返回name+“-”+age;//toString覆盖,以便渲染器可以显示它。
}
}
我的主要问题是在combobox中没有显示任务名称,主要问题是它们只是字符串。我的意思是我想在combobox中使用数据来保存表单。所以我需要任务对象的信息,而不仅仅是任务名称。如何到达任务对象,然后在combobox中显示它们将是一个问题。我的主要问题是在c中没有显示任务名称ombobox,
-是的。根据提供的代码,您将只显示一个任务名称,而不是任务名称列表。当您提出问题时,请发布正确的代码。您发布的代码完全错误。您创建了一个循环,这意味着有多个任务。如果for循环执行多次,您将丢失第一个站点的数据循环的定量。如果只有一个任务,则不需要循环。在任何情况下,请参阅编辑。
private void jComboBoxTaskMousePressed(java.awt.event.MouseEvent evt) {
TmsTask task;
try {
task = Application.getApp().getMainService().getTasks();
jComboBoxTask.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{task.getTaskName(),
task.getTaskName(),
task.getTaskName()}));
} catch (Exception ex) {
Logger.getLogger(BindTask.class.getName()).log(Level.SEVERE, null, ex);
}
}
for (i = 0; i <= task.size(); i++)
{
jComboBoxTask.setModel(new javax.swing.DefaultComboBoxModel<>(
new String[]{task.get(i).getTaskName(), task.get(i + 1).getTaskName(),
package test;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ObjectsInComboBox extends JFrame {
public ObjectsInComboBox() {
super("combo boxes");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
getContentPane().setLayout(new FlowLayout());
JComboBox<Person> personComboBox = new JComboBox<>();
getContentPane().add(personComboBox);
pack();
personComboBox.addItem(new Person("John", 31));
personComboBox.addItem(new Person("George", 55));
personComboBox.addItem(new Person("Mike", 12));
personComboBox.addItem(new Person("Brian", 36));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
ObjectsInComboBox frame = new ObjectsInComboBox();
frame.setVisible(true);
});
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + " - " + age; //toString override so renderer can show it.
}
}