2009-11-06 2 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

Если вы можете добавить немного существующего кода, тогда мы сможем попытаться выяснить, где проблема! –

+0

Я действительно не думаю, что код - это все, что интересно, так как это в значительной степени делает ТОЧНО, что я описал, но я это сделаю. – Morinar

ответ

0

Вы можете создать новую границу для лейбла, как это:

EDIT: после просмотра вашего комментария в другом ответ я создал границу соединения, которое дает вам то, что вы хотите.

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

0

Не видя код, это трудно понять, что вы уже знаете или пробовали.

Вы явно установить границу компоненты, как так:

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

Теперь JLabels довольно сложные животное, с большим количеством коды для измерения значка его (по желанию), и планированию его расположения вокруг много общие случаи. Возможно, вам лучше подклассифицировать JComponent, чтобы написать собственный, очень простой ярлык.

+0

Это на самом деле довольно близко. Есть ли в любом случае, чтобы иметь эту границу и сохранить левую боковую подкладку? – Morinar

+0

Вам нужна сложная рамка. См. Мой ответ для деталей. –

Смежные вопросы