【问题标题】:How can I remove border on JLabel?如何删除 JLabel 上的边框?
【发布时间】:2015-03-08 11:45:01
【问题描述】:

所以我正在尝试启动一个图形程序,其中我有一个包含多个 JPanel 的 JFrame。 JPanels 需要组合创建 1 个图像,但是当我运行我的程序时,我会看到图像周围的边框。我无法完全区分边框是由保存图像的 JLabel 引起的,还是由 JPanel 引起的,还是由于 Layout Manager 引起的。

如何去除边框?我需要更改布局管理器吗?如果有怎么办?

import java.util.*;
import java.awt.*;
import javax.swing.*;

public class StarryNight {
    JFrame backGround;
    JPanel rootPanel;
    JLabel rootImage;

    public StarryNight(){
        backGround = new JFrame("Starry Starry Night");
        backGround.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        backGround.setResizable(false);
        backGround.setSize(1000,667);
        backGround.getContentPane().setBackground(Color.BLACK);
        backGround.setLayout(new BoxLayout(backGround.getContentPane(),BoxLayout.Y_AXIS));

        rootPanel = new JPanel();
        rootPanel.setSize(1000, 667);
        rootPanel.setBackground(Color.BLUE);;
        rootImage = new JLabel();
        rootImage.setIcon(new ImageIcon(getClass().getResource("Starry Night.jpg")));
        rootPanel.add(rootImage);


        JPanel jap = new JPanel();
        jap.setSize(1000,100);
        jap.setBackground(Color.GREEN);

        backGround.add(rootPanel);
        backGround.add(jap);
        backGround.pack();
        backGround.setVisible(true);


    }

    private static void runGUI()    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        StarryNight ssn= new StarryNight();
    }

    public static void main(String args[]){
        javax.swing.SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                runGUI();
            }
        });
    }
}

【问题讨论】:

  • AFAIK,JLabel 默认没有边框。问题出在其他地方。
  • 不要设置尺寸。让图像、组件和布局为您设置尺寸。这可能是您的问题 - 很难说,因为我们没有图像。

标签: java swing user-interface jpanel jlabel


【解决方案1】:

rootPanel = new JPanel();

默认情况下,JPanel 使用FlowLayout,它默认允许在组件之前/之后有 5 个像素。因此,当您将我们的图像添加到面板时,您会看到四面都有 5 个像素的空间。

如果您不想要该空间,请查看 FlowLayout API 并创建一个在组件之间没有空格的 FlowLayout,然后将该布局添加到 rootPanel。比如:

rootPanel = new JPanel( new FlowLayout(...) );

【讨论】:

  • 谢谢!这解决了问题。我能够通过 rootPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0) ); 删除边框
猜你喜欢
  • 2014-12-05
  • 2019-06-18
  • 2012-03-15
  • 2015-10-12
  • 2020-01-23
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2019-10-16
相关资源
最近更新 更多