【问题标题】:How to resize an image to fill a Jpanel in BorderLayout如何调整图像大小以填充 BorderLayout 中的 Jpanel
【发布时间】:2018-10-26 00:50:49
【问题描述】:

我添加了这样的图片

BufferedImage eastFramerPicture = ImageIO.read(new File("src\\Images\\farmer.png"));
        JLabel eastFarmer = new JLabel(new ImageIcon(eastFramerPicture));

但是如何让图像填充面板,提供的图像显示了我面临的问题(颜色用于指示东、西、中、南的区域)

enter image description here.

我做错了什么?有不清楚的地方请留言,我会回复的。

感谢您的宝贵时间

【问题讨论】:

  • 要保持图像的纵横比吗?例如like this?甚至something like this
  • 我只是想让图像填充面板(在图像中提供东方(草应该填充整个绿色区域)。我不介意它被拉伸
  • 另外,不要引用src路径,打包项目的时候就不存在了。在 src 包中包含的资源中,很可能嵌入在生成的 jar 文件中,使其无法作为 File 访问,您需要改用 Class#getResource
  • 感谢链接,但对我来说很复杂
  • 您不会有一个不“复杂”的解决方案,因为默认 API 不能满足您的要求。您唯一的解决方案是沿着自定义绘画路线前进,这意味着您将遇到比例质量问题。另一种解决方案是为图像命名

标签: java swing user-interface


【解决方案1】:

答案将取决于许多因素...

  • 是否要保持纵横比?
  • 是否要平铺图像以填充该区域
  • 如果要保持纵横比,是要适应还是填充可用空间。

简单的解决方案是使用Image#getScaledInstance,但如果你走这条路,你应该阅读The Perils of Image.getScaledInstance

BufferedImage eastFramerPicture = ImageIO.read(getClass().getResource("/Images/farmer.png"));
Image scaled = eastFramerPicture.getScaledInstance(600, 600, Image.SCALE_SMOOTH);

你也可以使用像 imgsclr 这样的库

【讨论】:

    【解决方案2】:

    查看Background Panel。您可以显示图像:

    1. 正常尺寸
    2. 缩放
    3. 平铺

    所以尝试每个选项,看看你最喜欢什么。

    或者您也可以使用Stretch Icon。标签中的图标将被缩放以填充可用空间。

    两种解决方案都提供可重复使用的代码,因此您无需在每次遇到此类需求时都编写自定义代码。代码也是动态的,并且会随着框架大小的调整而调整。

    【讨论】:

    • 你能举一个例子来说明如何使用 Stretch 类吗?我将图像传递给它,它什么也没做
    【解决方案3】:

    尝试使用 setBounds(x,y,width,height);

    【讨论】:

    • 我试过eastGrass.setBounds(east.getLocation().x, center.getLocation().y, center.getWidth(), center.getHeight());但它不起作用,有什么想法吗?
    • 公共 usersMenu() { con = MySQLConnect.ConnectDB();初始化组件();填充列表(); jPanel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/muis.jpg")));可调整大小(假);维度 dm = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(0,0,dm.width,dm.height); jPanel1.setBounds(0,0, dm.width, dm.height); setTitle("МОНГОЛ УЛСЫН ИХ СУРГУУЛЬ | ТЕСТИЙН СИСТЕМ 1.0 | Хэрэглэгчхэсэг"); //jPanel1.setBounds(dm.width/4, dm.height/4, dm.width/8, dm.height/8); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多