2017-01-20 2 views
1

Wie nehmen Sie wissenschaftlichen Wert in der SWT-Tabellenspalte? Welcher Datentyp wird im Java für die wissenschaftliche Notation unterstützt? Wie macht man das? Hier sind einfache Code für SWT-Tabelle, die ich für die wissenschaftliche Notation anwenden möchte.Wie wird der wissenschaftliche Wert (EX 123E45, 143E-1, ...) in der SWT-Tabellenspalte eingestellt?

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

Antwort

2

Dies ist nichts mit der SWT-Tabelle zu tun, die nur die Zeichenfolge zeigt, die Sie ihm geben.

So konvertieren Sie Ihren Wert in eine Zeichenfolge in der asString-Methode.

Für Werte wie 123e45 ist ein integer nicht geeignet, da es einen so großen Wert nicht halten kann, müssen Sie double verwenden.

Wenn Sie

double val; 

haben, können Sie es in wissenschaftlicher Notation wie etwas mit:

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

Wo "% .3E" mit 3 Dezimalstellen wissenschaftliche Schreibweise angibt.

Weitere Informationen zum Formatstring finden Sie unter this question.

+0

@ greg-449: Wie wird in dieser Tabellenspalte sowohl das Hinzufügen als auch das Absteigen durchgeführt? –

+0

Sortieren ist eine andere Frage, aber Sie haben immer noch ein 'val' zum Sortieren. Wie die Saite aussieht, hat nichts damit zu tun, das 'val' zu sortieren. –

+0

@ greq-449: ich möchte, dass die Sortierung auf doppelten Wert anwenden wird sehr gut ausgeführt, aber absteigend nicht auf Tabelle Spalte ausgeführt, so wie? –

Verwandte Themen