Java JTable单元格-处理长文本

Java JTable单元格-处理长文本,java,swing,user-interface,jtable,Java,Swing,User Interface,Jtable,我有一个JTable,其中一列偶尔有相当数量的文本。我们使用一些算法将每行的高度扩展到最高的单元。问题是对于长文本单元格,我们会得到“胖”行 它看起来像这样: ============================= | Col1 | Col2 | This is some| | | | very long | | | | text! | ============================= YourTable = new java

我有一个JTable,其中一列偶尔有相当数量的文本。我们使用一些算法将每行的高度扩展到最高的单元。问题是对于长文本单元格,我们会得到“胖”行

它看起来像这样:

============================= | Col1 | Col2 | This is some| | | | very long | | | | text! | =============================
YourTable = new javax.swing.JTable(){
    //add tooltip to display the full cell text when not displayed
    public String getToolTipText( MouseEvent e )
    {
        int row = rowAtPoint( e.getPoint() );
        int column = columnAtPoint( e.getPoint() );

        Object value = getValueAt(row, column);
        return value == null ? null : value.toString();
    }
}
;
============================= |Col1 | Col2 |这是一些| || |很长| || |文字| ============================= 我考虑了几种解决方案:

  • 剪切文本并添加鼠标侦听器以“扩展”剪切的文本
  • 剪切文本并添加工具提示或对话框以显示额外内容
有人知道有什么库可以解决这个问题吗?我愿意使用其他技术…我不相信我的解决方案是最好的


提前谢谢

我会使用工具提示

您可以重写JTable的getToolTiptText(()方法来实现这一点

JTable table = new JTable(...)
{
    public String getToolTipText( MouseEvent e )
    {
        int row = rowAtPoint( e.getPoint() );
        int column = columnAtPoint( e.getPoint() );

        Object value = getValueAt(row, column);
        return value == null ? null : value.toString();
    }
};

或者,如果只是针对某些列,您可以使用渲染器设置工具提示文本。请参阅。

我花了一些时间才了解如何在Netbeans上显示工具提示,但您的回答帮助很大。 这里它是在netbeans GUI Builder上实现的。。。 右键单击Jtable->自定义代码。 选择“自定义创建”,其中新的“javax.swing.JTable();”代码位于分号之前;添加下面答案的代码…如下所示:

============================= | Col1 | Col2 | This is some| | | | very long | | | | text! | =============================
YourTable = new javax.swing.JTable(){
    //add tooltip to display the full cell text when not displayed
    public String getToolTipText( MouseEvent e )
    {
        int row = rowAtPoint( e.getPoint() );
        int column = columnAtPoint( e.getPoint() );

        Object value = getValueAt(row, column);
        return value == null ? null : value.toString();
    }
}
;

我唯一担心的是,这种技术会让复制表内容变得更加令人沮丧。如果Swing有Eclipse那样的“可锁定”工具提示(我不知道它们叫什么),那就好了(例如,当您将鼠标悬停在javadoc上时)。我不确定复制问题是什么。表无论如何都不支持复制单元格的某些部分。因此,即使对于完全可见的文本,您也不能只选择并复制几个字符。您的问题不是从单元格复制文本。如果这是您的真正要求,则是的,您需要显示某个单元格的自定义弹出窗口nd,它将文本显示在文本组件中,与渲染器相对,以便您可以选择和复制文本。公平地说,我也没有意识到复制行与模型的关系比与渲染单元格的关系更大-我对swing概念有点生疏,抱歉。