Java tutorial
/* * Created by JFormDesigner on Tue Feb 03 13:34:45 CST 2009 */ package anl.verdi.area; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractAction; import javax.swing.AbstractListModel; import javax.swing.Action; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.border.TitledBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.apache.logging.log4j.LogManager; // 2014 import org.apache.logging.log4j.Logger; // 2014 replacing System.out.println with logger messages //import org.geotools.map.MapContext; // replaced for GeoTools v10 import org.geotools.map.MapContent; import anl.verdi.area.target.OpenTargetWindow; import anl.verdi.area.target.Target; import anl.verdi.core.Project; import anl.verdi.core.VerdiApplication; import anl.verdi.plot.gui.FastAreaTilePlot; import anl.verdi.plot.gui.Plot; import anl.verdi.util.FocusClickFix; import anl.verdi.util.Tools; import com.jgoodies.forms.factories.FormFactory; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.FormSpec; import com.jgoodies.forms.layout.RowSpec; import com.jgoodies.forms.layout.Sizes; /** * @author Mary Ann Bitz * @author Argonne National Lab */ public class AreaFilePanel extends JPanel { /** * */ private static final long serialVersionUID = 2092173824541825554L; static final Logger Logger = LogManager.getLogger(AreaFilePanel.class.getName()); private Project project; private MapContent context; // replaced MapContext, DefaultMapContext with MapContent for GeoTools v10 private VerdiApplication verdiApp; public AreaFilePanel() { Logger.debug("in AreaFilePanel default constructor"); initComponents(); } public AreaFilePanel(Project project, MapContent context, VerdiApplication app) // replaced MapContext, DefaultMapContext with MapContent for GeoTools v10 { Logger.debug("in AreaFilePanel constructor with Project, MapContent, VerdiApplication"); this.project = project; this.context = context; this.verdiApp = app; initComponents(); areaList.setModel(new AreasModel()); areaFileList.setModel(project.getAreaFiles()); areaFileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); initListeners(); initializeButtons(); initializePopups(); addOpenAreaFileAction(openAreaFileAction); } private void initializePopups() { Logger.debug("in AreaFilePanel.initializePopups"); areaFileList.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { if (evt.isPopupTrigger()) { showAreaFileListPopup(evt); } } public void mouseReleased(MouseEvent evt) { if (evt.isPopupTrigger()) { showAreaFileListPopup(evt); } } }); // variableList.addMouseListener(new MouseAdapter() { // public void mousePressed(MouseEvent evt) { // if (evt.isPopupTrigger()) { // showVariablesPopup(evt); // } // } // // public void mouseReleased(MouseEvent evt) { // if (evt.isPopupTrigger()) { // showVariablesPopup(evt); // } // } // }); } private Action openAreaFileAction = new AbstractAction() { /** * */ private static final long serialVersionUID = 5389738453732436847L; public void actionPerformed(ActionEvent e) { OpenTargetWindow win = new OpenTargetWindow(verdiApp.getGui().getFrame(), AreaFilePanel.this, "Open Area File", false); } }; private Action addAreaFileAction = new AbstractAction("Add Area File") { /** * */ private static final long serialVersionUID = -5718833501923207816L; public void actionPerformed(ActionEvent e) { btnAdd.doClick(); } }; private Action deleteAreaFileAction = new AbstractAction("Delete Area File") { /** * */ private static final long serialVersionUID = 3609491332807172053L; public void actionPerformed(ActionEvent e) { btnDelete.doClick(); } }; private Action areaFilePropertiesAction = new AbstractAction("Properties") { /** * */ private static final long serialVersionUID = -2185780103182292124L; public void actionPerformed(ActionEvent e) { Logger.debug("properties"); } }; private void showAreaFileListPopup(MouseEvent evt) { Logger.debug("in AreaFilePanel showAreaFileListPopup"); boolean enable = areaFileList.getSelectedIndex() != -1; JPopupMenu menu = new JPopupMenu(); menu.add(addAreaFileAction); menu.add(deleteAreaFileAction).setEnabled(enable); menu.add(areaFilePropertiesAction).setEnabled(false); menu.show(evt.getComponent(), evt.getX(), evt.getY()); } private void initListeners() { Logger.debug("in AreaFilePanel initListeners"); ListSelectionListener listSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent arg0) { int index = areaFileList.getSelectedIndex(); if (index >= 0) { AreaFileListElement element = (AreaFileListElement) areaFileList.getModel().getElementAt(index); // update other values on screen //((AreaFileListModel) areaList.getModel()).addVariablesForDataset(element.getDataset()); // setTimeValues(element); // setLayerValues(element); // setDomainValues(element); } // else { // ((VariablesModel) variableList.getModel()).addVariablesForDataset(null); // setTimeValues(null); // setLayerValues(null); // setDomainValues(null); // } } }; addPanelListeners(); areaFileList.addListSelectionListener(listSelectionListener); } public void updateTilePlots(boolean newAreas) { Logger.debug("in AreaFilePanel updateTilePlots"); // redraw any AreaTilePlots to show selected ones java.util.List<Plot> plots = verdiApp.getGui().getDisplayedPlots(); for (Plot plot : plots) { if (plot instanceof FastAreaTilePlot) { if (newAreas) ((FastAreaTilePlot) plot).recalculateAreas(); ((FastAreaTilePlot) plot).validate(); ((FastAreaTilePlot) plot).repaint(); } } } private void addPanelListeners() { Logger.debug("in AreaFilePanel addPanelListeners"); ListSelectionListener listSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent arg0) { // mark the selected targets if (arg0.getValueIsAdjusting()) { return; } // Object[] values = areaList.getSelectedValues(); // replacing getSelectedValues() List values = areaList.getSelectedValuesList(); Target.setCurrentSelectedTargets(values); // redraw any AreaTilePlots to show selected ones updateTilePlots(false); } }; areaList.addListSelectionListener(listSelectionListener); } private void initializeButtons() { Logger.debug("in AreaFilePanel.initializeButtons"); Icon icon = btnAdd.getIcon(); btnAdd.setMaximumSize(new Dimension(icon.getIconWidth(), icon.getIconHeight())); btnAdd.setPreferredSize(btnAdd.getMaximumSize()); btnAdd.setMinimumSize(btnAdd.getMaximumSize()); icon = btnDelete.getIcon(); btnDelete.setMaximumSize(new Dimension(icon.getIconWidth(), icon.getIconHeight())); btnDelete.setPreferredSize(btnDelete.getMaximumSize()); btnDelete.setMinimumSize(btnDelete.getMaximumSize()); btnDelete.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { // Object[] objs = areaFileList.getSelectedValues(); // replacing getSelectedValues() List objs = areaFileList.getSelectedValuesList(); // if (objs.length > 0) { if (objs.size() > 0) { for (Object obj : objs) { AreaFileListModel listModel = ((AreaFileListModel) areaFileList.getModel()); AreaFileListElement item = (AreaFileListElement) obj; listModel.removeAreaFile(item); removeAreasFor(item.getAreaFile()); //project.removeFormulas(formulas); } } } }); btnAdd.addMouseListener(new FocusClickFix()); btnDelete.addMouseListener(new FocusClickFix()); } void removeAreasFor(AreaFile areaFile) { Logger.debug("in AreaFilePanel.removeAreasFor"); // remove Targets for that source ArrayList list = Target.getTargetsForSource(areaFile); // remove from the lower panel if (list != null) { Target.getTargets().removeAll(list); addAreas(Target.getTargets()); } Target.removeSource(areaFile); } private void initComponents() { Logger.debug("in AreaFilePanel.initComponents"); // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents // Generated using JFormDesigner non-commercial license areaFilesPanel = new JPanel(); areaFiles = new JPanel(); btnAdd = new JButton(); btnDelete = new JButton(); scrollPaneAreaFiles = new JScrollPane(); areaFileList = new JList(); areasPanel = new JPanel(); scrollPane6 = new JScrollPane(); areaList = new JList(); CellConstraints cc = new CellConstraints(); //======== this ======== setLayout(new FormLayout("pref:grow", "fill:default:grow")); //======== areaFilesPanel ======== { areaFilesPanel.setBorder(null); // 2014 - underlying jgoodies class changed ColumnSpec[] aColumnSpec = ColumnSpec.decodeSpecs("pref:grow"); RowSpec[] aRowSpec = RowSpec.decodeSpecs("fill:max(pref;125dlu):grow"); areaFilesPanel.setLayout(new FormLayout(aColumnSpec, new RowSpec[] { new RowSpec(Sizes.dluY(108)), new RowSpec(Sizes.dluY(92)), FormFactory.PREF_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC, FormFactory.PREF_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC, aRowSpec[0] })); // areaFilesPanel.setLayout(new FormLayout( // ColumnSpec.decodeSpecs("pref:grow"), // new RowSpec[] { // new RowSpec(Sizes.dluY(108)), // new RowSpec(Sizes.dluY(92)), // FormFactory.PREF_ROWSPEC, // FormFactory.LINE_GAP_ROWSPEC, // FormFactory.PREF_ROWSPEC, // FormFactory.LINE_GAP_ROWSPEC, // new RowSpec("fill:max(pref;125dlu):grow") // })); //======== areaFiles ======== { areaFiles.setBorder(new TitledBorder("Area Files")); // 2014 ColumnSpec bColumnSpec = new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW); RowSpec bRowSpec = new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW); areaFiles.setLayout(new FormLayout( new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, bColumnSpec }, new RowSpec[] { FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, bRowSpec })); // areaFiles.setLayout(new FormLayout( // new ColumnSpec[] { // FormFactory.DEFAULT_COLSPEC, // FormFactory.RELATED_GAP_COLSPEC, // FormFactory.DEFAULT_COLSPEC, // new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW) // }, // new RowSpec[] { // FormFactory.DEFAULT_ROWSPEC, // FormFactory.RELATED_GAP_ROWSPEC, // new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW) // })); // 2014 set up file names String verdiHome = Tools.getVerdiHome(); // 2014 new method for reading in an image file String separator = "/"; // use forward slash only for constructor ImageIcon(String filename); String pathName = verdiHome + separator + "plugins" + separator + "core" + separator + "icons" + separator; //---- btnAdd ---- String filePlus = new String(pathName + "plus.png"); // btnAdd.setIcon(new ImageIcon(getClass().getResource("/plus.png"))); btnAdd.setIcon(new ImageIcon(filePlus)); btnAdd.setToolTipText("Add Area File"); areaFiles.add(btnAdd, cc.xy(1, 1)); //---- btnDelete ---- String fileMinus = new String(pathName + "Minus.png"); // btnDelete.setIcon(new ImageIcon(getClass().getResource("/minus.png"))); btnDelete.setIcon(new ImageIcon(fileMinus)); btnDelete.setToolTipText("Delete Area File"); areaFiles.add(btnDelete, cc.xy(3, 1)); //======== scrollPaneAreaFiles ======== { //---- areaFileList ---- areaFileList.setSelectedIndex(0); areaFileList.setMaximumSize(new Dimension(300, 100)); areaFileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); areaFileList.setPrototypeCellValue("RADM_CONC_!"); scrollPaneAreaFiles.setViewportView(areaFileList); } areaFiles.add(scrollPaneAreaFiles, cc.xywh(1, 3, 4, 1)); } areaFilesPanel.add(areaFiles, cc.xy(1, 1)); //======== areasPanel ======== { areasPanel.setBorder(new TitledBorder("Areas")); areasPanel.setLayout(new BorderLayout()); //======== scrollPane6 ======== { //---- areaList ---- areaList.setPrototypeCellValue("O3[1]"); scrollPane6.setViewportView(areaList); } areasPanel.add(scrollPane6, BorderLayout.CENTER); } areaFilesPanel.add(areasPanel, cc.xywh(1, 2, 1, 6)); } add(areaFilesPanel, cc.xy(1, 1)); // JFormDesigner - End of component initialization //GEN-END:initComponents } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables // Generated using JFormDesigner non-commercial license private JPanel areaFilesPanel; private JPanel areaFiles; private JButton btnAdd; private JButton btnDelete; private JScrollPane scrollPaneAreaFiles; private JList areaFileList; private JPanel areasPanel; private JScrollPane scrollPane6; private JList areaList; // JFormDesigner - End of variables declaration //GEN-END:variables public void loadAreaFile(AreaFile areaFile) { Logger.debug("in AreaFilePanel.loadAreaFile"); AreaFileListModel model = (AreaFileListModel) areaFileList.getModel(); int index = model.addAreaFile(areaFile); areaFileList.setSelectedIndex(index); areaFileList.scrollRectToVisible(areaFileList.getCellBounds(index, index)); } public void addOpenAreaFileAction(Action openAreaFileAction) { Logger.debug("in AreaFilePanel addOpenAreaFileAction"); btnAdd.addActionListener(openAreaFileAction); } class AreasModel extends AbstractListModel { /** * */ private static final long serialVersionUID = -6797170699759577892L; ArrayList<Area> areas = new ArrayList<Area>(); public Object getElementAt(int index) { Logger.debug("in AreaFilePanel AreasModel getElementAt"); return areas.get(index); } public Area getAreaAt(int index) { Logger.debug("in AreaFilePanel AreasModel getAreaAt"); return areas.get(index); } public int getSize() { Logger.debug("in AreaFilePanel AreasModel getSize"); if (areas == null) return 0; return areas.size(); } public void addAreas(ArrayList<Area> list) { Logger.debug("in AreaFilePanel AreasModel addAreas"); // create the area file and add it to the model int size = areas.size(); // remove the old ones areas.clear(); fireIntervalRemoved(this, 0, size); if (list == null) return; for (Area area : list) { if (list != null) { // add to the model int index = areas.size(); areas.add(area); fireIntervalAdded(this, index, index); } } } } public void addAreas(ArrayList<Area> list) { Logger.debug("in AreaFilePanel addAreas"); ((AreasModel) areaList.getModel()).addAreas(list); } public void areasSelected(ArrayList selections) { Logger.debug("in AreaFilePanel areasSelected"); //change the set to be empty areaList.clearSelection(); // change the set to highlight the targets // make a list of the targets ArrayList allTargets = Target.getTargets(); int[] targets = new int[selections.size()]; for (int i = 0; i < selections.size(); i++) { targets[i] = allTargets.indexOf(selections.get(i)); } areaList.setSelectedIndices(targets); } }