我使用JLabel
来查看JFrame
中的图片。我从带有ImageIcon
的文件中加载它。
JFrame frame = new JFrame(String);
frame.setLocationByPlatform(true);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel cpu = new JLabel(new ImageIcon(String));
cpu.setLocation(20, 20);
cpu.setSize(20, 460);
frame.add(cpu);
frame.setVisible(true);
我无法设置JLabel
的位置和大小,因为会自动完成。
我必须手动设置这些值,因为我想截断图像(垂直进度条)。
答案 0 :(得分:5)
一种方法是只绘制图像:
final ImageIcon icon = new ImageIcon(path);
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(icon.getImage(), 0, 0, getWidth(), getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
};
frame.add(panel);
getWidth()
中的getHeight()
和drawImage
将强制图片拉伸面板的大小。 getPreferredSize()
也会为面板提供尺寸。
如果希望面板保持这么大,那么请确保它的父容器有一个符合首选尺寸的布局管理器,例如FlowLayout
或GridBagLayout
。如果您希望拉伸面板,请确保它的父容器有一个忽略首选大小的布局管理器,例如BorderLayout
或GridLayout
有关绘画的详情,请参阅Performing Custom Painting。
请参阅Laying Out Components Within a Container以了解有关布局管理器(应正在使用的布局管理器)的更多信息。另请参阅Why is it frowned upon to use a null layout in SWING?和What's wrong with the Null Layout in Java?
答案 1 :(得分:4)
原件尺寸为(58 x 510)。如果要以20 x 420的固定大小显示图像,则应将图像缩放到该大小,以免截断任何图像。一种方法是使用Image.getScaledImage(...)
方法。然后,您只需将缩放后的图像添加到标签中。
如果要从面板左上角放置标签(20,20),则可以在面板或标签上添加EmptyBorder
。
使用Swing的功能。
编辑:
我想截断图片
将您的图片读入BufferedImage
。然后,您可以使用getSubImage(...)
方法获取所需大小的图像。然后,您可以使用子图像创建ImageIcon并将其添加到标签。
答案 2 :(得分:1)
LayoutManager会自动调整组件大小,不允许您手动调整大小。
如果您想摆脱这种情况,可以turn off the LayoutManager。
frame.setLayout(null);
请注意,您不应使用null
布局。