Java Tutorial/SWT/TableColumn

Материал из Java эксперт
Перейти к: навигация, поиск

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>