如何在JFrame中设置JLabel的边界?

时间:2014-09-29 15:56:31

标签: java swing jlabel imageicon

我使用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的位置和大小,因为会自动完成

我必须手动设置这些值,因为我想截断图像(垂直进度条)。

3 个答案:

答案 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()也会为面板提供尺寸。

如果希望面板保持这么大,那么请确保它的父容器有一个符合首选尺寸的布局管理器,例如FlowLayoutGridBagLayout。如果您希望拉伸面板,请确保它的父容器有一个忽略首选大小的布局管理器,例如BorderLayoutGridLayout

答案 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布局。