Si prega di dare un'occhiata al codice qui sottoordinamento non valido alla data in JTable
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.*;
public class TableBasic extends JFrame
{
public TableBasic()
{
String[] columnNames = {"Date", "String", "Long", "Boolean"};
Object[][] data =
{
{getJavaDate("13-11-2020"), "A", new Long(1), Boolean.TRUE },
{getJavaDate("13-11-2018"), "B", new Long(2), Boolean.FALSE},
{getJavaDate("12-11-2015"), "C", new Long(9), Boolean.TRUE },
{getJavaDate("12-11-2015"), "D", new Long(4), Boolean.FALSE}
};
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setAutoCreateRowSorter(true);
table.getColumnModel().getColumn(0).setCellRenderer(tableCellRenderer);
// DefaultRowSorter has the sort() method
DefaultRowSorter sorter = ((DefaultRowSorter)table.getRowSorter());
ArrayList list = new ArrayList();
list.add(new RowSorter.SortKey(0, SortOrder.DESCENDING));
sorter.setSortKeys(list);
sorter.sort();
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
}
private TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer()
{
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus,int row, int column)
{
if(value instanceof Date)
{
value = f.format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
}
};
private Date getJavaDate(String s)
{
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date d = sdf.parse(s);
return d;
} catch (ParseException ex) {
Logger.getLogger(TableBasic.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public static void main(String[] args)
{
TableBasic frame = new TableBasic();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Ora, basta provare a risolverlo utilizzando il campo Date
. Lo sta smistando in modo non valido! Di seguito è il risultato!
perché questo sta accadendo in questo modo? Ho anche usato cell render
!
Grazie. Apprezzo la risposta. –
@Sniper sei il benvenuto – mKorbel