1.在第一个类来写
protected void createTableColumns(Table table) {
List columnNames = new ArrayList();
TableLayout tableLayout = new AutoResizeTableLayout(table);
for(Iterator iter = getLabelAccessors().iterator(); iter.hasNext();)
{
Accessor accessor = (Accessor)(iter.next());
String label = accessor.getOptionalString();
columnNames.add(label);
if(accessor instanceof AbstractLabelAccessor)
{
AbstractLabelAccessor labelAccessor = (AbstractLabelAccessor)accessor;
if(labelAccessor.isFixed())
{
if(labelAccessor.getWidth() >= 0)
{
tableLayout.addColumnData(new ColumnPixelData(labelAccessor.getWidth()));
}
else
{
tableLayout.addColumnData(new ColumnWeightData(100/getLabelAccessors().size()));
}
}
else
{
if(labelAccessor.getWeight() >= 0)
{
if(labelAccessor.getMinWidth() >= 0)
{
tableLayout.addColumnData(new ColumnWeightData(labelAccessor.getWeight(), labelAccessor.getMinWidth()));
}
else
{
tableLayout.addColumnData(new ColumnWeightData(labelAccessor.getWeight()));
}
}
else
{
// ignore MinWidth...
tableLayout.addColumnData(new ColumnWeightData(100/getLabelAccessors().size()));
}
}
}
else
{
if(label.length() == 0)
{
tableLayout.addColumnData(new ColumnWeightData(NO_ABSTRACT_LABEL_ACCESSOR_EMPTY_LABEL_COLUMN_WEIGHT, true));
}
else
{
tableLayout.addColumnData(new ColumnWeightData(NO_ABSTRACT_LABEL_ACCESSOR_NO_EMPTY_LABEL_COLUMN_WEIGHT, NO_ABSTRACT_LABEL_ACCESSOR_NO_EMPTY_LABEL_COLUMN_MINWIDTH, true));
}
}
}
for (Iterator iter = columnNames.iterator(); iter.hasNext();)
{
TableColumn column = new TableColumn(table, SWT.NONE);
// column.setMoveable(true);
column.setText((String)iter.next());
}
table.setLayout(tableLayout);
table.pack();
}
2.然后写一个TableLayout 的子类
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* COMMENT - Add description of this class or interface here.
* Description should go beyond the class/interface name.
* Use the following template:
*
* <Short description of class (noun phrase) followed by a dot>
* <More elaborate description of what kind of object this class or interface represents.>
* <Give information on (special) characteristics if possible.>
*/
public class AutoResizeTableLayout extends TableLayout implements ControlListener{
private final Table table;
private List columns = new ArrayList();
private boolean autosizing = false;
private int oldWidth;
/**
* COMMENT - Add concise description of this constructor.
* Description should go beyond the constructor's name.
*
*
*/
public AutoResizeTableLayout(final Table table) {
this.table = table;
table.addControlListener(this);
}
public void addColumnData(ColumnLayoutData data){
columns.add(data);
super.addColumnData(data);
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
*/
public void controlMoved(ControlEvent e) {
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
*/
public void controlResized(ControlEvent e) {
// only react on changing width min. few pixels
// (see workaround for SWT bug getting unnecessary scroll bar)
if (Math.abs(oldWidth - table.getClientArea().width) > 5) {
if (autosizing) {
return;
}
autosizing = true;
try {
autoSizeColumns();
} finally {
autosizing = false;
oldWidth = table.getClientArea().width;
}
}
}
/**
* <Short description (short verb phrase possible) followed by a dot>
* <More elaborate description of "what" this method does. Omit the "how" unless necessary.>
*
*
*/
private void autoSizeColumns() {
int width = table.getClientArea().width;
width -= 10; // workaround for SWT bug getting unnecessary scroll bar
if(width <= 1) return;
TableColumn[] tableColumns = table.getColumns();
int size = Math.min(columns.size(), tableColumns.length);
int[] widths = new int[size];
int fixedWidth = 0;
int numberOfWeightColumns = 0;
int totalWeight = 0;
//First calc space occupied by fixed columns
for (int i = 0; i < size; ++i) {
ColumnLayoutData col = (ColumnLayoutData) columns.get(i);
if(col instanceof ColumnPixelData){
int pixels = ((ColumnPixelData)col).width;
widths[i] = pixels;
fixedWidth += pixels;
}
else if(col instanceof ColumnWeightData){
ColumnWeightData cw = (ColumnWeightData)col;
++numberOfWeightColumns;
int weight = cw.weight;
totalWeight += weight;
}
else{
throw new IllegalStateException("Unknown column layout data"); //$NON-NLS-1$
}
}
//Do we have columns that have weight?
if(numberOfWeightColumns > 0){
//Now, distribute the rest to the columns with weight
int rest = width - fixedWidth;
int totalDistributed = 0;
for (int i = 0; i < size; ++i) {
ColumnLayoutData col = (ColumnLayoutData) columns.get(i);
if(col instanceof ColumnWeightData){
ColumnWeightData cw = (ColumnWeightData)col;
int weight = cw.weight;
int pixels = totalWeight == 0 ? 0 : weight * rest/totalWeight;
if(pixels < cw.minimumWidth) pixels = cw.minimumWidth;
totalDistributed += pixels;
widths[i] = pixels;
}
}
//Distribute any remaining pixels to columns with weight
int diff = rest - totalDistributed;
for (int i = 0; diff > 0; ++i) {
if(i == size) i = 0;
ColumnLayoutData col = (ColumnLayoutData) columns.get(i);
if(col instanceof ColumnWeightData){
++widths[i];
--diff;
}
}
}
for (int i = 0; i < size; i++) {
if(tableColumns[i].getWidth() != widths[i]) tableColumns[i].setWidth(widths[i]);
}
}
/**
* remove this from the tables listeners.
*/
public void dispose() {
table.removeControlListener(this);
}
}
分享到:
相关推荐
《jQuery的resize()事件与jquery.ba-resize.min.js插件详解》 在Web开发中,JavaScript库jQuery大大简化了DOM操作,包括事件处理。其中,`resize()`事件用于监听窗口或元素尺寸的变化,但直接使用`$(window).resize...
在uniapp项目中结合使用Quill和image-resize.min.js,开发者可以实现用户上传图片后自动调整到合适的大小,确保用户体验的同时,也优化了应用的性能。 在uniapp中集成Quill编辑器的步骤大致如下: 1. 安装依赖:...
- 在某些版本的LabVIEW中,选择“Resize Columns to Fit Data”选项可以实现列宽的自动调整。 4. **VI服务(VISA)**: - 对于涉及到硬件通信的项目,可能需要使用VI服务来读取数据,这时可以结合VISA事件,当...
用于DOM元素变化,当元素变化时,用户需要做出什么操作
《深入理解jQuery.ba-resize.js:扩展JavaScript的窗口与元素尺寸改变事件》 在Web开发中,JavaScript(JS)作为客户端脚本语言,扮演着至关重要的角色。然而,原生的JavaScript并不直接支持监听DOM元素的尺寸变化...
$('#table').on('column-resize', function (e, field, newWidth) { // 保存或处理新的列宽 }); ``` 6. **优化用户体验**:为了提高用户体验,可以添加一些视觉反馈,例如在鼠标悬浮在列边界时显示调整线,或者在...
qull.min.js,image-resize.min.js qull.min.js image-resize.min.js uniapp——内网部署H5端editor富文本报错问题 亲测有效 免费下载
1. 引入库:首先,你需要将`javascript-detect-element-resize.js`文件引入到你的HTML文档中,或者通过模块系统(如CommonJS或ES6模块)来导入。 2. 创建实例:然后,你可以创建一个新的检测器实例,传入要监听的...
例如,你可以设计一个表格控件,当窗口大小改变时,表格会自动调整列宽以适应新的空间。 2. **ImgCtrls.ocx**: 这个控件集包含了一系列图像处理相关的控件,如图片框、图像滑块等,用于增强应用程序的图形显示...
resizeWindow.txt resizeWindow.txt resizeWindow.txtresizeWindow.txtresizeWindow.txt resizeWindow.txt resizeWindow.txt resizeWindow.txt
标题中的"GIF Resize.rar"表明这是一个关于调整GIF图像大小的压缩文件,通常包含软件、教程或其他资源。GIF是一种常见的动画图像格式,用于在网络上显示动态图像。在互联网上,优化图片大小对于加载速度和用户体验至...
2. 控件大小调整:对于界面中的控件,如按钮、文本框等,ReSize模块能帮助开发者实现控件随窗口大小变化而自动调整大小,保持界面的美观和可用性。 3. 布局算法:模块内含了多种布局策略,如网格布局、流式布局等,...
【标题解析】:“xm-resize.rar”是一个RAR压缩文件,其中包含了与ENVI(Environment for Visualizing Images,图像可视化环境)软件相关的“Resize”操作,可能是用于调整或裁剪遥感图像的工具或数据。"ENVI Resize...
2. `rpi-resize.sh`:这是一个脚本文件,很可能是为了自动执行分区扩展的程序。在安装LineageOS后,可能需要运行这个脚本来确保系统分区适应整个可用存储空间,尤其是当树莓派的SD卡或USB存储设备容量较大时。 3. `...
在VB6(Visual Basic 6)中,"FORM-RESIZE.rar_resize"的主题涉及到了窗体(Form)的大小调整,这是一个重要的用户界面(UI)设计元素。在VB6环境中,开发者经常需要处理窗体控件的大小改变,以便适应不同屏幕分辨率...
在这个例子中,我们首先使用第三方库`imaging`打开图像,然后使用`resize.Resize`方法将其缩放到800像素宽度,高度自动调整,使用的是Lanczos3高质量缩放算法,最后保存结果。 4. **性能考虑** Go-resize库设计时...
在网页设计中,"可调整列宽TABLE"是一种常见的交互式数据展示技术,它使得用户可以根据需要自由调整表格中列的宽度。这种功能通常应用于数据量大、信息丰富的表格,以便用户能更清晰地查看和理解数据。下面将详细...
"GIF Resize.zip"这个文件名暗示了它可能是一个包含工具或教程的压缩包,专门用于调整GIF图像的大小。GIF是一种广泛使用的图像格式,尤其适合创建简单的动画和透明效果。下面我们将深入探讨GIF图像的大小调整以及与...