Как изменить размер фона JLabel или применить только верхнюю и нижнюю границы?

StackOverflow https://stackoverflow.com/questions/1688902

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть что-то похожее на это:

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);
Это было полезно?

Решение

Вы можете создать новую рамку для метки следующим образом:

РЕДАКТИРОВАТЬ:увидев ваш комментарий в другом ответе, я создал составную рамку, которая дает вам то, что вы хотите.

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, чтобы написать свою собственную, очень простую метку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top