Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Standard Widget Toolkit (SWT) » How to Display Image in SWT TableColumn Sortable Column
How to Display Image in SWT TableColumn Sortable Column [message #1798238] Wed, 14 November 2018 15:13 Go to next message
Robin Clark is currently offline Robin ClarkFriend
Messages: 5
Registered: November 2017
Junior Member
I want to display an image in a table column header. The problem that I have is that the image disappears when the column is sorted. I am working in a Windows 10 Pro. I am using the following version of eclipse:
Eclipse for RCP and RAP Developers

Version: Oxygen.3a Release (4.7.3a)
Build id: 20180405-1200

I am having troubles finding examples of implementing a custom drawn tablecolumn header that allows for images to be displayed along with the sorting icon.

Ideally I would like to display the image on the right side of the column instead of on the left.

Any help would be appreciated.


import java.text.Collator;
import java.util.Locale;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public class RobinTest2 {

    public static void main(String[] args) {
	Display display = new Display();
	Shell shell = new Shell(display);
	shell.setLayout(new FillLayout());
	final Table table = new Table(shell, SWT.BORDER);
	table.setHeaderVisible(true);
	final TableColumn column1 = new TableColumn(table, SWT.NONE);
	column1.setText("Column 1");
	final Image image = display.getSystemImage(SWT.ICON_QUESTION);
	column1.setImage(image);
	final TableColumn column2 = new TableColumn(table, SWT.NONE);
	column2.setImage(image);
	column2.setText("Column 2");
	TableItem item = new TableItem(table, SWT.NONE);
	item.setText(new String[] { "a", "3" });
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] { "b", "2" });
	item = new TableItem(table, SWT.NONE);
	item.setText(new String[] { "c", "1" });
	column1.setWidth(100);
	column2.setWidth(100);
	Listener sortListener = e -> {
	    TableItem[] items = table.getItems();
	    Collator collator = Collator.getInstance(Locale.getDefault());
	    TableColumn column = (TableColumn) e.widget;
	    int index = column == column1 ? 0 : 1;
	    for (int i = 1; i < items.length; i++) {
		String value1 = items[i].getText(index);
		for (int j = 0; j < i; j++) {
		    String value2 = items[j].getText(index);
		    if (collator.compare(value1, value2) < 0) {
			String[] values = { items[i].getText(0), items[i].getText(1) };
			items[i].dispose();
			TableItem item1 = new TableItem(table, SWT.NONE, j);
			item1.setText(values);
			items = table.getItems();
			break;
		    }
		}
	    }
	    table.setSortColumn(column);
	};
	column1.addListener(SWT.Selection, sortListener);
	column2.addListener(SWT.Selection, sortListener);
	table.setSortColumn(column1);
	table.setSortDirection(SWT.UP);
	shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
	shell.open();
	while (!shell.isDisposed()) {
	    if (!display.readAndDispatch())
		display.sleep();
	}
	display.dispose();
    }

}

Re: How to Display Image in SWT TableColumn Sortable Column [message #1840214 is a reply to message #1798238] Thu, 08 April 2021 20:41 Go to previous message
Dmitry Mikhalev is currently offline Dmitry MikhalevFriend
Messages: 1
Registered: April 2021
Junior Member
Do you find any solution?
Previous Topic:Disabling selection of non-leaf tree nodes in Pane Based Selection Wizard
Next Topic:How to enable Dark Theme Menus
Goto Forum:
  


Current Time: Thu Dec 05 01:59:10 GMT 2024

Powered by FUDForum. Page generated in 0.04707 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top