Назначить границу нескольким JLabels - PullRequest
2 голосов
/ 04 августа 2011

У меня есть 10 JLabels, который я хочу иметь ту же границу. Это число, которым можно управлять вручную, но, как программист, я хочу узнать, есть ли способ сделать это проще.

Я пробовал с каждым циклом, который сбрасывается со всех компонентов панели, на которых находятся метки, и затем использую метод setBorder(...). Но это, очевидно, не работает, потому что объекты распознаются как Компоненты вместо JLabels.

Как мне автоматизировать присвоение границы JLabel?

Ответы [ 2 ]

10 голосов
/ 04 августа 2011

Ответа, предоставленного @ Atreys , будет достаточно, но существует более одного способа снять кожу с кошки .Другой вариант - создать класс, который расширяет JLabel и назначает границу в своем конструкторе.Следовательно, все экземпляры будут иметь ту же границу, что и ваш запрос.Это также избавит от необходимости неуклюже перебирать коллекцию из Component s, использовать оператор instanceof, а затем typecast, который на самом деле не ООП.Приложение:

И если вы хотите избежать многословия необходимости вводить new BorderedJLabel() для каждого нового экземпляра BorderedJLabel, вы можете просмотреть статический фабричный метод , как таковой

public final class BorderedJLabel extends JLabel{
    private BorderedJLabel(){
        // assign border
    }

    public static final BorderedJLabel newInstance(){
        return new BorderedJLabel();
    }
}

Учитывая этот дизайн, вы сможете создавать новые BorderedJLabel экземпляры более лаконично, просто набрав BorderedJLabel.newInstance().

4 голосов
/ 04 августа 2011

Похоже, у вас есть решение, почти.

Выполните итерацию по всем компонентам панели, и, если это JLabel, приведите его и установите границу:

for (Component comp : componentList) {
    if (comp instanceof JLabel) {
        ((JLabel)comp).setBorder(myBorder());
    }
}
...