【问题标题】:create JList without using collections [duplicate]在不使用集合的情况下创建 JList [重复]
【发布时间】:2018-12-03 09:25:37
【问题描述】:

我的大学运动有问题。我需要创建一个 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 = new JFrame("title"); JList&lt;String&gt; jList = new JList&lt;&gt;(); jList.add(new JLabel("label1")); jFrame.add(jList); jFrame.setSize(500,500); jFrame.setVisible(true);
  • 请编辑您的问题,并以代码格式的文本添加一个体面的解决方案尝试。我们需要看看您尝试了什么,您需要告诉我们它是如何不起作用的。跨度>
  • 您不会将 JLabel 添加到 JList。你给它添加字符串。
  • I cannot add String 当然可以。阅读How to Use LIsts 上的摇摆教程以获取工作示例。 I can add only a Component, - 这不是 JList 的工作方式。您将数据(通常是字符串)添加到 ListModel(不是 JList),JList 将适当地呈现数据。

标签: java swing jlist


【解决方案1】:

当我正确理解你的学术时,你只需要创建一个列表模型,它只是简单地返回常量值或者可以使用公式计算行值。

这是我给你的建议。

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);
        }
    }
}

【讨论】:

  • 感谢您的回答。关键是我不能使用任何集合,而您使用过的AbstractListModel 实现了ListModel,并且由于列表是一种集合,因此我不允许使用它。我尝试使用在我的JList 上调用的add() 方法添加一些元素,但它不起作用 - 运行我的代码后框架为空。你知道为什么它不起作用吗?
  • @zerkenn 因为方法addJList 没有意义。您只能使用ListModelJList 进行交互。所以我认为你误解了你的学术。
  • @zerkenn 你不能在不与模型交互的情况下与 JList 交互——这是不可能的——你可以考虑创建一个具有静态元素数量的自定义 ListModel
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 2015-11-11
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
相关资源
最近更新 更多