`

自动换行的TableCellRender

 
阅读更多

 import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;

class C extends JFrame {
    public C() {
        JTable tbl = new JTable(new String[][]{
	        		{
	                "JTable 里单元格内容的显示器是 TableCellRenderer。",
	                "默认的显示器(DefaultTableCellRenderer)继承 JLabel 所以不方便多行显示。",
	                "要多行显示应该继承 JTextArea(参看下面的 TableCellTextAreaRenderer 类)。",
	                "当然,别忘了调用 JTable.setDefaultRenderer() 登记你的显示器。"},
	                {
	                    "JTable 里单元格内容的显示器是 TableCellRenderer。",
	                    "默认的显示器(DefaultTableCellRenderer)继承 JLabel 所以不方便多行显示。",
	                    "要多行显示应该继承 JTextArea(参看下面的 TableCellTextAreaRenderer 类)。",
	                    "当然,别忘了调用 JTable.setDefaultRenderer() 登记你的显示器。"}
        		},
                "A B C D".split(" "));
        tbl.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());

        add(new JScrollPane(tbl));
        setSize(800, 200);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) { new C(); }
}

class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {

    public TableCellTextAreaRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        // 计算当下行的最佳高度
        int maxPreferredHeight = 0;
        for (int i = 0; i < table.getColumnCount(); i++) {
            setText("" + table.getValueAt(row, i));
            setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
            maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);
        }

        if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙
        {
            table.setRowHeight(row, maxPreferredHeight);
        }

        setText(value == null ? "" : value.toString());
        return this;
    }
}

分享到:
评论

相关推荐

    c# winform 绘制多行文本:自动换行:文本

    c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制...

    css自动换行 css自动换行 css自动换行

    css自动换行css自动换行css自动换行css自动换行css自动换行css自动换行css自动换行css自动换行css自动换行

    Pb中实现自动换行

    ### Pb中实现自动换行详解 #### 知识点概览 在PB(PowerBuilder)中,自动换行是一项常用且实用的功能,特别是在处理大量文本数据时,它能确保文本在限定的空间内清晰可见,避免水平滚动条的出现,提高用户体验。...

    Jlabel实现内容自动换行简单实例

    JLabel实现内容自动换行简单实例 JLabel是一个Java Swing中的组件,用于显示文本或图像。在实际开发中,我们经常需要在JLabel中显示较长的文本,然而JLabel默认情况下不会自动换行,这将导致文本溢出或难以阅读。...

    多个view自动换行

    在Android开发中,"多个view自动换行"通常是指在一个布局容器中,当视图(View)数量过多,无法在一行内显示时,系统能够自动将它们换行展示,以适应不同的屏幕尺寸和布局需求。这涉及到对ViewGroup的管理和布局管理...

    button自适应高度和自动换行

    "button自适应高度和自动换行"这个主题主要关注如何让按钮在不同屏幕尺寸和内容长度下保持良好的视觉效果。以下是对这个主题的详细解释: 一、自适应高度 1. CSS Flexbox:使用Flexbox布局模型可以轻松实现按钮的...

    advBandedGridView自动换行自适应高度

    标题 "advBandedGridView自动换行自适应高度" 指的是在使用advBandedGridView时,如何实现单元格内容自动换行以及根据内容调整行的高度以适应显示。这涉及到两个关键功能:自动换行和自动行高调整。 自动换行功能是...

    解决DrawText中文字与字母之间自动换行

    在探讨“解决DrawText中文字与字母之间自动换行”的问题时,我们首先需要理解DrawText函数的基本概念及其在Windows编程中的应用。DrawText是一个Windows API函数,用于将文本绘制到指定的矩形区域,同时提供了多种...

    PDA自动换行设置

    PDA 自动换行设置,PDA扫描枪自动换行设置: 在界面点开始--设置--找到 intermec settings进入 --Data Collection

    JTable自动换行

    标题“JTable自动换行”正是指向这个功能,即如何在`JTable`的单元格内实现文本的自动换行。 默认情况下,`JTable`的单元格使用`DefaultTableCellRenderer`,它不支持文本的自动换行。为了实现自动换行,我们需要...

    设置QTableView的内容自动换行,代理方式

    默认情况下,`QTableView`中的单元格内容是不支持自动换行的,而是将文本截断或者显示省略号。要实现内容自动换行,我们可以利用Qt的代理(Delegate)机制来定制单元格的行为。本文将详细讲解如何通过自定义代理实现...

    delphi自动换行

    本项目聚焦于“自动换行”这一功能,针对Delphi程序进行了优化,旨在提升用户体验并解决可能出现的乱码问题。 自动换行是文本编辑器或控制台应用程序中的一个常见特性,它允许用户在一行文本达到指定宽度时,自动将...

    FastReport自动换行及行高自适应

    在设计报表时,我们经常遇到需要处理长文本自动换行以及行高自适应的问题,以便于在有限的页面空间内展示更多的信息。本文将详细讲解如何在FastReport中实现这两个功能。 首先,我们要理解自动换行的两种方法: 1....

    实现label文字以指定长度自动换行

    然而,系统默认的`Label`控件往往不具备自动换行的功能,这在处理长文本时可能会造成显示问题。为了克服这一限制,开发者们会编写自定义的程序来实现`Label`的文字自动换行功能。下面我们将详细讨论如何实现这一功能...

    VC编辑框自动换行

    ### VC编辑框自动换行 在C++编程中,特别是在使用Visual C++(简称VC)进行界面开发时,实现编辑框自动换行是一项常见的需求。本文将详细介绍如何通过设置属性和编写代码来实现这一功能。 #### 一、理解编辑框自动...

    自动换行控件

    在IT领域,尤其是在软件开发和UI设计中,"自动换行控件"是一个重要的概念,它主要用于用户界面(UI)的构建,以提供更友好、更易读的用户体验。自动换行控件允许文本或数据在达到容器边界时自动换行,避免内容溢出并...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office...

    TextMeshProUGUI自动宽度(达到最宽后自动换行)

    TextMeshProUGUI自动宽度(达到最宽后自动换行) 1. 以父节点宽度为最大宽度,超出自动换行 2. 背景图也自动与text一同变化 3. 设置父节点Pivot控制换行方向 4. 设置Bg上的VerticalLayoutGroup Padding 微调背景图宽...

    Android自动换行标签控件(二)

    在这个场景中,我们关注的是一个名为"Android自动换行标签控件(二)"的主题,它涉及到如何利用`ViewGroup`来实现一个可以自动换行的标签控件。这样的控件通常用于展示多条分类标签,例如新闻类别或者产品属性,当...

    DIV CSS 图片自动换行

    在网页设计中,"DIV CSS 图片自动换行"是一个常见的布局技巧,它涉及到CSS(层叠样式表)中的盒模型、布局模式以及响应式设计。这个技术主要用于展示一组图片,使得图片能够在页面中自动适应并换行排列,同时还可以...

Global site tag (gtag.js) - Google Analytics