简体   繁体   中英

How to set scientific value(EX 123E45, 143E-1,…) in the SWT table column?

How to take scientific value in the SWT table column? Which data type supported in the java for scientific Notation? How to do this? Here are simple code for SWT table which i want apply for the scientific notation.

package test;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
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 SortTable {
 private TableRow rows[] = new TableRow[] {
  new TableRow(1, "aaa", new Date(1363784269000 L)),
   new TableRow(2, "abc", new Date(1367784269000 L)),
   new TableRow(3, "efc", new Date(1363584269000 L)),
   new TableRow(4, "ccc", new Date(1363734269000 L)),
 };
 private Table table;
 private TableColumn intColumn;
 private TableColumn strColumn;
 private TableColumn dateColumn;
 private TableColumn scientificColumn;

 public SortTable() {
  Display display = new Display();
  Shell shell = new Shell(display);
  shell.setLayout(new FillLayout());

  table = new Table(shell, SWT.BORDER);
  table.setHeaderVisible(true);
  intColumn = new TableColumn(table, SWT.NONE);
  intColumn.setText("int");
  intColumn.setWidth(50);
  strColumn = new TableColumn(table, SWT.NONE);
  strColumn.setText("string");
  strColumn.setWidth(50);
  dateColumn = new TableColumn(table, SWT.NONE);
  dateColumn.setText("date");
  dateColumn.setWidth(100);

  scientificColumn = new TableColumn(table, SWT.NONE);
  scientificColumn.setText("ScintificValue");

  updateTable();

  Listener sortListener = new Listener() {
   public void handleEvent(Event e) {
    TableColumn column = (TableColumn) e.widget;
    if (column == intColumn) Arrays.sort(rows, BY_VAL);
    if (column == strColumn) Arrays.sort(rows, BY_STR);
    if (column == dateColumn) Arrays.sort(rows, BY_DATE);

    table.setSortColumn(column);
    updateTable();
   }
  };
  intColumn.addListener(SWT.Selection, sortListener);
  strColumn.addListener(SWT.Selection, sortListener);
  dateColumn.addListener(SWT.Selection, sortListener);
  shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
  shell.open();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch())
    display.sleep();
  }
  display.dispose();
 }

 private void updateTable() {
  table.removeAll();
  for (TableRow row: rows) {
   TableItem item = new TableItem(table, SWT.NONE);
   item.setText(row.asString());
  }
 }

 public final Comparator < TableRow > BY_VAL = new Comparator < TableRow > () {
  @Override
  public int compare(TableRow o1, TableRow o2) {
   if (o1.val < o2.val) return -1;
   if (o1.val > o2.val) return 1;
   return 0;
  }
 };

 public final Comparator < TableRow > BY_STR = new Comparator < TableRow > () {
  @Override
  public int compare(TableRow o1, TableRow o2) {
   return o1.str.compareTo(o2.str);
  }
 };

 public final Comparator < TableRow > BY_DATE = new Comparator < TableRow > () {
  @Override
  public int compare(TableRow o1, TableRow o2) {
   return o1.date.compareTo(o2.date);
  }
 };


 private class TableRow {
  private int val;
  private String str;
  private Date date;
  private SimpleDateFormat format = new SimpleDateFormat();


  public TableRow(int val, String str, Date date) {
   this.val = val;
   this.str = str;
   this.date = date;
  }

  public String[] asString() {
   return new String[] {
    Integer.toString(val), str, format.format(date)
   };
  }
 }

 public static void main(String[] args) {
  new SortTable();
 }
}

This is nothing to do with the SWT Table which just shows the string you give it.

It is just how you convert your value to a string in the asString method.

For values such as 123e45 an integer is not suitable as it cannot hold such a large value you will need to use double .

If you have

double val;

you can format it in scientific notation using something like:

String.format("%.3E", val)

Where "%.3E" specifies scientific notation with 3 decimal places.

See this question for more details on the format string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM