【问题标题】:How can I resize the background of a JLabel or apply top and bottom borders only?如何调整 JLabel 的背景大小或仅应用顶部和底部边框?
【发布时间】:2009-11-06 16:56:12
【问题描述】:

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

如您所见,“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);

【问题讨论】:

  • 如果你能添加一点现有的代码,那么我们可以试着找出问题所在!
  • 我真的不认为代码有那么有趣,因为它几乎完全符合我的描述,但我会的。

标签: java swing jlabel


【解决方案1】:

您可以像这样为标签创建新边框:

编辑:在另一个答案中看到您的评论后,我创建了一个复合边框,可以满足您的需求。

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】:

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

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

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

现在,JLabels 是相当复杂的野兽,有大量代码用于测量其(可选)图标,并围绕大量一般情况规划其布局。你最好继承 JComponent 来编写你自己的非常简单的标签。

【讨论】:

  • 这实际上非常接近。无论如何都有那个边框并保留我的左侧填充?
  • 您需要一个复合边框。详情见我的回答。
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
相关资源
最近更新 更多