Java Tutorial/SWT/TableColumn
Содержание
Add Column Header Selection Listener
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* Table example snippet: sort a table by column * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ * * @since 3.2 */
import java.text.Collator; import java.util.Locale; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; 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 TableColumnSelectionListener {
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 TableColumn column2 = new TableColumn(table, SWT.NONE); 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 = new Listener() { public void handleEvent(Event e) { TableColumn column = (TableColumn) e.widget; System.out.println(column); } }; column1.addListener(SWT.Selection, sortListener); column2.addListener(SWT.Selection, sortListener); shell.setSize(shell.ruputeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}</source>
Add Icon to Table column
<source lang="java">
import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; public class TableColumnIcon {
public static void main(String[] args) { final Display display = new Display(); final Image image = new Image(display, 16, 16); GC gc = new GC(image); gc.setBackground(display.getSystemColor(SWT.COLOR_RED)); gc.fillRectangle(image.getBounds()); gc.dispose(); final Shell shell = new Shell(display); shell.setText("Lazy Table"); shell.setLayout(new FillLayout()); final Table table = new Table(shell, SWT.BORDER | SWT.MULTI); table.setSize(200, 200); for (int i = 0; i < 20; i++) { final int[] index = new int[] { i }; TableItem item = new TableItem(table, SWT.NONE); item.setText("Table Item " + index[0]); item.setImage(image); } shell.setSize(200, 200); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } image.dispose(); display.dispose(); }
}</source>
Adding Columns
The TableColumn class represents a column in the table. You create a column with a parent table, a style, and optionally an index. If you don"t specify an index, the column assumes the next available zero-based index.
<source lang="java">
public TableColumn(Table parent, int style) public TableColumn(Table parent, int style, int index)</source>
Fixed first column and horizontal scroll remaining columns
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* Table example snippet: Fixed first column and horizontal scroll remaining columns * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ * */
import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; 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 TableColumnFirstFix {
public static void main(String[] args) { int rowCount = 40; int columnCount = 15; final Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); Composite parent = new Composite(shell, SWT.BORDER); GridLayout layout = new GridLayout(2, false); layout.marginWidth = layout.marginHeight = layout.horizontalSpacing = 0; parent.setLayout(layout); final Table leftTable = new Table(parent, SWT.MULTI | SWT.FULL_SELECTION); leftTable.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); leftTable.setHeaderVisible(true); final Table rightTable = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); rightTable.setHeaderVisible(true); GridData table2Data = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2); rightTable.setLayoutData(table2Data); // Create columns TableColumn column1 = new TableColumn(leftTable, SWT.NONE); column1.setText("Name"); column1.setWidth(150); for (int i = 0; i < columnCount; i++) { TableColumn column = new TableColumn(rightTable, SWT.NONE); column.setText("Value " + i); column.setWidth(200); } // Create rows for (int i = 0; i < rowCount; i++) { TableItem item = new TableItem(leftTable, SWT.NONE); item.setText("item " + i); item = new TableItem(rightTable, SWT.NONE); for (int j = 0; j < columnCount; j++) { item.setText(j, "Item " + i + " value @ " + j); } } // Make selection the same in both tables leftTable.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rightTable.setSelection(leftTable.getSelectionIndices()); } }); rightTable.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { leftTable.setSelection(rightTable.getSelectionIndices()); } }); // On Windows, the selection is gray if the table does not have focus. // To make both tables appear in focus, draw teh selection background here. // This part only works on version 3.2 or later. Listener eraseListener = new Listener() { public void handleEvent(Event event) { if ((event.detail & SWT.SELECTED) != 0) { GC gc = event.gc; Rectangle rect = event.getBounds(); gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT)); gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_SELECTION)); gc.fillRectangle(rect); event.detail &= ~SWT.SELECTED; } } }; leftTable.addListener(SWT.EraseItem, eraseListener); rightTable.addListener(SWT.EraseItem, eraseListener); // Make vertical scrollbars scroll together ScrollBar vBarLeft = leftTable.getVerticalBar(); vBarLeft.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rightTable.setTopIndex(leftTable.getTopIndex()); } }); ScrollBar vBarRight = rightTable.getVerticalBar(); vBarRight.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { leftTable.setTopIndex(rightTable.getTopIndex()); } }); // Horizontal bar on second table takes up a little extra space. // To keep vertical scroll bars in sink, force table1 to end above // horizontal scrollbar ScrollBar hBarRight = rightTable.getHorizontalBar(); Label spacer = new Label(parent, SWT.NONE); GridData spacerData = new GridData(); spacerData.heightHint = hBarRight.getSize().y; spacer.setVisible(false); parent.setBackground(leftTable.getBackground()); shell.setSize(600, 400); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}</source>
Insert a table column at an index
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* Table example snippet: insert a table column (at an index) * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ */
import org.eclipse.swt.SWT; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Display; 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 TableColumnInsert {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout(SWT.VERTICAL)); final Table table = new Table(shell, SWT.BORDER | SWT.MULTI); table.setHeaderVisible(true); for (int i = 0; i < 4; i++) { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("Column " + i); } final TableColumn[] columns = table.getColumns(); for (int i = 0; i < 12; i++) { TableItem item = new TableItem(table, SWT.NONE); for (int j = 0; j < columns.length; j++) { item.setText(j, "Item " + i); } } for (int i = 0; i < columns.length; i++) columns[i].pack(); int index = 1; TableColumn column = new TableColumn(table, SWT.NONE, index); column.setText("Column " + index + "a"); TableItem[] items = table.getItems(); for (int i = 0; i < items.length; i++) { items[i].setText(index, "Item " + i + "a"); } column.pack(); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}</source>
Reorder TableColumn
<source lang="java">
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
//package org.eclipse.swt.snippets; /*
* Allow user to reorder columns and reorder columns programmatically. * * For a list of all SWT example snippets see * http://www.eclipse.org/swt/snippets/ * * @since 3.1 */
import org.eclipse.swt.SWT; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; 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 TableColumnReorder {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout(SWT.HORIZONTAL)); final Table table = new Table(shell, SWT.BORDER | SWT.CHECK); table.setLayoutData(new RowData(-1, 300)); table.setHeaderVisible(true); TableColumn column = new TableColumn(table, SWT.LEFT); column.setText("Column 0"); column = new TableColumn(table, SWT.CENTER); column.setText("Column 1"); column = new TableColumn(table, SWT.CENTER); column.setText("Column 2"); column = new TableColumn(table, SWT.CENTER); column.setText("Column 3"); column = new TableColumn(table, SWT.CENTER); column.setText("Column 4"); for (int i = 0; i < 100; i++) { TableItem item = new TableItem(table, SWT.NONE); String[] text = new String[] { i + " 0", i + " 1", i + " 2", i + " 3", i + " 4" }; item.setText(text); } Listener listener = new Listener() { public void handleEvent(Event e) { System.out.println("Move " + e.widget); } }; TableColumn[] columns = table.getColumns(); for (int i = 0; i < columns.length; i++) { columns[i].pack(); columns[i].setMoveable(true); columns[i].addListener(SWT.Move, listener); } Button b = new Button(shell, SWT.PUSH); b.setText("invert column order"); b.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { int[] order = table.getColumnOrder(); for (int i = 0; i < order.length / 2; i++) { int temp = order[i]; order[i] = order[order.length - i - 1]; order[order.length - i - 1] = temp; } table.setColumnOrder(order); } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}</source>