Основная идея состоит в том, чтобы нарисовать конкретную форму с использованием библиотеки Swing (она будет использоваться для создания изображения, которое будет перенесено на принтер escpos, но это другой вопрос). Сама форма имеет контейнер с полной шириной, который представляет собой метку. Метка имеет собственный шрифт, размер шрифта и может иметь линию, поэтому я использовал JTextPane. Элемент JTextPane и все формы будут иметь фиксированный размер 500 пикселей.Получение высоты содержимого JTextPane
В качестве теста, код выглядит следующим образом:
JFrame fr = getFrame();
JPanel root = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JPanel titleP = new JPanel(new BorderLayout());
titleP.setBorder(BorderFactory.createTitledBorder("titleP"));
c.fill = GridBagConstraints.BOTH;
c.gridy = 0;
c.gridx = 0;
c.gridwidth = 8;
c.weightx = 1.0f;
c.weighty = 1.0f;
JTextPane tp = new JTextPane();
JScrollPane sp = new JScrollPane(tp);
Font font = new Font("Arial",Font.BOLD, 37);
tp.setFont(font);
tp.setText("fdsfdsf sdf sdf sd fdsfsdf sdf sd fsd fdsf sdf sdf sdf sdf sdf sdf sdf ds");
tp.setOpaque(false);
titleP.add(sp);
root.add(titleP,c);
JPanel infoP = new JPanel();
infoP.setBorder(BorderFactory.createTitledBorder("infoP"));
c.gridwidth = 5;
c.gridy = 1;
c.gridx = 0;
//infoP.setPreferredSize(new Dimension(350,200));
root.add(infoP,c);
JPanel priceP = new JPanel();
priceP.setBorder(BorderFactory.createTitledBorder("priceP"));
c.gridx = 5;
c.gridwidth = 3;
root.add(priceP,c);
fr.setContentPane(root);
fr.pack();
int size1 = fr.getHeight();
int width = 120;
fr.setSize(width, 0);
size1 += tp.getHeight();
size1 += 25;
fr.setSize(width, size1);
fr.setVisible(true);
Вопрос в том, как я вычислить полный размер JTextPane, для того, чтобы установить его высоту в контейнер, который держит его? Часть, где я жестко пытаюсь выдавать коррекцию высоты, даже работал, но затем я добавил шрифт ...
Спасибо. Теперь я могу нормально использовать StyledDoc и ect. –