需要帮助将自定义JList渲染器添加到标准JFrame

时间:2016-11-08 03:31:02

标签: java swing renderer

我创建了一个自定义JList渲染器,列出了某种虚拟库中书籍的标题。渲染器在其自己的窗口内工作正常,但我需要它作为当前JFrame的一部分,我不确定如何实现它。

以下是我的渲染器的代码:

public class JListCustomRendererBook extends Frame1{

public JListCustomRendererBook(int i)
{

    library[i] = new LibraryHandler(i);
    library[i].booksToText();
    library[1].loadBooks();

    DefaultListModel<Book> listModel = new DefaultListModel<>();

    for (int j = 0; j < library[i].books.length; j++)
    {
        if (library[i].books[j] != null)
        {
            listModel.addElement(library[i].books[j]);
        }
    }

    JList<Book> bookList = new JList<>(listModel);
    add(new JScrollPane(bookList));

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //this.setTitle("Test panel");
    this.setSize(200, 200);
    //this.setLocationRelativeTo(null);
    this.setVisible(true);
}

}

这是窗口(Frame1)的初始化代码:

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 700, 350);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JListCustomRendererBook jasonList = new JListCustomRendererBook(1);
    jasonList.setBounds(450,30,197,205);

    JList list = new JList();
    list.setBounds(450, 30, 197, 205);
    list.setToolTipText("THIS IS SO COL");
    list.setLayoutOrientation(JList.VERTICAL_WRAP);
    list.setModel(new AbstractListModel() {
        String[] values = new String[] {"Hey", "This is cool", "Testing"};
        public int getSize() {
            return values.length;
        }
        public Object getElementAt(int index) {
            return values[index];
        }
    });

如果我按原样运行代码,它将返回&#34;线程中的异常&#34; AWT-EventQueue-0&#34; java.lang.StackOverflowError的&#34;在创建jsonList的行。我相当肯定我没有发生方法循环,​​但我可能忽略了它。

总结一下:我基本上希望能够绘制当前JList所在的自定义渲染器。这两个依赖于其他几个类(例如LibraryHandler,

非常感谢任何帮助或建议!感谢您阅读所有这些内容。

1 个答案:

答案 0 :(得分:0)

  

我很确定我没有发生方法循环,​​

您创建JListCustomRendererBook的实例,其扩展Frame1将调用initialize()例程,然后创建另一个JListCutomRendererBook等等。