java - JButton 未显示在滚动 Pane 中

标签 java swing jscrollpane

我正在尝试设置一个基本的 GUI 库,它将导入书籍列表并将每本书显示为滚动 Pane 中的 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);
        }
    }
}

但是,我遇到了测试按钮根本没有显示在滚动 Pane 中的问题。面板在那里,但没有测试按钮。

最佳答案

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

参见How to Use Scroll Panes了解更多详情

scrollpane

而不是...

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

简单地做...

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

关于java - JButton 未显示在滚动 Pane 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769924/

相关文章:

java - 需要有关 java GUI 的帮助

java - 如何在不使用 setPreferredSize() 的情况下调整 JScrollPane 中 JTable 的大小

java - JScrollPane 中的 JPanel 未显示

可执行文件的 Java 文件路径有空格

从另一个类调用时,Java PropertyChangeListener 不工作

Java Custom AbstractTableModel 在 Window/JTable 调整大小时之前不会更新 JTable 上的值

java - 如何获取 JScrollPane 中 JTable 模型的所有可见行

java - Memcached 和分片

java - Jmeter CPU 使用率未超过 25%

Java NotSerializedException :