Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在基于jtextpane的jtable单元格渲染器中裁剪文本行_Java_Swing_Jtable_Renderer - Fatal编程技术网

Java 在基于jtextpane的jtable单元格渲染器中裁剪文本行

Java 在基于jtextpane的jtable单元格渲染器中裁剪文本行,java,swing,jtable,renderer,Java,Swing,Jtable,Renderer,我在表中使用JTextPane作为单元格渲染器(因此我可以轻松控制颜色、字体、大小和链接)。 问题是当单元格太小而无法包含全文时,行会被包装 我预先知道预期的文本行数(或者我可以直接计数),因此我相应地设置了行的高度。 如何在单元格结束时(在视觉上,即在字母中间)得到线? 谢谢,asaf:-) 更多信息:我在网上找到了两种解决方案。涉及 . 另一个在下面列出,涉及覆盖setSize()。 唉,没有一个奏效 这是我的渲染器(为糟糕的缩进道歉…): 包文本表; 导入java.awt.BorderL

我在表中使用JTextPane作为单元格渲染器(因此我可以轻松控制颜色、字体、大小和链接)。 问题是当单元格太小而无法包含全文时,行会被包装

我预先知道预期的文本行数(或者我可以直接计数),因此我相应地设置了行的高度。

如何在单元格结束时(在视觉上,即在字母中间)得到线?

谢谢,asaf:-) 更多信息:我在网上找到了两种解决方案。涉及 . 另一个在下面列出,涉及覆盖setSize()。
唉,没有一个奏效

这是我的渲染器(为糟糕的缩进道歉…):

包文本表;
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.FontMetrics;
导入java.awt.Insets;
导入javax.swing.JPanel;
导入javax.swing.JTable;
导入javax.swing.JTextPane;
导入javax.swing.table.TableCellRenderer;
导入javax.swing.text.BadLocationException;
导入javax.swing.text.SimpleAttributeSet;
导入javax.swing.text.StyleConstants;
导入javax.swing.text.StyledDocument;
公共类LogRenderer扩展JPanel实现TableCellRenderer{
静态类NoWrapTextPane扩展了JTextPane{
公共文本窗格(){
超级();
}
@凌驾
公共布尔值getScrollableTracksViewportWidth(){
返回false;
}
@凌驾
公共无效设置大小(维度d){
如果(d.width
使用自定义密码。扩展
JLabel
应该为您提供省略号来表示截断,但您可以使用
JPanel
并让剪切切掉结果

附录:你所引用的方法很有效,似乎能满足你的需要。在
LogRenderer
中,我认为可以扩展
JEditorPane
并在构造函数中设置编辑器。例如:

private static class LogRenderer
    extends JEditorPane implements TableCellRenderer {

    public LogRenderer() {
        this.setEditorKit(new WrapEditorKit());
    }

    public Component getListCellRendererComponent(
        JList list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {
        this.setText((String) value);
        return this;
    }

    @Override
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected,
        boolean hasFocus, int row, int column) {
        this.setText((String) value);
        return this;
    }
}

谢谢回复!我不会使用JLabel,因为(a)我渲染多行,以及(b)我绘制文本的不同部分(颜色、大小、链接)。在第二个链接(JPanel解决方案)中,您自己调用drawString(),这是我试图避免的事情。。。我想要的是使用JTextPane的所有功能,但关闭文本包装。
private static class LogRenderer
    extends JEditorPane implements TableCellRenderer {

    public LogRenderer() {
        this.setEditorKit(new WrapEditorKit());
    }

    public Component getListCellRendererComponent(
        JList list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {
        this.setText((String) value);
        return this;
    }

    @Override
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected,
        boolean hasFocus, int row, int column) {
        this.setText((String) value);
        return this;
    }
}