无法使用ImageIcon设置jLabel的位置

时间:2018-02-06 11:56:36

标签: java swing jlabel

我是Java的新手,我在我的代码中遇到了一个奇怪的情况,我正在尝试获取一个jPanel,我将ImageIcon加载到左上角,而不管Image的大小。出于某种原因,我的代码在屏幕中间垂直显示图像,但水平左对齐。

最奇怪的是,当我使用消息框进行调试时,在消息框上单击“确定”后,图像将移动到我想要的角落。这只适用于我取消注释imo完全不相关的行,告诉我绘制图像后jLabel的界限。

我的代码如下:

    private void OpenWidefieldActionPerformed(java.awt.event.ActionEvent evt) {                                              
    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file;
        file = fileChooser.getSelectedFile();
        BufferedImage Image1 = null;
        try {
            Image1 = ImageIO.read(file);
        } catch (IOException ex) {
            Logger.getLogger(SMLMFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        int w = Image1.getWidth();
        int h = Image1.getHeight();
        ImageIcon imgIcon;
        imgIcon = new ImageIcon(Image1);
        jLabel1.setBounds(0, 0, w, h);
        Rectangle r = jLabel1.getBounds();
        jLabel1.setIcon(imgIcon);
        r = jLabel1.getBounds();
        //SMLMFrame.infoBox(r.toString(), "TITLE BAR MESSAGE");
        jLabel1.setBounds(r);

所以基本上我的主要问题是将jLabel移到角落,但我实际上更感兴趣的是为什么在最后打开infoBox会移动它。

1 个答案:

答案 0 :(得分:1)

  

出于某种原因,我的代码在屏幕中间垂直显示图像,但水平左对齐。

Swing使用布局管理器来定位组件。在不知道您正在使用哪个布局管理器的情况下,我们无法说明为什么会发生这种情况。

jLabel1.setBounds(r);

手动设置组件的边界可以临时更改组件的位置。但是,下次调用布局管理器时,将重置组件的大小/位置。例如,尝试调整框架大小,因为这会导致调用布局管理器。

因此,您的问题的解决方案是使用适当的布局管理器。也许一个简单的FlowLayout左对齐?

阅读Layout Managers上的Swing教程中的部分以获取更多信息。