Как изменить размер фона JLabel или применить только верхнюю и нижнюю границы?
Вопрос
У меня есть что-то похожее на это:
Как видите, «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);
Решение
Вы можете создать новую рамку для метки следующим образом:
РЕДАКТИРОВАТЬ:увидев ваш комментарий в другом ответе, я создал составную рамку, которая дает вам то, что вы хотите.
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);
}
}
Другие советы
Не видя вашего кода, трудно понять, что вы уже знаете или пробовали.
Вы явно устанавливаете границу компонента следующим образом:
myLabel.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
JLabels — это довольно сложные звери, с большим количеством кода для измерения (необязательного) значка и планирования его макета с учетом множества общих случаев.Возможно, вам лучше создать подкласс JComponent, чтобы написать свою собственную, очень простую метку.