Revision: 5856
          http://sourceforge.net/p/jump-pilot/code/5856
Author:   ma15569
Date:     2018-06-07 12:04:19 +0000 (Thu, 07 Jun 2018)
Log Message:
-----------
Add a generic panel for JTables. This panel provides  a command/search panel 
and an option to save to file (to .cvs)

Added Paths:
-----------
    core/trunk/src/com/vividsolutions/jump/workbench/ui/JTablePanel.java

Added: core/trunk/src/com/vividsolutions/jump/workbench/ui/JTablePanel.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/JTablePanel.java        
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/JTablePanel.java        
2018-06-07 12:04:19 UTC (rev 5856)
@@ -0,0 +1,272 @@
+package com.vividsolutions.jump.workbench.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.RowFilter;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableRowSorter;
+
+import org.openjump.core.apitools.IOTools;
+import org.openjump.core.ui.io.file.FileNameExtensionFilter;
+
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
+import com.vividsolutions.jump.workbench.Logger;
+import com.vividsolutions.jump.workbench.ui.images.IconLoader;
+
+public class JTablePanel extends JPanel {
+
+    private final String sSaved = I18N
+            
.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved");
+    private final String SCouldNotSave = I18N
+            
.get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result");
+    /**
+     * [Giuseppe Aruta 2018-07-06] A generic panel to show JTables. With an
+     * option to save table to file ( to .csv) and a search panel. The style
+     * (Renderer) of the panel reminds AttributePanel renderer
+     */
+
+    private static final long serialVersionUID = 1L;
+
+    private JScrollPane pane = new JScrollPane();
+    private final JPanel filterPanel = new JPanel(new BorderLayout());
+    private JTable jTable = new JTable();
+    private final JLabel jLabel = new JLabel();
+    private DefaultTableModel model = new DefaultTableModel();
+    private final Color LIGHT_GRAY = new Color(230, 230, 230);
+
+    /**
+     * how to use: 1) DefaultTableModel defaultTableModel; 2)
+     * defaultTableModel.addColumn(...); 3) JTablePanel pan = new
+     * JTablePanel(defaultTableModel).
+     * 
+     * @param defaultTableModel
+     */
+    public JTablePanel(DefaultTableModel defaultTableModel) {
+        super();
+        model = defaultTableModel;
+        try {
+            jbInit();
+        } catch (final Exception e) {
+            Logger.error(e);
+        }
+    }
+
+    public JTable getTable() {
+        return jTable;
+    }
+
+    private void jbInit() throws Exception {
+        setLayout(new BorderLayout());
+        jLabel.setText(I18N
+                
.get("org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.rows")
+                + ": "
+                + model.getRowCount()
+                + " - "
+                + 
I18N.get("org.openjump.core.ui.plugin.raster.DEMStatisticsPlugIn.columns")
+                + ": " + model.getColumnCount());
+        jLabel.setFont(jLabel.getFont().deriveFont(Font.BOLD));
+        setTableModel(model);
+        jTable = new JTable();
+        jTable.setGridColor(Color.WHITE);
+        jTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() 
{
+            /**
+             * 
+             */
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public Component getTableCellRendererComponent(JTable table,
+                    Object value, boolean isSelected, boolean hasFocus,
+                    int row, int column) {
+                final Component c = super.getTableCellRendererComponent(table,
+                        value, isSelected, hasFocus, row, column);
+                c.setBackground(row % 2 == 0 ? Color.white : LIGHT_GRAY);
+                if (isSelected) {
+                    c.setBackground(Color.black);
+                }
+                return c;
+            };
+        });
+        pane = new JScrollPane(jTable,
+                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        jTable.setModel(model);
+        jTable.setEnabled(true);
+
+        add(jLabel, BorderLayout.NORTH);
+        add(pane, BorderLayout.CENTER);
+        add(southPanel(), BorderLayout.SOUTH);// Not yet activated
+        add(savePanel(), BorderLayout.AFTER_LAST_LINE);
+    }
+
+    private JPanel savePanel() {
+        final JPanel save = new JPanel();
+        save.setLayout(new FlowLayout(FlowLayout.RIGHT));
+        final JButton saveButton = new JButton(
+                I18N.get("deejump.plugin.SaveLegendPlugIn.Save"));
+        saveButton.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    File file;
+                    final FileNameExtensionFilter filter2 = new 
FileNameExtensionFilter(
+                            "Comma-Separated Values (csv)", "csv");
+
+                    final JFileChooser fc = new 
GUIUtil.FileChooserWithOverwritePrompting();
+                    fc.setFileFilter(filter2);
+                    fc.setFileFilter(filter2);
+                    fc.addChoosableFileFilter(filter2);
+                    final int returnVal = fc.showSaveDialog(JUMPWorkbench
+                            .getInstance().getFrame());
+                    if (returnVal == JFileChooser.APPROVE_OPTION) {
+
+                        file = new File(fc.getSelectedFile() + ".csv");
+                        IOTools.saveCSV(jTable, file.getAbsolutePath());
+                        saved(file);
+
+                    }
+
+                } catch (final Exception ex) {
+                    notsaved();
+                }
+
+            }
+        });
+        save.add(saveButton);
+        return save;
+    }
+
+    private final JTable subtable = new JTable();
+
+    // Experimental panel: here it can go some filters for further analysis 
(see
+    // AttributeQueryPlugIn for example)
+    // and a save button to export filtered results as layer
+    // Right now it search only to match a string to every single record
+    private JPanel southPanel() {
+        // Sorter
+        final TableRowSorter<DefaultTableModel> sorter = new 
TableRowSorter<DefaultTableModel>(
+                model);
+        jTable.setRowSorter(sorter);
+        // Filter Field
+        final JTextField txtFilter = new JTextField();
+
+        // Search Button
+        final JButton btnOK = new JButton(IconLoader.icon("search.png"));
+        btnOK.setToolTipText("Search");
+        btnOK.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                final String expr = txtFilter.getText();
+                sorter.setRowFilter(RowFilter.regexFilter(expr));
+                sorter.setSortKeys(null);
+                subtable.setRowSorter(sorter);
+
+            }
+        });
+        // Save Button, not yet implemented
+        final JButton btSave = new JButton(IconLoader.icon("disk.png"));
+        btSave.setToolTipText("Save search");
+        btSave.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    File file;
+                    final FileNameExtensionFilter filter2 = new 
FileNameExtensionFilter(
+                            "Comma-Separated Values (csv)", "csv");
+
+                    final JFileChooser fc = new 
GUIUtil.FileChooserWithOverwritePrompting();
+                    fc.setFileFilter(filter2);
+                    fc.setFileFilter(filter2);
+                    fc.addChoosableFileFilter(filter2);
+                    final int returnVal = fc.showSaveDialog(JUMPWorkbench
+                            .getInstance().getFrame());
+                    if (returnVal == JFileChooser.APPROVE_OPTION) {
+
+                        file = new File(fc.getSelectedFile() + ".csv");
+                        IOTools.saveCSV(subtable, file.getAbsolutePath());
+                        saved(file);
+
+                    }
+
+                } catch (final Exception ex) {
+                    notsaved();
+                }
+
+            }
+        });
+        // btnOK.setBounds(336, 144, 59, 23);
+        final JPanel jbuttonpan = new JPanel();
+        jbuttonpan.add(btnOK, BorderLayout.WEST);
+        jbuttonpan.add(btSave, BorderLayout.EAST);
+        filterPanel.add(txtFilter, BorderLayout.CENTER);
+        filterPanel.add(jbuttonpan, BorderLayout.EAST);
+        return filterPanel;
+    }
+
+    /**
+     * Set a FeatureCollection to add to the panel
+     * 
+     * @param featurecollection
+     * @return
+     */
+
+    public DefaultTableModel setTableModel(DefaultTableModel table) {
+        return model;
+    }
+
+    /**
+     * Gets the FeatureCollection added to this panel. Useful if user want to
+     * save it as a layer
+     * 
+     * @return FeatureCollection
+     */
+    public DefaultTableModel getTableModel() {
+        return model;
+    }
+
+    /**
+     * Gets the lower panel where locating table tools
+     * 
+     * @return
+     */
+    public JPanel getCommandPanel() {
+        return southPanel();
+    }
+
+    /**
+     * Gets the lower panel where locating save button
+     * 
+     * @return
+     */
+    public JPanel getSavePanel() {
+        return savePanel();
+    }
+
+    protected void saved(File file) {
+        JUMPWorkbench.getInstance().getFrame()
+                .setStatusMessage(sSaved + " :" + file.getAbsolutePath());
+    }
+
+    protected void notsaved() {
+        JUMPWorkbench.getInstance().getFrame().warnUser(SCouldNotSave);
+
+    }
+
+}


Property changes on: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/JTablePanel.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to