代码之家  ›  专栏  ›  技术社区  ›  Morinar

如何调整jLabel的背景大小或仅应用上下边框?

  •  0
  • Morinar  · 技术社区  · 16 年前

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

    alt text

    如您所见,“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);
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   Savvas Dalkitsis    16 年前

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

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

    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);
        }
    
    }
    
        2
  •  0
  •   Jonathan Feinberg    16 年前

    如果没有看到您的代码,就很难知道您已经知道或尝试过什么。

    您可以像这样显式地设置组件的边框:

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

    现在,JCLAP是相当复杂的动物,有很多代码来测量它的(可选)图标,并在很多一般情况下规划它的布局。您可以更好地使用子组件JCube来编写自己的、非常简单的标签。