2009-11-06 60 views
0

我有一些看起来像这样:如何调整JLabel的背景大小或仅应用顶部和底部边框?

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); 
+0

如果您可以添加一些现有的代码,那么我们可以尝试找出问题出在哪里! – 2009-11-06 16:57:49

+0

我真的不认为代码是有趣的,因为它几乎完全符合我所描述的,但我会。 – Morinar 2009-11-06 16:59:30

回答

0

你可以像这样的标签创建一个新的边界:

编辑:看到您的评论在另一个答案后,我创建了一个组合边框你想要的东西,让你。

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

} 
+0

这就是我正在寻找的东西。谢谢! – Morinar 2009-11-06 17:13:42

0

没有看到你的代码,很难知道你已经知道或都试过了。

明确设置组件的像这样的边界:

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

现在的JLabel是相当复杂的野兽,用了大量的代码周边的许多测量其(可选)的图标,并规划其布局一般情况。你可能会更好地继承JComponent来编写你自己的,非常简单的标签。

+0

这实际上非常接近。无论如何有这个边界,并保留我的左侧填充? – Morinar 2009-11-06 17:05:56

+0

你需要一个复合边框。详情请参阅我的回答。 – 2009-11-06 17:10:31

相关问题