相关疑难解决方法(0)

使用Java 7在JTextPane中使用样式文本进行奇怪的文本包装

我有两个不同的编辑器使用JTextPane和Java 7中的奇怪错误,这些错误在以前的JVM版本中没有出现.它发生在包含样式文本或组件的长行中.

这是一个演示此错误的示例.在此示例中,每次插入字符时,都会对所有文本应用默认样式.我用JDK 1.7.0_04测试了它.

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

public class BugWrapJava7 extends JFrame {

    JTextPane jtp;
    StyledDocument doc;

    public BugWrapJava7() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        jtp = new JTextPane();
        add(jtp, BorderLayout.CENTER);
        jtp.setText("\ntype some text in the above empty line and check the wrapping behavior");
        doc = jtp.getStyledDocument();
        doc.addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {
                insert();
            }
            public void removeUpdate(DocumentEvent e) {
            }
            public void changedUpdate(DocumentEvent e) {
            }
        });
        setSize(200, 200);
        setVisible(true);
    }
    public void insert() …
Run Code Online (Sandbox Code Playgroud)

java swing word-wrap java-7

15
推荐指数
2
解决办法
2427
查看次数

如何在JTextPane中实现自动换行,如何让它包装一个没有空格的字符串?

如何在JTextPane中实现自动换行?

我试图准确理解它是如何工作的,以便我可以修改行为.现在,如果我在JScrollPane中有一个标准的JTextPane,它会在空格处中断文本,但不会在长单词内部 - 如果有一个文本字符串没有比窗口宽的空格,它将不会换行/中断将出现一个水平滚动条.随着文本宽度的增加,ParagraphView的宽度(通过getWidth())会增加以保存文本.

Lapitsky的这篇文章说LabelView.getBreakWeight()返回带有空格的标签的View.ExcellentBreakWeight和没有空格的标签的View.GoodBreakWeight(GlyphView.java中的代码似乎证实了这一点),为什么它不会破坏?它是以某种方式返回BadBreakWeight而不是GoodBreakWeight?还是有一些布局问题?还是有错误?

这是一些代码(为了您的观看乐趣):

//somewhere inside JPanel or JFrame constructor
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane);
add(scrollPane);
Run Code Online (Sandbox Code Playgroud)

请注意,如果我取出滚动窗格并仅使用文本窗格(它只是在窗口外面时被剪切),它仍然不会换行.


Swing的javadoc似乎没有详细介绍一些对象(如JTextPane,View和相关对象)如何协同工作.是否还有关于此类课程设计的进一步文档,或许详细说明了每个课程的目的以及它们如何一起工作?它不公开吗?(或者我是唯一一个在这样的事情上遇到麻烦的人?或者说文档不足以限制一些典型的开发人员不会处理的事情?)

java swing jtextpane word-wrap styleddocument

6
推荐指数
1
解决办法
1万
查看次数

Apache POI 和自动调整 XSSFRow 按内容的高度

我有固定的列宽,需要使用apache POI自动调整行高,但我找不到它的工作决定。我尝试过这个决定,但它不适用于此文本

Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut laboure et dolore magna aliqua

在此输入图像描述

列宽为33.00(236 像素),表格中的单元格具有换行文本属性。仅当内容高度大于现有行高度时,我才能更改行高度。

那么,我想问是否有任何方法或决定可以按内容自动调整行高?

private float calculateRowLinesForText(Font cellFont, float columnWidthInPoints, String value) {
        java.awt.Font currFont = new java.awt.Font(cellFont.getFontName(), 0, cellFont.getFontHeightInPoints());

        FontRenderContext frc = new FontRenderContext(null, true, true);

        int lineCnt = 0;
        for (String partValue : value.split("\n")) {
            AttributedString attrStr = new AttributedString(partValue);
            attrStr.addAttribute(TextAttribute.FONT, currFont);
            LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc);

            while (measurer.getPosition() < partValue.length()) …
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi

0
推荐指数
1
解决办法
4196
查看次数

标签 统计

java ×3

swing ×2

word-wrap ×2

apache-poi ×1

excel ×1

java-7 ×1

jtextpane ×1

styleddocument ×1