gpt4 book ai didi

java - 将列表添加到 JScrollPane 时无法添加到 JList

转载 作者:行者123 更新时间:2023-12-01 21:43:33 25 4
gpt4 key购买 nike

我编写了一个程序,用于选择文件并将它们添加到 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++;
}
}

这是选择和添加文件的基本代码。所以现在我想在 Pane 上有一个滚动条,所以我将其修改为 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。并且您已经完成了。因此您不需要通过调用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

您还可以像 thompson 所说的那样,通过传递给滚动 Pane 构造函数来传递要添加到滚动 Pane 的组件。

JScrollPane listPane = new JScrollPane(fileList);

正如 thompson 所说,您应该避免声明 listModel ,files 。您应该阅读有关 static keyword and when you should use it 的更多信息。 .

关于java - 将列表添加到 JScrollPane 时无法添加到 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com