如何使图片完美适配JButton计算器矩形按钮的形状与尺寸?

默认ImageIcon会直接使用图片原始尺寸,不会自动匹配按钮大小,可通过以下两种常用方案实现完美适配:
方案1:提前缩放图片后创建按钮(适合按钮大小固定的场景,性能更好)
先将原始图片缩放到和按钮一致的尺寸,再用于创建按钮:
// 读入原始图片 Image originalImg = new ImageIcon("C:\\Users\\29125\\Downloads\\IMG_7740.JPG").getImage(); // 缩放到适配按钮的尺寸,可根据实际需求修改宽高数值 Image scaledImg = originalImg.getScaledInstance(80, 80, Image.SCALE_SMOOTH); // 用缩放后的图片创建按钮 JButton b1 = new JButton("1", new ImageIcon(scaledImg)); // 可选配置,适配计算器按钮显示效果 // 文字居中显示在图片上层 b1.setHorizontalTextPosition(SwingConstants.CENTER); b1.setVerticalTextPosition(SwingConstants.CENTER); // 取消按钮默认边框、背景、聚焦高亮效果,让图片完全填充按钮 b1.setBorderPainted(false); b1.setContentAreaFilled(false); b1.setFocusPainted(false);
方案2:重写paintComponent动态适配(适合按钮大小可变的场景)
通过重写按钮绘制方法,让图片自动跟随按钮当前尺寸缩放:
JButton b1 = new JButton("1") { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Image originalImg = new ImageIcon("C:\\Users\\29125\\Downloads\\IMG_7740.JPG").getImage(); // 直接按当前按钮的宽高绘制图片,完全适配 g.drawImage(originalImg, 0, 0, getWidth(), getHeight(), this); } }; // 同样可以添加上述方案1的可选显示配置 b1.setHorizontalTextPosition(SwingConstants.CENTER); b1.setVerticalTextPosition(SwingConstants.CENTER); b1.setBorderPainted(false); b1.setContentAreaFilled(false); b1.setFocusPainted(false);
注意事项
- 如果图片宽高比和按钮宽高比不一致,缩放会出现拉伸变形,建议提前将图片素材裁剪为和按钮相同的比例,适配效果更好
- 图片缩放时使用
Image.SCALE_SMOOTH参数可以保证缩放后图片的清晰度,避免出现锯齿
内容的提问来源于stack exchange,提问作者Selina Gao
相关产品推荐
相关产品推荐

