Java 如何调整JLabel的背景大小或仅应用顶部和底部边框?

Java 如何调整JLabel的背景大小或仅应用顶部和底部边框?,java,swing,jlabel,Java,Swing,Jlabel,我有一些东西看起来像这样: 正如您所看到的,“Blambo”是一个带有不透明红色背景的JLabel。标签位于一个小灰色条的顶部,该条周围有一个单像素的黑色边框。我希望我的红色警告与它所在的条更加匹配,也就是说,我要么需要将其缩短两个像素,然后向下移动一个像素,要么只在顶部和底部应用相同的单像素边框。在这两个标签中,第一个可能更可取,因为这段代码与其他标签共享 有关守则: bgColor = Color.red; textColor = Color.white; setBackground(bg

我有一些东西看起来像这样:

正如您所看到的,“Blambo”是一个带有不透明红色背景的JLabel。标签位于一个小灰色条的顶部,该条周围有一个单像素的黑色边框。我希望我的红色警告与它所在的条更加匹配,也就是说,我要么需要将其缩短两个像素,然后向下移动一个像素,要么只在顶部和底部应用相同的单像素边框。在这两个标签中,第一个可能更可取,因为这段代码与其他标签共享

有关守则:

bgColor = Color.red;
textColor = Color.white;
setBackground(bgColor);
setOpaque(true);
// This line merely adds some padding on the left
setBorder(Global.border_left_margin);   
setForeground(textColor);
setFont(font);
super.paint(g);
该边界的定义如下:

public static Border border_left_margin = new EmptyBorder(0,6,0,0);

如果不查看代码,就很难知道您已经知道或尝试了什么

您可以显式设置组件的边框,如下所示:

myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));

现在,jlabel是相当复杂的野兽,有许多代码用于测量其(可选)图标,并围绕许多一般情况规划其布局。您最好将JComponent子类化,以编写自己的、非常简单的标签。

您可以为标签创建一个新的边框,如下所示:

编辑:在另一个答案中看到您的评论后,我创建了一个复合边框,它提供了您想要的内容。

import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;

/**
 * @author Savvas Dalkitsis
 */
public class Test1 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        JLabel c = new JLabel("Hello");
        Border b = BorderFactory.createCompoundBorder(
                BorderFactory.createMatteBorder(2, 0, 2, 0, Color.black),
                BorderFactory.createEmptyBorder(0, 100, 0, 0));
        c.setBorder(b);
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}

如果您可以添加一些现有代码,那么我们可以尝试找出问题所在!!我真的不认为代码有那么有趣,因为它几乎完全符合我所描述的,但我会的。这实际上非常接近。有没有这样的边界,并保留我的左侧填充?你需要一个复合边界。详细信息请参见我的答案。这正是我所要寻找的。谢谢