如何删除JLabel上的边框?

时间:2015-01-10 03:49:01

标签: java swing user-interface jpanel jlabel

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

如何删除边框?我需要更改布局管理器吗?如果是这样的话?

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();
            }
        });
    }
}

enter image description here

2 个答案:

答案 0 :(得分:3)

  

rootPanel = new JPanel();

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

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

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

答案 1 :(得分:0)

如果您有这样的需求,您可能需要考虑探索JavaFX。它使CSS的格式化变得容易,而Swing使它变得有些困难。