r2799 - trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session
Author: kmorin Date: 2014-02-14 11:38:04 +0100 (Fri, 14 Feb 2014) New Revision: 2799 Url: http://nuiton.org/projects/jaxx/repository/revisions/2799 Log: fixes #3084 Save the sort orders for the JTables in the Swingsession Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JTableState.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JXTableSwingSessionState.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JTableState.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JTableState.java 2014-02-12 17:17:53 UTC (rev 2798) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JTableState.java 2014-02-14 10:38:04 UTC (rev 2799) @@ -24,8 +24,16 @@ * #L% */ +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import javax.swing.*; import javax.swing.table.TableColumn; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * State for JTable. @@ -38,13 +46,18 @@ */ public class JTableState implements State { + private static final Log log = LogFactory.getLog(JTableState.class); + protected int[] columnWidths = new int[0]; + protected Map<Integer, String> sortKeys; + public JTableState() { } - public JTableState(int[] columnWidths) { + public JTableState(int[] columnWidths, Map<Integer, String> sortKeys) { this.columnWidths = columnWidths; + this.sortKeys = sortKeys; } public int[] getColumnWidths() { @@ -55,6 +68,14 @@ this.columnWidths = columnWidths; } + public Map<Integer, String> getSortKeys() { + return sortKeys; + } + + public void setSortKeys(Map<Integer, String> sortKeys) { + this.sortKeys = sortKeys; + } + protected JTable checkComponent(Object o) { if (o == null) { throw new IllegalArgumentException("null component"); @@ -68,8 +89,10 @@ @Override public State getState(Object o) { JTable table = checkComponent(o); + int[] columnWidths = new int[table.getColumnCount()]; boolean resizableColumnExists = false; + for (int i = 0; i < columnWidths.length; i++) { TableColumn tc = table.getColumnModel().getColumn(i); columnWidths[i] = (tc.getResizable()) ? tc.getWidth() : -1; @@ -77,11 +100,22 @@ resizableColumnExists = true; } } - JTableState result = null; + + List<? extends RowSorter.SortKey> sortKeys = table.getRowSorter().getSortKeys(); + Map<Integer, String> sortKeysMap = null; + if (sortKeys != null) { + sortKeysMap = new HashMap<Integer, String>(); + for (RowSorter.SortKey sortKey : sortKeys) { + sortKeysMap.put(sortKey.getColumn(), String.valueOf(sortKey.getSortOrder())); + } + } + + JTableState result = new JTableState(); if (resizableColumnExists) { - result = new JTableState(); result.setColumnWidths(columnWidths); } + result.setSortKeys(sortKeysMap); + return result; } @@ -90,8 +124,11 @@ if (!(state instanceof JTableState)) { throw new IllegalArgumentException("invalid state"); } + JTable table = checkComponent(o); - int[] columnWidths = ((JTableState) state).getColumnWidths(); + JTableState jTableState = (JTableState) state; + + int[] columnWidths = jTableState.getColumnWidths(); if (columnWidths != null && table.getColumnCount() == columnWidths.length) { for (int i = 0; i < columnWidths.length; i++) { @@ -103,5 +140,16 @@ } } } + List<RowSorter.SortKey> sortKeys = null; + Map<Integer, String> sortKeysMap = jTableState.getSortKeys(); + if (sortKeysMap != null) { + sortKeys = new ArrayList<RowSorter.SortKey>(); + for (Integer index : sortKeysMap.keySet()) { + SortOrder sortOrder = SortOrder.valueOf(sortKeysMap.get(index)); + RowSorter.SortKey sortKey = new RowSorter.SortKey(index, sortOrder); + sortKeys.add(sortKey); + } + } + table.getRowSorter().setSortKeys(sortKeys); } } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JXTableSwingSessionState.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JXTableSwingSessionState.java 2014-02-12 17:17:53 UTC (rev 2798) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/session/JXTableSwingSessionState.java 2014-02-14 10:38:04 UTC (rev 2799) @@ -28,8 +28,10 @@ import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnExt; +import javax.swing.*; import javax.swing.table.TableColumn; import java.util.List; +import java.util.Map; /** * @author kmorin <morin@codelutin.com> @@ -43,8 +45,8 @@ super(); } - public JXTableSwingSessionState(int[] columnWidths, boolean[] hiddenColumns) { - super(columnWidths); + public JXTableSwingSessionState(int[] columnWidths, Map<Integer, String> sortKeys, boolean[] hiddenColumns) { + super(columnWidths, sortKeys); this.hiddenColumns = hiddenColumns; } @@ -73,6 +75,7 @@ JTableState state = (JTableState) super.getState(o); if (state != null) { result.setColumnWidths(state.getColumnWidths()); + result.setSortKeys(state.getSortKeys()); } DefaultTableColumnModelExt columnModel = (DefaultTableColumnModelExt) table.getColumnModel();
participants (1)
-
kmorin@users.nuiton.org