我创建了一个自定义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,
非常感谢任何帮助或建议!感谢您阅读所有这些内容。
答案 0 :(得分:0)
我很确定我没有发生方法循环,
您创建JListCustomRendererBook
的实例,其扩展Frame1
将调用initialize()
例程,然后创建另一个JListCutomRendererBook
等等。