簡體   English   中英

如何在SWT表列中設置科學值(EX 123E45、143E-1等)?

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

如何在SWT表列中獲取科學價值? Java for Scientific Notation支持哪種數據類型? 這個怎么做? 這是我想申請科學計數法的SWT表的簡單代碼。

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();
 }
}

這與SWT表無關,后者僅顯示您提供的字符串。

這就是在asString方法asString值轉換為字符串的方式。

對於諸如123e45的值, integer不適合,因為它不能容納這么大的值,您將需要使用double

如果你有

double val;

您可以使用以下格式將其格式化為科學計數法:

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

其中“%.3E”指定科學計數法,小數點后三位。

有關格式字符串的更多詳細信息,請參見此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM