【发布时间】:2020-08-19 21:10:28
【问题描述】:
我正在尝试制作一个 JPanel,它有一个按钮,您可以单击该按钮来上传图像。当您单击打开时,它会弹出一个带有 JFilechooser 的对话框,该对话框将文件路径名存储在 ArrayList 中。我希望选择的图像在选择后出现在 JPanel 上。我知道很多人以前都问过这个问题,但我已经尝试了所有我能找到的解决方案,但我无法让图像出现。这是我单击上传按钮时执行的操作的代码(AddImages 是 Jpanel):
private void pic1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fc = new JFileChooser();
int result = fc.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
String sname = file.getAbsolutePath();
ImageIcon icon = new ImageIcon(sname);
JLabel label = new JLabel(icon, JLabel.CENTER);
AddImages.add(label);
}
}
当我尝试上传图像时,图像被存储在 ArrayList 中(通过添加一行在我添加图像后打印 ArrayList 的大小进行测试),但它没有显示在 JPanel 上。有谁知道我做错了什么?提前致谢。
编辑:这是面板的完整代码(可见)。对 pic1 和 pic2 执行的操作是相同的代码,我在上面已经展示过:
addImagePrompt.setText("添加一些图片");
pic2.setText("add pic");
pic2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pic2ActionPerformed(evt);
}
});
pic1.setText("add pic");
pic1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pic1ActionPerformed(evt);
}
});
javax.swing.GroupLayout AddImagesLayout = new javax.swing.GroupLayout(AddImages);
AddImages.setLayout(AddImagesLayout);
AddImagesLayout.setHorizontalGroup(
AddImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AddImagesLayout.createSequentialGroup()
.addGap(50, 50, 50)
.addGroup(AddImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AddImagesLayout.createSequentialGroup()
.addComponent(pic2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pic2name, javax.swing.GroupLayout.PREFERRED_SIZE, 376, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(pic1)
.addComponent(addImagePrompt))
.addContainerGap(161, Short.MAX_VALUE))
);
AddImagesLayout.setVerticalGroup(
AddImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(AddImagesLayout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(addImagePrompt)
.addGap(18, 18, 18)
.addComponent(pic1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(AddImagesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(pic2)
.addComponent(pic2name))
.addContainerGap(377, Short.MAX_VALUE))
);
mainPanel.add(AddImages, "card16");
【问题讨论】: