我正在尝试设置一个基本的 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了解更多详情
而不是...
bookList = new JScrollPane();
//...
bookList.add(bookButtons);
简单地做...
bookList = new JScrollPane(bookButtons);
//...
//bookList.add(bookButtons);
关于java - JButton 未显示在滚动 Pane 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769924/