2016-11-08 68 views
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,

任何帮助或建议,非常感谢!感谢您阅读了这一切。

+2

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/)。 –

回答

0

我相当肯定我不吨有一个方法循环发生,

您创建的JListCustomRendererBook延伸Frame1实例,它将调用initialize()程序,然后将创建另一个JListCutomRendererBook等,等

相关问题