我已将图片上传到我的GUI中,该图片显示在JLabel上.标签尺寸仅设置为100,100而图片尺寸要大得多,因此当我将其上传到标签时会扩展.
反正有没有让它自动调整大小到标签大小?
下面是Upload Picture JButton的动作监听器
class UploadHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int returnVal = fc.showOpenDialog(frame2);
file = fc.getSelectedFile();
pathname = file.getPath();
icon = new ImageIcon(pathname);
lblDisPic.setIcon(icon);
}
}
btnUpload = new JButton("Upload Picture");
lblDisPic = new JLabel();
lblDisPic.setBorder(raisedetched);
lblDisPic.setPreferredSize(d);
btnUpload.addActionListener(new UploadHandler());
Run Code Online (Sandbox Code Playgroud)
coo*_*ird 25
给定示例代码,一种方法是调整图像大小以在调用方法JLabel之前显示setIcon.
一种方法是更改actionPerformed方法,因此将使用ImageIO.read方法读取图像,然后在ImageIcon创建之前调整图像大小,从指定文件加载图像.
Image img = ImageIO.read(fc.getSelectedFile());
Run Code Online (Sandbox Code Playgroud)
然后,所加载的图像可以调整到的尺寸JLabel使用,Image.getScaledInstance.
Image resizedImage =
img.getScaledInstance(lblDisPic.getWidth(), lblDisPic.getHeight(), null);
Run Code Online (Sandbox Code Playgroud)
现在,人们可以创建一个ImageIcon用于JLabel.
lblDisPic.setIcon(new ImageIcon(resizedImage));
Run Code Online (Sandbox Code Playgroud)
这种方法的局限性在于,如果JLabel以任何方式调整大小,则JLabel不会调整包含的图像的大小.然而,由于JLabel将使用原件的缩小图像,这意味着所需的内存量将减少(如果担心)并且每次显示图像时都不必调整原始图像的大小,就像重写paintComponent方法一样.
实现手头任务的优选方法将取决于以后是否需要原始图像的要求.
当然,只需覆盖该paintComponent方法,您就可以根据需要进行缩放和绘制.
myLabel = new JLabel (/*whatever*/) {
@Override
public void paintComponent (Graphics g) {
super.paintComponent (g);
g.drawImage (myImageIcon.getImage(), 0, 0, getWidth (), getHeight (), null);
}
};
Run Code Online (Sandbox Code Playgroud)
来自这里.
编辑
要添加到您的代码更改:
lblDisPic = new JLabel();
Run Code Online (Sandbox Code Playgroud)
至:
lblDidPic = new JLabel() {
@Override
public void paintComponent (Graphics g) {
super.paintComponent (g);
if (icon != null) {
g.drawImage (icon.getImage(), 0, 0, getWidth(), getHeight(), null);
}
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52839 次 |
| 最近记录: |