当使用 Java 的 JFileChooser 选择图像时,我没有运气在 Jpanel 中显示图像。我还希望所选图像自动调整大小并适合我的 Jpanel 的设置大小?
这是我到目前为止编写的代码。 JfileChooser 显示在一个新的 JFrame 中,我还想在图像成功上传并在 Jpanel 中查看时关闭此 Jframe。
这里是上传按钮,应该打开 JFileChooser,允许选择文件,然后上传图像(要调整大小,需要帮助如何使图像自动调整大小),然后在图像出现时关闭 Jframe“框架”是否显示在Jpanel“PicturePanel”中?
编辑:添加了我想要完成的任务的 SSCCE。
我想在单击“上传”按钮后,显示适当大小的图像(必须适合 JPANEl“图片面板”)在黑框面板中显示图像。
import classes.BackgroundPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Test {
public static void main(String[] args) {
final JFileChooser chooser = new JFileChooser();
JButton button = new JButton();
button.setText("Upload");
JFrame frame = new JFrame("My Frame");
final JFrame imageFrame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFileChooser fc = new JFileChooser();
final Test_Image t = new Test_Image();
JPanel panel = new JPanel();
JPanel picturePanel = new JPanel();
// chooser.showOpenDialog(null);
Dimension d = new Dimension(1261, 765);
Dimension d2 = new Dimension(1300, 900);
picturePanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
panel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
Dimension d3 = new Dimension(343, 247);
picturePanel.setSize(d3);
//picturePanel.setSize(d);
panel.add(button);
panel.setSize(d3);
//panel.setVisible(true);
//panel.add(picturePanel);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if(chooser.showOpenDialog(imageFrame) == JFileChooser.APPROVE_OPTION) {
try {
Image bi = ImageIO.read(
chooser.getSelectedFile());
BackgroundPanel bp = new BackgroundPanel(bi);
if (bi != null)
bp.setImage(bi);
else
JOptionPane.showMessageDialog(imageFrame,
"File is not an image!");
} catch (IOException ioe) {
JOptionPane.showMessageDialog(imageFrame,
"Error Reading File!");
}
}
}
});
frame.setSize(d2);
frame.add(picturePanel).setLocation(100, 100);
frame.add(panel);
frame.setVisible(true);
}
}
最佳答案
动态删除/添加组件时,基本代码应该是:
panel.add(...);
panel.revalidate();
panel.repaint();
我不知道这是否是问题所在,因为您没有发布 SSCCE 。如果您需要更多帮助,请发布适当的 SSCCE。
NEED HELP IN HOW TO MAKE IMAGE AUTOMATICALLY RESIZED),
那么你就不能使用JLabel。您需要进行自定义绘画并使用 Graphics.drawImage(....) 方法。
您可以查看Background Panel它允许您绘制缩放或平铺的图像(除其他外)。
关于java - JfileChooser 不会显示在 Jpanel 中选择的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727402/