Java 在不使用集合的情况下创建JList

Java 在不使用集合的情况下创建JList,java,swing,jlist,Java,Swing,Jlist,我上大学时做的练习有问题。我需要创建一个JList,并在那里放置一些元素(只是一个简单的文本),而不使用任何集合或数组。这很愚蠢,因为JList通常是用DefaultListModel初始化的(它也是一个集合),但在这种情况下,我不允许使用它。我试图将一个JLabel对象放入JList的参数化构造函数中,但它不起作用。你们有谁知道怎么处理吗?非常感谢你的帮助 到目前为止,我的代码是: JFrame jFrame = new JFrame("title"); JList<String>

我上大学时做的练习有问题。我需要创建一个JList,并在那里放置一些元素(只是一个简单的文本),而不使用任何集合或数组。这很愚蠢,因为JList通常是用DefaultListModel初始化的(它也是一个集合),但在这种情况下,我不允许使用它。我试图将一个JLabel对象放入JList的参数化构造函数中,但它不起作用。你们有谁知道怎么处理吗?非常感谢你的帮助

到目前为止,我的代码是:

JFrame jFrame = new JFrame("title");
JList<String> jList = new JList<>();
jList.add(new JLabel("label1"));
jFrame.add(jList);
jFrame.setSize(500, 500);
jFrame.setVisible(true);
JFrame JFrame=新的JFrame(“标题”);
JList JList=新JList();
jList.add(新JLabel(“标签1”));
jFrame.add(jList);
jFrame.setSize(500500);
jFrame.setVisible(true);

当我正确理解您的学术观点时,您只需创建一个列表模型,它只需返回常量值或使用公式计算行值

这是我给你的建议

import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class SimpleListExample implements Runnable {


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SimpleListExample());
    }

    @Override
    public void run() {
        JList<String> list = new JList<>(new SimpleListModel());
        JFrame frame = new JFrame("List example");
        frame.add(new JScrollPane(list));
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(350, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    @SuppressWarnings("serial")
    private static class SimpleListModel extends AbstractListModel<String> {

        @Override
        public int getSize() {
            return 20;
        }

        @Override
        public String getElementAt(int index) {
            // Generate constant value with the row index ;)
            return "It's row number: " + (index + 1);
        }
    }
}
import javax.swing.AbstractListModel;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JScrollPane;
导入javax.swing.SwingUtilities;
导入javax.swing.WindowConstants;
公共类SimpleListExample实现Runnable{
公共静态void main(字符串[]args){
invokeLater(新的SimpleListExample());
}
@凌驾
公开募捐{
JList list=newjlist(newsimplelistmodel());
JFrame=新JFrame(“列表示例”);
frame.add(新的JScrollPane(列表));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
框架设置尺寸(350200);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
@抑制警告(“串行”)
私有静态类SimpleListModel扩展了AbstractListModel{
@凌驾
公共int getSize(){
返回20;
}
@凌驾
公共字符串getElementAt(int索引){
//使用行索引生成常量值;)
返回“它的行号:”+(索引+1);
}
}
}

你能给我们看一些代码吗?是的,在这里:
JFrame-JFrame=new-JFrame(“title”);JList JList=新JList();jList.add(新JLabel(“标签1”));jFrame.add(jList);jFrame.setSize(500500);jFrame.setVisible(true)请编辑您的问题,并将其作为代码格式文本添加到解决方案中。我们需要查看您尝试了什么,您需要告诉我们它是如何工作的。您不需要将JLabel添加到JList。你可以添加字符串。
我不能添加字符串。
当然可以。有关工作示例,请阅读上的swing教程<代码>我只能添加一个组件,
-这不是JList的工作方式。您将数据(通常是字符串)添加到
ListModel
(而不是JList)中,
JList
将适当地呈现数据。谢谢您的回答。关键是我不能使用任何集合和您使用的
AbstractListModel
实现了
ListModel
,因为列表是一种集合,所以我不允许使用它。我试图使用在我的
JList
上调用的
add()
方法添加一些元素,但它不起作用-运行我的代码后框架是空的。你知道为什么它不起作用吗?@zerkenn因为方法
add
JList
没有意义。您只能使用
ListModel
JList
交互。因此,我认为你误解了你的学术。@泽肯你不能与JLIST交互而不与它的模型交互——这是不可能的——你可以考虑创建一个自定义的列表模型,它具有静态的元素数量。