/ / jxTable Ordem de classificação inicial - java, swing, swingx

jxTable Ordem de classificação inicial - java, swing, swingx

Eu gostaria de inicialmente classificar uma tabela. Eu tentei seguir o código:

tableModel = createTableModel(model);
rowSorter = new TableRowSorter<>(tableModel);
rowSorter.setSortKeys(Arrays.asList(getDefaultSort()));
rowSorter.sort();


final JXTable table = new JXTable();
table.setAutoCreateRowSorter(false);
table.setRowSorter(createSorter());

Quando clico na coluna de classificação padrão, funcionabem, então parece não haver problema com a classificação real. Mas a interface do usuário não classifica inicialmente com o código acima, a interface do usuário não mostra nenhum indicador de classificação (esse pequeno triângulo no cabeçalho da coluna).

Respostas:

3 para resposta № 1

O problema pode ser que o RowSorter esteja definido antes de o TableModel ser definido. Eu tive esse problema uma vez.


0 para resposta № 2
DefaultRowSorter.toggleSortOrder( column );

-1 para resposta № 3

Tente fazer como este Exemplo:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

public class SortTable extends JFrame{
protected JTable table = new JTable();

protected TabModel tabmodel;

public SortTable() {
super();
setSize(500, 200);

tabmodel = new TabModel();

table.setModel(tabmodel);

JTableHeader header = table.getTableHeader();
header.setUpdateTableInRealTime(true);
header.addMouseListener(tabmodel.new ColumnListener(table));
header.setReorderingAllowed(true);

JScrollPane ps = new JScrollPane();
ps.getViewport().add(table);
getContentPane().add(ps, BorderLayout.CENTER);

WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser);
setVisible(true);
}

public static void main(String argv[]) {
new SortTable();
}
}
class TabModel extends AbstractTableModel {
protected int sortCol = 0;

protected boolean isSortAsc = true;

protected int m_result = 0;
protected int columnsCount = 1;
Vector vector = new Vector();
public TabModel() {
vector.removeAllElements();
vector.addElement(new Integer(3));
vector.addElement(new Integer(504));
vector.addElement(new Integer(1));
vector.addElement(new Integer(4));
vector.addElement(new Integer(4));
vector.addElement(new Integer(7));
vector.addElement(new Integer(9));
vector.addElement(new Integer(78));
vector.addElement(new Integer(654));
vector.addElement(new Integer(91));
vector.addElement(new Integer(718));
vector.addElement(new Integer(62254));
}

public int getRowCount() {
Collections.sort(vector,new TabComparator(isSortAsc));
return vector == null ? 0 : vector.size();
}

public int getColumnCount() {
return columnsCount;
}

public String getColumnName(int column) {
String str = "data";
if (column == sortCol)
str += isSortAsc ? " >>" : " <<";
return str;
}

public boolean isCellEditable(int nRow, int nCol) {
return false;
}

public Object getValueAt(int nRow, int nCol) {
if (nRow < 0 || nRow >= getRowCount())
return "";
if(nCol>1){
return "";
}
return vector.elementAt(nRow);
}

public String getTitle() {
return "data ";
}

class ColumnListener extends MouseAdapter {
protected JTable table;

public ColumnListener(JTable t) {
table = t;
}

public void mouseClicked(MouseEvent e) {
TableColumnModel colModel = table.getColumnModel();
int columnModelIndex = colModel.getColumnIndexAtX(e.getX());
int modelIndex = colModel.getColumn(columnModelIndex)
.getModelIndex();

if (modelIndex < 0)
return;
if (sortCol == modelIndex)
isSortAsc = !isSortAsc;
else
sortCol = modelIndex;

for (int i = 0; i < columnsCount; i++) {
TableColumn column = colModel.getColumn(i);
column.setHeaderValue(getColumnName(column.getModelIndex()));
}
table.getTableHeader().repaint();

Collections.sort(vector,new TabComparator(isSortAsc));
table.tableChanged(new TableModelEvent(TabModel.this));
table.repaint();
}
}
}

class TabComparator implements Comparator {
protected boolean isSortAsc;

public TabComparator( boolean sortAsc) {
isSortAsc = sortAsc;
}

public int compare(Object o1, Object o2) {
if (!(o1 instanceof Integer) || !(o2 instanceof Integer))
return 0;
Integer s1 = (Integer) o1;
Integer s2 = (Integer) o2;
int result = 0;
result = s1.compareTo(s2);
if (!isSortAsc)
result = -result;
return result;
}

public boolean equals(Object obj) {
if (obj instanceof TabComparator) {
TabComparator compObj = (TabComparator) obj;
return compObj.isSortAsc == isSortAsc;
}
return false;
}
}