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

Fra*_*ani 4 java swing jlabel imageicon

我使用a 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);
Run Code Online (Sandbox Code Playgroud)

我无法设置位置和大小,JLabel因为它是自动完成的.

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

Pau*_*tha 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); 
Run Code Online (Sandbox Code Playgroud)

getWidth()getHeight()drawImage将强制图像以拉伸面板的尺寸.此外,getPreferredSize()还将为面板提供尺寸.

如果希望面板保持这个大小,那么确保它的父容器有一个布局管理器,它将遵循首选大小,如FlowLayoutGridBagLayout.如果您希望拉伸面板,请确保它的父容器有一个布局管理器,忽略首选大小,如BorderLayoutGridLayout