Java 无法在JFace TableViewerColumn中换行文本

Java 无法在JFace TableViewerColumn中换行文本,java,jface,tableviewer,Java,Jface,Tableviewer,当宽度超过指定的限制时,我无法在表格单元格中包装文本 代码: 公共静态无效字符串[]args{ List List=Collections.synchronizedListnew ArrayList; list.addnew TableDataJack Hodgins,24岁; list.addnew TableData这只是aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

当宽度超过指定的限制时,我无法在表格单元格中包装文本

代码:

公共静态无效字符串[]args{ List List=Collections.synchronizedListnew ArrayList; list.addnew TableDataJack Hodgins,24岁; list.addnew TableData这只是aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n+hugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +\n+消息SAGEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +\n+去检查KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK +\n+换行功能yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy; 显示=新显示; 外壳=新外壳显示; shell.setTextTable查看器列; shell.setSize800、1500; TableViewer viewer=新的TableViewer,SWT.FILL | SWT.MULTI | SWT.H|滚动| SWT.V|u滚动| SWT.FULL|选择| SWT.BORDER; Table=viewer.getTable; table.SetHeadServiceTrue; table.setLinesVisibletrue; 表1.1:1000、1500; table.setLayoutnew TableLayout; /**名称列*/ TableViewerColumnColumnName=新的TableViewerColumnviewer,SWT.MULTI | SWT.WRAP; columnName.getColumn.setWidth250; columnName.getColumn.setTextName; columnName.setLabelProvidernew ColumnLabelProvider{ @凌驾 public void updateViewerCell单元格 { 对象元素=cell.getElement; TableData的if元素实例 { TableData obj=TableData元素; cell.setTextobj.getName; } } }; /**年龄栏*/ TableViewerColumnColumnage=新的TableViewerColumnviewer,SWT.NONE; columnAge.getColumn.setWidth100; columnAge.getColumn.setTextAge; columnAge.setLabelProvidernew ColumnLabelProvider{ @凌驾 public void updateViewerCell单元格 { 对象元素=cell.getElement; TableData的if元素实例 { TableData obj=TableData元素; cell.setTextString.valueOfobj.getAge; } } }; viewer.setContentProviderArrayContentProvider.getInstance; viewer.setInputlist; viewer.refresh; table.pack; shell.pack; 开壳; shell.setVisibletrue; while!shell.isDisposed{ if!display.readAndDispatch display.sleep; } 显示、处理; } 公共静态类TableData { 字符串名; 智力年龄; 公共表数据字符串名称,int age { this.name=名称; 这个。年龄=年龄; } 公共字符串getName{ 返回名称; } public void setNameString名称{ this.name=名称; } 公共收入{ 回归年龄; } 公共无效设置输入年龄{ 这个。年龄=年龄; } } } 我将知道表格单元格的宽度,如果文本超过该限制,我希望剩余文本位于新行中

我已经看过stackoverflow的其他链接-

仍然无法找到解决方案。
请提供帮助。

此所有者绘制标签提供程序设置为columnName的标签提供程序,显示在换行处拆分的多行。但是所有的行都有最深行的大小

私有静态类NameLabelProvider扩展了OwnerDrawLabelProvider { 专用静态最终整型文本_边距=3; @凌驾 受保护的最终事件、最终对象元素 { event.detail&=~SWT.FOREGROUND; } @凌驾 受保护的void measurefinal事件,最终对象元素 { 最终TableData数据=TableDataelement; 最终字符串文本=data.getName; 最终点大小=event.gc.texttext; event.width=size.x+2*文本_边距; event.height=Math.maxevent.height,size.y+TEXT\u边距; } @凌驾 受保护的最终事件,最终对象元素 { 最终TableData数据=TableDataelement; 最终字符串文本=data.getName; event.gc.drawTexttext,event.x+TEXT\u MARGIN,event.y,true; } }
您可以使用OwnerDrawLabelProvider,但这意味着要自己绘制单元格。但是,该表始终显示具有相同高度的所有行,因此所有行都具有多行行的高度。。因此,表格中的单元格高度不可能仅在文本大小更大时才增加,而对于其他行,则保持为单行吗?您还可以解释一下如何使用OwnerDrawLabelProvider。我尝试将LabelProvider设置为OwnerDrawLabelProvider,但无法获得所需的功能。谢谢greg。现在可以添加多行功能。只是个问题。。是否有任何框架,我可以用来创建表,这将
根据表格单元格宽度动态提供自动文本换行,也仅根据需要提供自动文本换行,这将增加并非所有行的大小?我从未真正寻找过一个,因为我不需要这样做。原则上,它可以用SWT编写,但不同的行高会使一切变得更加复杂。