Я создал настраиваемый рендерер 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);
}
}
А вот код инициализации для окна (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];
}
});
Если я запускаю код, как это в настоящее время, это возвращает «Исключение в потоке» AWT-EventQueue-0 «java.lang.StackOverflowError» в строке, где создается jsonList. Я уверен, что у меня нет цикла методов, но я, возможно, не обратил на это внимания.
Подводя итог: в основном я хотел бы иметь возможность рисовать собственный рендерер, где находится текущий JList. Есть несколько других классов, что эти два зависят от (Исх. LibraryHandler,
Любая помощь или совет высоко ценится! Спасибо за чтение всего этого.
1) 'frame.getContentPane(). SetLayout (null);' Java GUIs должны работать в разных ОС, размер экрана, разрешение экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –