JButton未显示在滚动窗格中

时间:2019-04-20 03:14:27

标签: java swing jscrollpane

我正在尝试建立一个基本的GUI库,该库将导入书籍列表并将每本书显示为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 :(得分:0)

您无法将组件“添加”到JScrollPane,这不是它们的工作方式。 JScrollPane使用JViewport作为主要组件,然后使用它确定何时应使用滚动条。

有关更多详细信息,请参见How to Use Scroll Panes

scrollpane

而不是...

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

简单地做...

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