JTextPane - приспособяване на размера към съдържанието му

Какво имам -

Какво ми трябва -

Код:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextPane pane = new JTextPane();
pane.setText("Long string Long string Long string Long string Long string Long string");
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(pane);
panel.add(new JButton("Button"));
frame.add(panel);
frame.show();

Ако направя frame.pack(), получавам много дълъг прозорец без пренасяне на думи!


person Iaroslav Baranov    schedule 07.05.2015    source източник
comment
@AndrewThompson, Да, HTML форматирането е приемливо. Как мога да поправя проблема с CSS?   -  person Iaroslav Baranov    schedule 07.05.2015
comment
Вижте този свързан отговор: [stackoverflow.com/questions/22072975/ [1]: stackoverflow.com/questions/22072975/   -  person Sharcoux    schedule 13.05.2015


Отговори (1)


За всеки Swing компонент, който поддържа HTML, ширината може да бъде зададена за body с помощта на HTML стилове (CSS). Това от своя страна ще определи броя на редовете за изобразяване и от това предпочитаната височина на текстовия компонент. Задаването на ширината в CSS избягва необходимостта да се изчислява къде трябва да се появят прекъсвания на редовете в (или най-добрия размер) на компонента.

По-общо вижте Как да използваме HTML в Swing компоненти.

E.G.

import javax.swing.*;

public class FixedWidthLabel {

    public static void main(String[] srgs) {
        final String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";
        final String html1 = "<html><body style='width: ";
        final String html2 = "px'>";

        Runnable r = new Runnable() {

            @Override
            public void run() {
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "200" + html2 + s));
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "300" + html2 + s));
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

въведете описание на изображението туквъведете описание на изображението тук

person Andrew Thompson    schedule 07.05.2015
comment
Благодаря ви, работи за pane.setContentType(text/html); - person Iaroslav Baranov; 07.05.2015
comment
Но как мога да задам ширина за StyledDocument без setContentType(text/html)? Възможно ли е? - person Iaroslav Baranov; 07.05.2015
comment
Трябва да направите това с preferredSize. В момента съм с телефона си, но потърсете другите ми отговори по същата тема, за да намерите как да го направя. Ще сложа линка, когато се свържа с моя компютър. - person Sharcoux; 08.05.2015