JButton не отображается в области прокрутки - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь настроить базовую библиотеку графического интерфейса, которая будет импортировать список книг и отображать каждую книгу как JButton на панели прокрутки. Но прежде чем попасть туда, я просто пытаюсь сначала сориентировать панели и добавить тестовую кнопку, чтобы убедиться, что основы работают, прежде чем переходить к деталям.

Я пытался перемещать код, чтобы добавлять панели в разных порядках, чтобы увидеть, если это было проблемой, но продолжал получать тот же результат. Я совершенно новичок в этом, поэтому мое понимание этого очень ограничено.

public class LibraryPanel extends JPanel{

    private Library library;
    private JPanel bookButtons, importBooks;
    JScrollPane bookList;
    JTextField importField;
    JButton load;

    public LibraryPanel() {
        setPreferredSize(new Dimension(200,500));
        Library library = new Library();
        setLayout(new BorderLayout());
        this.setBorder(BorderFactory.createTitledBorder("Library"));

        // Import Books Panel
        importBooks = new JPanel();
        importBooks.setLayout(new    BoxLayout(importBooks,BoxLayout.X_AXIS));
        importBooks.setBorder(BorderFactory.createTitledBorder("Import Books"));
        importField = new JTextField(15);
        importBooks.add(importField);
        load = new JButton("Load");
        importBooks.add(load);
        this.add(importBooks,BorderLayout.SOUTH);
        load.addActionListener(new loadButtonListener());
        // Book List buttons
        JPanel bookButtons = new JPanel();
        bookButtons.setLayout(new BoxLayout(bookButtons,BoxLayout.Y_AXIS));
        JButton testButton = new JButton("TEST Button");
        bookButtons.add(testButton);

        //for(int i = 0; i<library.getBooks().size(); i++) {
        //  BookButton button = new BookButton(library.getBook(i));
            //button.addActionListener(new BookButtonListener());
        //  bookButtons.add(button);
        //}

        // Scroll Pane
                bookList = new JScrollPane();
                bookList.setBorder(BorderFactory.createTitledBorder("Book List"));
                bookList.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
                bookList.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
                this.add(bookList,BorderLayout.CENTER);
                bookList.add(bookButtons);
    }
    private class loadButtonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            String filename = new String(importField.getText());
            library.loadLibraryFromCSV(filename);
        }
    }
}

Однако у меня проблема с тем, что тестовая кнопка вообще не отображается на панели прокрутки. Панели есть, но нет кнопки тестирования.

1 Ответ

0 голосов
/ 20 апреля 2019

Вы не можете «добавить» компоненты к JScrollPane, это не то, как они работают. JScrollPane использует JViewport в качестве основного компонента, который затем используется для определения, когда следует использовать полосы прокрутки.

См. Как использовать панели прокрутки для получения более подробной информации

scrollpane

Вместо ...

bookList = new JScrollPane();
//...
bookList.add(bookButtons);

просто делай ...

bookList = new JScrollPane(bookButtons);
//...
//bookList.add(bookButtons);
...