我已經嘗試了很多事情來顯示逗號而不是我的JTable中的點在「德國」風格。在我的JTable-Class中,我編寫了一個用於循環傳遞ResultSet的方法,用於填充DefaultTableModel並直接返回Model或JTable。用逗號替換點在JTable中導致錯誤的排序順序
如果我將BigDecimal強制轉換爲字符串以便用逗號替換一個點,則結果將在我的JTable中正確顯示 - 但隨後我的排序順序不正確,因爲值將按字符串排序,而不是BigDecimal ...
另一個解決方案是直接通過SQL語句進行排序,並在點擊行標題時動態更改排序順序 - 但這對我來說不是最好的解決方案,因爲內容我的表是通過執行很多查詢花費很多時間生成的。
我試圖設置我的JTable的語言環境,但沒有真正的工作。
任何人的想法,如何以德語格式顯示?
非常感謝!
這裏是我的類:
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Locale;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class MyJTable extends JTable {
private static final long serialVersionUID = 1L;
public MyJTable(){
this.setLocale(Locale.GERMANY);
}
public MyJTable(ResultSet rs) throws SQLException{
DefaultTableModel model = this.getTableModel(rs);
this.setModel(model);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
this.setRowSorter(sorter);
this.setLocale(Locale.GERMANY);
}
public DefaultTableModel getTableModel(ResultSet rs) throws SQLException{
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
String bigdecimal=null;
Object obigdecimal;
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
if (metaData.getColumnClassName(columnIndex).equals("java.math.BigDecimal")){
bigdecimal=rs.getString(columnIndex);
if (bigdecimal!=null){
bigdecimal=bigdecimal.replace(".",",");
obigdecimal=bigdecimal;
vector.add(obigdecimal);
}
}
else
{
vector.add(rs.getObject(columnIndex));
}
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames){
private static final long serialVersionUID = 1L;
public Class getColumnClass(int column) {
Class returnValue=Object.class;
try{
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column).getClass();
} else {
returnValue = Object.class;
}
}
catch(Exception e){}
return returnValue;
}
};
}
}
你有沒有想過使用TableCellRender。使用渲染只會影響數據的顯示,而不影響數據本身,所以它不會影響排序。大多數示例顯示它用於Checkboxes,Combos,但可用於重新格式化文本顯示。請參閱http://docs.oracle.com/javase/tutorial/uiswing/components/table.html – 2015-02-09 10:42:47