gpt4 book ai didi

java - 使用另一个类的 ArrayList 填充 JComboBox

转载 作者:行者123 更新时间:2023-12-03 13:21:01 25 4
gpt4 key购买 nike

我正在尝试一些自学,并且正在开发一个小应用程序,该应用程序从文本文件中读取详细信息并将它们显示在 JComboBox 中以供选择。计划是能够从组合框中选择一个项目,按下按钮并根据选择显示带有文本的弹出消息,但我离题了。

目前,组合框在编译时显示我认为是某种异常。它说 [Ljava.lang.Object;@175078b

我在这里做错了什么?

这是具有 ArrayList 的类:

import java.io.File;
import java.io.FileNotFoundException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;

public class Stuff {

private ArrayList<String> list;
private String name;

private ArrayList<String> getList() {
return list;
}

private void setList(ArrayList list) {
this.list = list;
}

public Stuff() {
readNames();
}

public void readNames() {
File file = new File("Names.txt");
try {
ArrayList<String> list = new ArrayList<>();

Scanner in = new Scanner(file);
while (in.hasNextLine()) {
list.add(in.nextLine());
}
Collections.sort(list);
// for (int i = 0; i < list.size();++i){
// System.out.println(list.get(i));
// }
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

这是带有 GUI 的类:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.ArrayList;
import javax.swing.*;


public class GUI extends JFrame{
private JLabel label = new JLabel("Who is the most awesome?");
private JComboBox box = new JComboBox();
private JFrame frame = new JFrame();
private JTextArea text = new JTextArea();
private JButton button = new JButton("Press Me");
private JPanel panel = new JPanel();
private ArrayList<Stuff> list = new ArrayList<>();


private JFrame getFrame(){
return frame;
}
private ArrayList<Stuff> getList(){
return list;
}
private void setList (ArrayList<Stuff> list){
list = list;
}



public GUI(){
buildGUI();
}

private void buildGUI(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setLayout(new FlowLayout());
panel.add(label);
panel.add(box);
panel.add(button);
box.addItem(list.toArray());

frame.add(text);
frame.add(panel, BorderLayout.CENTER);
frame.setSize(400,100);
frame.setVisible(true);
}
}

最佳答案

您的问题在行中:box.addItem(list.toArray());

addItem() JComboBox 的方法需要一个 Object 作为参数。通常,String 对象用作参数。相反,当您真正想要添加列表中的每个项目时,您所做的是尝试将实际列表引用添加到组合框。

相反,您应该按如下方式在列表中添加单个项目:

for(Stuff stuff : list) {
box.addItem(stuff.getName());
}

编辑:再次阅读您原来的措辞问题,我认为您关于 GUI 的第二个代码片段不应该使用 Stuff 的另一个 ArrayList如果您实际上打算在 Stuff 对象的一个​​实例中使用 ArrayList。因此,您应该首先更改:

private ArrayList<Stuff> list = new ArrayList<>();

private Stuff = new Stuff();

并更改 for 循环以遍历 stuff.getList() 而不是 list。为了澄清,for 循环可能看起来像:

for(String detail : stuff.getList()) {
box.addItem(detail); // add each extracted detail from the text file that was stored in the list of the stuff object
}

关于java - 使用另一个类的 ArrayList 填充 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com