treeviewer的某列设置背景色

本文介绍了如何使用Java语言结合Eclipse框架实现树形视图,并自定义列来展示文件系统的目录结构、大小及隐藏状态。通过创建自定义树视图组件、设置列宽及背景色变化,实现对文件系统的高效浏览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.test;

import java.io.File;

import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;


public class TreeColumnTest {

public void run(){
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());

final CheckboxTreeViewer viewer = new CheckboxTreeViewer(shell, SWT.FULL_SELECTION);
viewer.getTree().setHeaderVisible(true);
TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT);
column.setText("Name");
column.setWidth(200);
column = new TreeColumn(viewer.getTree(), SWT.LEFT);
column.setText("Size");
column.setWidth(100);
column = new TreeColumn(viewer.getTree(), SWT.LEFT);
column.setText("Hidden");
column.setWidth(100);
viewer.setContentProvider(new MyTreeContenetProvider());
viewer.setLabelProvider(new MyTableLableProvider());
viewer.setInput(new File("/"));
viewer.addCheckStateListener(new ICheckStateListener(){

@Override
public void checkStateChanged(CheckStateChangedEvent event) {
//获取所设置背景色的前几列的宽度,不包含本身
int width=viewer.getTree().getColumn(0).getWidth()+viewer.getTree().getColumn(1).getWidth();
System.out.println(width);
TreeItem treeItem=(TreeItem) viewer.testFindItem(event.getElement());
Point point=new Point(treeItem.getBounds().x+width,treeItem.getBounds().y);
ViewerCell viewercell=viewer.getCell(point);
viewercell.setBackground(new Color(Display.getDefault(),new RGB(255,255,0)));
}

});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

public static void main(String[] args) {
new TreeColumnTest().run();
}

class MyTreeContenetProvider implements ITreeContentProvider{

public Object[] getChildren(Object parentElement) {
File file=(File)parentElement;
if(file.isDirectory())
return file.listFiles();
else
return null;
}

public Object getParent(Object element) {
File file=(File)element;
return file.getParentFile();
}

public boolean hasChildren(Object element) {
File file=(File)element;
return file.isDirectory()/*&&file.list().length>0*/;
}

public Object[] getElements(Object inputElement) {
File file=(File)inputElement;
return file.isDirectory()?file.listFiles():new Object[]{file};
}

public void dispose() {

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

}

}

class MyTableLableProvider implements ITableLabelProvider{



public MyTableLableProvider() {
super();
//this.addListener(this);
}

public Image getColumnImage(Object element, int columnIndex) {
return null;
}

public String getColumnText(Object element, int columnIndex) {
File file=(File)element;
switch (columnIndex) {
case 0:
return file.getName();
case 1:
return ""+file.length();
case 2:
return ""+file.isHidden();
default:
return "";
}
}

public void addListener(ILabelProviderListener listener) {
// addListener(this);
// this.addListener(this);
}

public void dispose() {

}

public boolean isLabelProperty(Object element, String property) {
return false;
}

@Override
public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}



}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值