public static void main(String [] args) {
	final Display display = new Display();
	final Shell shell = new Shell(display);
	shell.setText("The SWT.Settings Event");
	shell.setLayout(new GridLayout());
	Label label = new Label(shell, SWT.WRAP);
	label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
	label.setText("Change a system setting and the table below will be updated.");
	final Table table = new Table(shell, SWT.BORDER);
	table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
	TableColumn column = new TableColumn(table, SWT.NONE);
	column = new TableColumn(table, SWT.NONE);
	column.setWidth(150);
	column = new TableColumn(table, SWT.NONE);
	for (int i = 0; i < colorIds.length; i++) {
		TableItem item = new TableItem(table, SWT.NONE);
		Color color = display.getSystemColor(colorIds[i]);
		item.setText(0, colorNames[i]);
		item.setBackground(1, color);
		item.setText(2, color.toString());
	}
	TableColumn[] columns = table.getColumns();
	columns[0].pack();
	columns[2].pack();
	display.addListener(SWT.Settings, new Listener() {
		@Override
		public void handleEvent(Event event) {
			for (int i = 0; i < colorIds.length; i++) {
				Color color = display.getSystemColor(colorIds[i]);
				TableItem item = table.getItem(i);
				item.setBackground(1, color);
			}
			TableColumn[] columns = table.getColumns();
			columns[0].pack();
			columns[2].pack();
		}
	});

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