java - 如何让 JTextPane 显示省略号以表示文本溢出?

标签 java swing jtable jtextpane renderer

我使用 JTextPane 作为表格单元格渲染器来显示富文本。当文本太长无法放入单元格时,它会被截断。我想模仿 JLabel 的行为,即显示省略号 (...) 以提醒用户部分文本不可见。以前有人这样做过吗?


在 StanislavL 的帮助下,我最终采用了解决方案。该算法的工作原理是在 StyledDocument 末尾一次截掉一个字符,附加“...”并将生成的首选宽度与表格单元格宽度进行比较。这是低效的,尤其是在字符串很长的情况下,但对我来说不是问题。可以优化。以下内容进入渲染器的 getTableCellRendererComponent

    m_dummyTextPane.setDocument(doc);
    m_dummyTextPane.setSize(Short.MAX_VALUE, table.getRowHeight());        
    int width = m_dummyTextPane.getPreferredSize().width;
    int start = doc.getLength() - 1;
    while(width >= table.getColumnModel().getColumn(col).getWidth() && start>0) {  
        try {
            doc.remove(Math.min(start, doc.getLength()), 
                    doc.getLength() - Math.min(start, doc.getLength()));
            doc.insertString(start, "...", null);
        } catch (BadLocationException e) {
            e.printStackTrace();
            break;
        }
        start--;
        width = m_dummyTextPane.getPreferredSize().width;
    }

最佳答案

您可以使用这个 http://java-sl.com/tip_text_height_measuring.html测量固定宽度的内容。如果它需要比可用空间更多的空间,只需在 JTextPane 上绘制一些东西。

我也喜欢 trashgod 的卷轴创意。 (+1)

关于java - 如何让 JTextPane 显示省略号以表示文本溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611454/

相关文章:

java - 在 JOptionPane 中单击“确定”时如何阻止 JFrame 关闭

java - 使用 ActionListener 将 int 值从一个 jFrame 传递到另一个 jFrame

java - 当我在JAVA上的定时器中时,我可以停止定时器吗

java - 找不到变量 e.getkeycode

java - 如何跨表格单元格和文本字段镜像编辑

java - 为使用 vector 创建的 jTable 添加带有复选框的新列

java - 在 Java 中使用傅里叶变换处理音频数据

java - 如何通过 Java 在 Linux 上可靠地检测磁盘已关闭

java - SwingWorker 和 JComboBox

java - Unicode 和控制台解释