java中获得长宽为0_java – JPanel的宽度和高度为0(具体情况)

请原谅我,如果这很难遵循,但我有一个特定的问题,我需要帮助解决.我已经做了大量的研究,我尝试了很多解决方案,但没有一个能够正常工作.

我的问题是我有一个扩展JPanel的ImagePanel类(下面的代码),这个类需要使用宽度和高度来缩放图像(我正在创建一个程序,用户可以创建自定义教程,包括图像).当我实例化这个时,我得到一个错误,说宽度和高度必须非零.我知道这是因为布局管理器尚未将ImagePanel传递给首选大小,但我不知道如何将该大小传递给面板. ImagePanel位于JPanel内部,该Jalit内部位于JFrame内JSplitPane内部的JTabbedPane内部的JPanel内部的JScrollPane内部的JSplitPane内部.递减容器顺序的图形表示如下:

> JFrame(GridLayout)

> JSplitPane(默认SplitPane布局)

> JTabbedPane(Deault JTabbedPane布局)

> JPanel(GridLayout)

> JScrollPane(默认ScrollPane布局)

> JSplitPane(默认SplitPane布局)

> JPanel(GridLayout);

> ImagePanel

ImagePanel的代码如下:

import java.awt.Graphics;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

public class ImagePanel extends JPanel{

private BufferedImage i;

private ImageIcon miniature;

private Image paint = null;

public void createImage(String path){

try {

i = ImageIO.read(new File(path));

} catch (IOException ex) {

ex.printStackTrace();

}

if(i != null){

int width = (int)((double)i.getWidth() * ((double)getWidth()/i.getWidth()));

int height = (int)((double)i.getHeight()*i.getHeight()/i.getWidth()*((double)this.getHeight()/i.getHeight()));

miniature = new ImageIcon(i.getScaledInstance(width, height, Image.SCALE_SMOOTH));

paint = miniature.getImage();

}

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

if (paint!=null){

g.drawImage(paint, 0, 0, null);}

}

}

如何获得ImagePanel的正确大小.我希望图像改变大小与JFrame的大小,这就是为什么我不只是使用setPreferedSize();.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值