我写了一个程序,可以选择文件并将它们添加到JList中。程序运行正常,将文件添加到列表中的代码如下所示:
JPanel pane;
File newFile[];
static List<File> files = new ArrayList<File>();
static DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);
JPanel listPane = new JPanel();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setLayout(new BorderLayout());
listPane.add(fileList);
}
void getFile() {
final JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Select File...");
fc.setApproveButtonText("Select");
fc.setMultiSelectionEnabled(true);
int returnVal = fc.showOpenDialog(pane);
if (returnVal == JFileChooser.APPROVE_OPTION) {
newFile = fc.getSelectedFiles();
}
}
void setFile() {
int i = 0;
while (i < newFile.length) {
files.add(newFile[i]);
listModel.addElement(newFile[i]);
i++;
}
}
这是用于选择和添加文件的基本代码。所以现在我想在窗格上有一个滚动条,所以我把它修改为JScrollPane,如下所示:
JScrollPane listPane = new JScrollPane();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setViewportView(fileList);
listPane.add(fileList);
}
因此,所有内容都可以编译而没有错误,但JScrollPane中没有添加任何内容。我的理解是,JScrollPane可以像常规JPanel一样使用,只是它在溢出时会有滚动条。我在这里缺少一些关于JScrollPanes的东西吗?
尝试删除
listPane.add(fileList); //remove
您应该使用setViewportView()
方法将组件添加到 ScrollPane。并且您已经完成了 it.so 无需通过调用 listPane.add
再次添加。
例
JScrollPane listPane = new JScrollPane();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setViewportView(fileList);
// removed add line
您也可以通过将要添加到滚动窗格的组件传递给滚动窗格构造函数,如汤普森所说。
JScrollPane listPane = new JScrollPane(fileList);
另外,正如汤普森所说,你应该避免声明listModel ,files
.你应该阅读更多关于静态关键字的信息,以及你应该什么时候使用它。