0
我已经创建了一个自定义JList渲染器,它列出了某种虚拟库中书籍的标题。渲染器在自己的窗口内工作正常,但我需要它成为当前JFrame的一部分,我不确定如何实现它。需要帮助将自定义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);
}
}
这里是该窗口的初始化代码(帧1):
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];
}
});
如果我运行的代码,因为它目前是,它在创建jsonList的行返回“线程中的异常”AWT-EventQueue-0“java.lang.StackOverflowError”。我相当肯定我没有发生方法循环,但我可能忽略了它。
总结:我基本上希望能够在当前JList所在的位置绘制自定义渲染器。还有其他几类,这两个都依赖于(前。LibraryHandler,
任何帮助或建议,非常感谢!感谢您阅读了这一切。
1)'frame.getContentPane()。setLayout(null);'Java GUIs必须在不同的操作系统上工作',屏幕大小,屏幕分辨率等等,在不同的语言环境中使用不同的PLAF。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 2)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –