Названный разделитель в Java Swing

Я хочу показать разделитель с заголовком в приложении Java Swing. Что-то типа

-------Текст-------

Я нашел некоторые сторонние библиотеки, предоставляющие эту функциональность:

Но меня интересует способ без использования стороннего API. Можем ли мы сделать это, расширив JSeparator? Как еще мы можем это сделать?


person Harry Joy    schedule 13.07.2012    source источник
comment
См. мой ответ здесь: stackoverflow.com/a/9533238/995822. Он использует TitledBorder.   -  person Radu Murzea    schedule 13.07.2012
comment
@SoboLAN Да, это полезно. Спасибо.   -  person Harry Joy    schedule 13.07.2012


Ответы (3)


Я думаю, вы могли бы использовать комбинацию MatteBorder и TitledBorder

MatteBorder mb = new MatteBorder(1, 0, 0, 0, Color.BLACK);
TitledBorder tb = new TitledBorder(mb, "Some Long Text", TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION);
person MadProgrammer    schedule 13.07.2012
comment
Здорово. :) И должно быть TitledBorder, а не TitleBorder. - person Harry Joy; 13.07.2012
comment
Печатать на iPad всегда весело :P - person MadProgrammer; 13.07.2012

Используйте TitledBorder. Например, вот так:

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;

public class TestBorder {

    protected void initUI() {
        JFrame frame = new JFrame(TestBorder.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        TitledBorder titledBorder = BorderFactory.createTitledBorder("Some title");
        titledBorder.setTitleJustification(TitledBorder.CENTER);
        panel.setBorder(titledBorder);
        frame.add(panel);
        frame.setSize(400, 300);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestBorder().initUI();
            }
        });
    }

}
person Guillaume Polet    schedule 13.07.2012
comment
Он показывает текст слева, я хочу, чтобы текст был в центре разделителя строк. - person Harry Joy; 13.07.2012
comment
@mark обновил мой код. Просто установите обоснование границы. - person Guillaume Polet; 13.07.2012
comment
titledBorder (иначе: GroupBoxes) создают визуальный шум, поэтому не используйте их - в настоящее время даже руководство по Win UX предостерегает от их использования ... @mark довольно просто реализовать TitledSeperator для себя или извлечь код из проектов с открытым исходным кодом. как SwingX или любой другой, который вы уже нашли - person kleopatra; 13.07.2012
comment
@пометьте точно :-) Посмотрите статьи/доклады Карстена (JGoodies) - person kleopatra; 13.07.2012

Это просто и в нижнем регистре.

import javax.swing.border.*;

тогда

BevelBorder bedge=new BevelBorder(BevelBorder.RAISED);
lbl.setBorder(bedge);

------------------следующий тип границы

import javax.swing.border.*;

тогда

TitledBorder tedge=new TitledBorder(TitledBorder.CENTER);
lbl.setBorder(tedge);
person Saquib_Azam    schedule 25.12.2015