Search in sources :

Example 66 with MouseAdapter

use of java.awt.event.MouseAdapter in project jabref by JabRef.

the class StyleSelectDialog method setupTable.

private void setupTable() {
    styles = new BasicEventList<>();
    EventList<OOBibStyle> sortedStyles = new SortedList<>(styles);
    tableModel = (DefaultEventTableModel<OOBibStyle>) GlazedListsSwing.eventTableModelWithThreadProxyList(sortedStyles, new StyleTableFormat());
    table = new JTable(tableModel);
    TableColumnModel cm = table.getColumnModel();
    cm.getColumn(0).setPreferredWidth(100);
    cm.getColumn(1).setPreferredWidth(200);
    cm.getColumn(2).setPreferredWidth(80);
    selectionModel = (DefaultEventSelectionModel<OOBibStyle>) GlazedListsSwing.eventSelectionModelWithThreadProxyList(sortedStyles);
    table.setSelectionModel(selectionModel);
    table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent mouseEvent) {
            if (mouseEvent.isPopupTrigger()) {
                tablePopup(mouseEvent);
            }
        }

        @Override
        public void mouseReleased(MouseEvent mouseEvent) {
            if (mouseEvent.isPopupTrigger()) {
                tablePopup(mouseEvent);
            }
        }
    });
    selectionModel.getSelected().addListEventListener(new EntrySelectionListener());
}
Also used : OOBibStyle(org.jabref.logic.openoffice.OOBibStyle) MouseEvent(java.awt.event.MouseEvent) JTable(javax.swing.JTable) SortedList(ca.odell.glazedlists.SortedList) MouseAdapter(java.awt.event.MouseAdapter) TableColumnModel(javax.swing.table.TableColumnModel)

Example 67 with MouseAdapter

use of java.awt.event.MouseAdapter in project jabref by JabRef.

the class HelpAction method getHelpLabel.

public JLabel getHelpLabel(String labelText) {
    JLabel helpLabel = new JLabel("<html><u>" + labelText + "</u></html>");
    helpLabel.setForeground(Color.BLUE);
    helpLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
    helpLabel.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            openHelpPage();
        }
    });
    return helpLabel;
}
Also used : MouseEvent(java.awt.event.MouseEvent) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) Cursor(java.awt.Cursor)

Example 68 with MouseAdapter

use of java.awt.event.MouseAdapter in project jabref by JabRef.

the class ProtectedTermsDialog method setupTable.

private void setupTable() {
    tableModel = new TermTableModel();
    table = new JTable(tableModel);
    TableColumnModel cm = table.getColumnModel();
    cm.getColumn(0).setMinWidth((cm.getColumn(0).getPreferredWidth() * 11) / 10);
    cm.getColumn(0).setMaxWidth((cm.getColumn(0).getPreferredWidth() * 11) / 10);
    cm.getColumn(1).setPreferredWidth(100);
    cm.getColumn(2).setPreferredWidth(100);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent mouseEvent) {
            if (mouseEvent.isPopupTrigger()) {
                tablePopup(mouseEvent);
            }
        }

        @Override
        public void mouseReleased(MouseEvent mouseEvent) {
            if (mouseEvent.isPopupTrigger()) {
                tablePopup(mouseEvent);
            }
        }

        @Override
        public void mouseClicked(MouseEvent mouseEvent) {
            if (mouseEvent.getClickCount() == 2) {
                getSelectedTermsList().ifPresent(list -> list.setEnabled(!list.isEnabled()));
                tableModel.fireTableDataChanged();
            }
        }
    });
    table.getSelectionModel().addListSelectionListener(new EntrySelectionListener());
}
Also used : JDialog(javax.swing.JDialog) IconTheme(org.jabref.gui.IconTheme) JabRefPreferences(org.jabref.preferences.JabRefPreferences) JCheckBoxMenuItem(javax.swing.JCheckBoxMenuItem) JabRefFrame(org.jabref.gui.JabRefFrame) MouseAdapter(java.awt.event.MouseAdapter) UnknownExternalFileType(org.jabref.gui.externalfiletype.UnknownExternalFileType) BorderLayout(java.awt.BorderLayout) ListSelectionEvent(javax.swing.event.ListSelectionEvent) ProtectedTermsLoader(org.jabref.logic.protectedterms.ProtectedTermsLoader) Path(java.nio.file.Path) ExternalFileType(org.jabref.gui.externalfiletype.ExternalFileType) KeyStroke(javax.swing.KeyStroke) DefaultTableModel(javax.swing.table.DefaultTableModel) BibEntry(org.jabref.model.entry.BibEntry) BorderFactory(javax.swing.BorderFactory) FXDialogService(org.jabref.gui.FXDialogService) DefaultTaskExecutor(org.jabref.gui.util.DefaultTaskExecutor) Objects(java.util.Objects) Dimension(java.awt.Dimension) JabRefDialog(org.jabref.gui.JabRefDialog) AbstractAction(javax.swing.AbstractAction) FormLayout(com.jgoodies.forms.layout.FormLayout) Optional(java.util.Optional) JTable(javax.swing.JTable) LogFactory(org.apache.commons.logging.LogFactory) ProtectedTermsList(org.jabref.logic.protectedterms.ProtectedTermsList) KeyBinding(org.jabref.gui.keyboard.KeyBinding) ListSelectionModel(javax.swing.ListSelectionModel) ActionListener(java.awt.event.ActionListener) TableColumnModel(javax.swing.table.TableColumnModel) JTextField(javax.swing.JTextField) ButtonBarBuilder(com.jgoodies.forms.builder.ButtonBarBuilder) JabRefDesktop(org.jabref.gui.desktop.JabRefDesktop) DialogService(org.jabref.gui.DialogService) Action(javax.swing.Action) FileExtensions(org.jabref.logic.util.FileExtensions) JMenuItem(javax.swing.JMenuItem) Localization(org.jabref.logic.l10n.Localization) BibDatabaseContext(org.jabref.model.database.BibDatabaseContext) ActionMap(javax.swing.ActionMap) JComponent(javax.swing.JComponent) FormBuilder(com.jgoodies.forms.builder.FormBuilder) JButton(javax.swing.JButton) FileDialogConfiguration(org.jabref.gui.util.FileDialogConfiguration) JPopupMenu(javax.swing.JPopupMenu) IOException(java.io.IOException) JOptionPane(javax.swing.JOptionPane) ActionEvent(java.awt.event.ActionEvent) MouseEvent(java.awt.event.MouseEvent) Globals(org.jabref.Globals) JScrollPane(javax.swing.JScrollPane) WindowLocation(org.jabref.gui.util.WindowLocation) Log(org.apache.commons.logging.Log) JTextArea(javax.swing.JTextArea) ExternalFileTypes(org.jabref.gui.externalfiletype.ExternalFileTypes) InputMap(javax.swing.InputMap) ListSelectionListener(javax.swing.event.ListSelectionListener) MouseEvent(java.awt.event.MouseEvent) JTable(javax.swing.JTable) MouseAdapter(java.awt.event.MouseAdapter) TableColumnModel(javax.swing.table.TableColumnModel)

Example 69 with MouseAdapter

use of java.awt.event.MouseAdapter in project JMRI by JMRI.

the class BlockTableAction method createModel.

/**
     * Create the JTable DataModel, along with the changes for the specific case
     * of Block objects.
     */
@Override
protected void createModel() {
    // load graphic state column display preference
    _graphicState = InstanceManager.getDefault(GuiLafPreferencesManager.class).isGraphicTableState();
    m = new BeanTableDataModel() {

        public static final int EDITCOL = NUMCOLUMN;

        public static final int DIRECTIONCOL = EDITCOL + 1;

        public static final int LENGTHCOL = DIRECTIONCOL + 1;

        public static final int CURVECOL = LENGTHCOL + 1;

        public static final int STATECOL = CURVECOL + 1;

        public static final int SENSORCOL = STATECOL + 1;

        public static final int REPORTERCOL = SENSORCOL + 1;

        public static final int CURRENTREPCOL = REPORTERCOL + 1;

        public static final int PERMISCOL = CURRENTREPCOL + 1;

        public static final int SPEEDCOL = PERMISCOL + 1;

        @Override
        public String getValue(String name) {
            if (name == null) {
                log.warn("requested getValue(null)");
                return "(no name)";
            }
            Block b = InstanceManager.getDefault(jmri.BlockManager.class).getBySystemName(name);
            if (b == null) {
                log.debug("requested getValue(\"" + name + "\"), Block doesn't exist");
                return "(no Block)";
            }
            Object m = b.getValue();
            if (m != null) {
                return m.toString();
            } else {
                return "";
            }
        }

        @Override
        public Manager getManager() {
            return InstanceManager.getDefault(jmri.BlockManager.class);
        }

        @Override
        public NamedBean getBySystemName(String name) {
            return InstanceManager.getDefault(jmri.BlockManager.class).getBySystemName(name);
        }

        @Override
        public NamedBean getByUserName(String name) {
            return InstanceManager.getDefault(jmri.BlockManager.class).getByUserName(name);
        }

        @Override
        protected String getMasterClassName() {
            return getClassName();
        }

        @Override
        public void clickOn(NamedBean t) {
        // don't do anything on click; not used in this class, because 
        // we override setValueAt
        }

        //Permissive and speed columns are temp disabled
        @Override
        public int getColumnCount() {
            return SPEEDCOL + 1;
        }

        @Override
        public Object getValueAt(int row, int col) {
            // some error checking
            if (row >= sysNameList.size()) {
                log.debug("requested getValueAt(\"" + row + "\"), row outside of range");
                return "Error table size";
            }
            Block b = (Block) getBySystemName(sysNameList.get(row));
            if (b == null) {
                log.debug("requested getValueAt(\"" + row + "\"), Block doesn't exist");
                return "(no Block)";
            }
            if (col == DIRECTIONCOL) {
                return jmri.Path.decodeDirection(b.getDirection());
            } else if (col == CURVECOL) {
                JComboBox<String> c = new JComboBox<String>(curveOptions);
                if (b.getCurvature() == Block.NONE) {
                    c.setSelectedItem(0);
                } else if (b.getCurvature() == Block.GRADUAL) {
                    c.setSelectedItem(gradualText);
                } else if (b.getCurvature() == Block.TIGHT) {
                    c.setSelectedItem(tightText);
                } else if (b.getCurvature() == Block.SEVERE) {
                    c.setSelectedItem(severeText);
                }
                return c;
            } else if (col == LENGTHCOL) {
                double len = 0.0;
                if (inchBox.isSelected()) {
                    len = b.getLengthIn();
                } else {
                    len = b.getLengthCm();
                }
                return (twoDigit.format(len));
            } else if (col == PERMISCOL) {
                boolean val = b.getPermissiveWorking();
                return Boolean.valueOf(val);
            } else if (col == SPEEDCOL) {
                String speed = b.getBlockSpeed();
                if (!speedList.contains(speed)) {
                    speedList.add(speed);
                }
                JComboBox<String> c = new JComboBox<String>(speedList);
                c.setEditable(true);
                c.setSelectedItem(speed);
                return c;
            } else if (col == STATECOL) {
                switch(b.getState()) {
                    case (Block.OCCUPIED):
                        return Bundle.getMessage("BlockOccupied");
                    case (Block.UNOCCUPIED):
                        return Bundle.getMessage("BlockUnOccupied");
                    case (Block.UNKNOWN):
                        return Bundle.getMessage("BlockUnknown");
                    default:
                        return Bundle.getMessage("BlockInconsistent");
                }
            } else if (col == SENSORCOL) {
                Sensor sensor = b.getSensor();
                JComboBox<String> c = new JComboBox<String>(sensorList);
                String name = "";
                if (sensor != null) {
                    name = sensor.getDisplayName();
                }
                c.setSelectedItem(name);
                return c;
            } else if (col == REPORTERCOL) {
                Reporter r = b.getReporter();
                return (r != null) ? r.getDisplayName() : null;
            } else if (col == CURRENTREPCOL) {
                return Boolean.valueOf(b.isReportingCurrent());
            } else if (col == EDITCOL) {
                //
                return Bundle.getMessage("ButtonEdit");
            } else {
                return super.getValueAt(row, col);
            }
        }

        @Override
        public void setValueAt(Object value, int row, int col) {
            // no setting of block state from table
            Block b = (Block) getBySystemName(sysNameList.get(row));
            if (col == VALUECOL) {
                b.setValue(value);
                fireTableRowsUpdated(row, row);
            } else if (col == LENGTHCOL) {
                float len = 0.0f;
                try {
                    len = jmri.util.IntlUtilities.floatValue(value.toString());
                } catch (java.text.ParseException ex2) {
                    log.error("Error parsing length value of \"{}\"", value);
                }
                if (inchBox.isSelected()) {
                    b.setLength(len * 25.4f);
                } else {
                    b.setLength(len * 10.0f);
                }
                fireTableRowsUpdated(row, row);
            } else if (col == CURVECOL) {
                @SuppressWarnings("unchecked") String cName = (String) ((JComboBox<String>) value).getSelectedItem();
                if (cName.equals(noneText)) {
                    b.setCurvature(Block.NONE);
                } else if (cName.equals(gradualText)) {
                    b.setCurvature(Block.GRADUAL);
                } else if (cName.equals(tightText)) {
                    b.setCurvature(Block.TIGHT);
                } else if (cName.equals(severeText)) {
                    b.setCurvature(Block.SEVERE);
                }
                fireTableRowsUpdated(row, row);
            } else if (col == PERMISCOL) {
                boolean boo = ((Boolean) value).booleanValue();
                b.setPermissiveWorking(boo);
                fireTableRowsUpdated(row, row);
            } else if (col == SPEEDCOL) {
                @SuppressWarnings("unchecked") String speed = (String) ((JComboBox<String>) value).getSelectedItem();
                try {
                    b.setBlockSpeed(speed);
                } catch (jmri.JmriException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage() + "\n" + speed);
                    return;
                }
                if (!speedList.contains(speed) && !speed.contains("Global")) {
                    // NOI18N
                    speedList.add(speed);
                }
                fireTableRowsUpdated(row, row);
            } else if (col == REPORTERCOL) {
                Reporter r = null;
                if (value != null && !value.equals("")) {
                    r = jmri.InstanceManager.getDefault(jmri.ReporterManager.class).provideReporter((String) value);
                }
                b.setReporter(r);
                fireTableRowsUpdated(row, row);
            } else if (col == SENSORCOL) {
                @SuppressWarnings("unchecked") String strSensor = (String) ((JComboBox<String>) value).getSelectedItem();
                b.setSensor(strSensor);
                return;
            } else if (col == CURRENTREPCOL) {
                boolean boo = ((Boolean) value).booleanValue();
                b.setReportingCurrent(boo);
                fireTableRowsUpdated(row, row);
            } else if (col == EDITCOL) {
                class WindowMaker implements Runnable {

                    Block b;

                    WindowMaker(Block b) {
                        this.b = b;
                    }

                    @Override
                    public void run() {
                        // don't really want to stop Route w/o user action
                        editButton(b);
                    }
                }
                WindowMaker t = new WindowMaker(b);
                javax.swing.SwingUtilities.invokeLater(t);
            //editButton(b);
            } else {
                super.setValueAt(value, row, col);
            }
        }

        @Override
        public String getColumnName(int col) {
            if (col == DIRECTIONCOL) {
                return Bundle.getMessage("BlockDirection");
            }
            if (col == VALUECOL) {
                return Bundle.getMessage("BlockValue");
            }
            if (col == CURVECOL) {
                return Bundle.getMessage("BlockCurveColName");
            }
            if (col == LENGTHCOL) {
                return Bundle.getMessage("BlockLengthColName");
            }
            if (col == PERMISCOL) {
                return Bundle.getMessage("BlockPermColName");
            }
            if (col == SPEEDCOL) {
                return Bundle.getMessage("BlockSpeedColName");
            }
            if (col == STATECOL) {
                return Bundle.getMessage("BlockState");
            }
            if (col == REPORTERCOL) {
                return Bundle.getMessage("BlockReporter");
            }
            if (col == SENSORCOL) {
                return Bundle.getMessage("BlockSensor");
            }
            if (col == CURRENTREPCOL) {
                return Bundle.getMessage("BlockReporterCurrent");
            }
            if (col == EDITCOL) {
                return Bundle.getMessage("ButtonEdit");
            }
            return super.getColumnName(col);
        }

        @Override
        public Class<?> getColumnClass(int col) {
            if (col == DIRECTIONCOL) {
                return String.class;
            }
            if (col == VALUECOL) {
                // not a button
                return String.class;
            }
            if (col == CURVECOL) {
                return JComboBox.class;
            }
            if (col == LENGTHCOL) {
                return String.class;
            }
            if (col == PERMISCOL) {
                return Boolean.class;
            }
            if (col == SPEEDCOL) {
                return JComboBox.class;
            }
            if (col == STATECOL) {
                if (_graphicState) {
                    // use an image to show block state
                    return JLabel.class;
                } else {
                    return String.class;
                }
            }
            if (col == REPORTERCOL) {
                return String.class;
            }
            if (col == SENSORCOL) {
                return JComboBox.class;
            }
            if (col == CURRENTREPCOL) {
                return Boolean.class;
            }
            if (col == EDITCOL) {
                return JButton.class;
            } else {
                return super.getColumnClass(col);
            }
        }

        @Override
        public int getPreferredWidth(int col) {
            if (col == DIRECTIONCOL) {
                return new JTextField(7).getPreferredSize().width;
            }
            if (col == CURVECOL) {
                return new JTextField(8).getPreferredSize().width;
            }
            if (col == LENGTHCOL) {
                return new JTextField(7).getPreferredSize().width;
            }
            if (col == PERMISCOL) {
                return new JTextField(7).getPreferredSize().width;
            }
            if (col == SPEEDCOL) {
                return new JTextField(7).getPreferredSize().width;
            }
            if (col == STATECOL) {
                return new JTextField(8).getPreferredSize().width;
            }
            if (col == REPORTERCOL) {
                return new JTextField(8).getPreferredSize().width;
            }
            if (col == SENSORCOL) {
                return new JTextField(8).getPreferredSize().width;
            }
            if (col == CURRENTREPCOL) {
                return new JTextField(7).getPreferredSize().width;
            }
            if (col == EDITCOL) {
                return new JTextField(7).getPreferredSize().width;
            } else {
                return super.getPreferredWidth(col);
            }
        }

        @Override
        public void configValueColumn(JTable table) {
        // value column isn't button, so config is null
        }

        @Override
        public boolean isCellEditable(int row, int col) {
            if (col == CURVECOL) {
                return true;
            } else if (col == LENGTHCOL) {
                return true;
            } else if (col == PERMISCOL) {
                return true;
            } else if (col == SPEEDCOL) {
                return true;
            } else if (col == STATECOL) {
                return false;
            } else if (col == REPORTERCOL) {
                return true;
            } else if (col == SENSORCOL) {
                return true;
            } else if (col == CURRENTREPCOL) {
                return true;
            } else if (col == EDITCOL) {
                return true;
            } else {
                return super.isCellEditable(row, col);
            }
        }

        @Override
        public void configureTable(JTable table) {
            table.setDefaultRenderer(JComboBox.class, new jmri.jmrit.symbolicprog.ValueRenderer());
            table.setDefaultEditor(JComboBox.class, new jmri.jmrit.symbolicprog.ValueEditor());
            table.setDefaultRenderer(Boolean.class, new EnablingCheckboxRenderer());
            jmri.InstanceManager.sensorManagerInstance().addPropertyChangeListener(this);
            configStateColumn(table);
            super.configureTable(table);
        }

        @Override
        protected boolean matchPropertyName(java.beans.PropertyChangeEvent e) {
            return true;
        // return (e.getPropertyName().indexOf("alue")>=0);
        }

        @Override
        public JButton configureButton() {
            log.error("configureButton should not have been called");
            return null;
        }

        @Override
        public void propertyChange(java.beans.PropertyChangeEvent e) {
            if (e.getSource() instanceof jmri.SensorManager) {
                if (e.getPropertyName().equals("length") || e.getPropertyName().equals("DisplayListName")) {
                    updateSensorList();
                }
            }
            if (e.getPropertyName().equals("DefaultBlockSpeedChange")) {
                updateSpeedList();
            } else {
                super.propertyChange(e);
            }
        }

        @Override
        protected String getBeanType() {
            return Bundle.getMessage("BeanNameBlock");
        }

        @Override
        public synchronized void dispose() {
            super.dispose();
            jmri.InstanceManager.sensorManagerInstance().removePropertyChangeListener(this);
        }

        /**
             * Customize the block table State column to show an appropriate graphic for the block occupancy state
             * if _graphicState = true, or (default) just show the localized state text
             * when the TableDataModel is being called from ListedTableAction.
             *
             * @param table a JTable of Blocks
             */
        protected void configStateColumn(JTable table) {
            // have the state column hold a JPanel (icon)
            //setColumnToHoldButton(table, VALUECOL, new JLabel("1234")); // for small round icon, but cannot be converted to JButton
            // add extras, override BeanTableDataModel
            log.debug("Block configStateColumn (I am {})", super.toString());
            if (_graphicState) {
                // load icons, only once
                //table.setDefaultEditor(JLabel.class, new ImageIconRenderer()); // there's no editor for state column in BlockTable
                // item class copied from SwitchboardEditor panel
                table.setDefaultRenderer(JLabel.class, new ImageIconRenderer());
            // else, classic text style state indication, do nothing extra
            }
        }

        /**
             * Visualize state in table as a graphic, customized for Blocks (2 states).
             * Renderer and Editor are identical, as the cell contents are not actually edited.
             * @see jmri.jmrit.beantable.sensor.SensorTableDataModel.ImageIconRenderer
             * @see jmri.jmrit.beantable.TurnoutTableAction#createModel()
             * @see jmri.jmrit.beantable.LightTableAction#createModel()
             */
        class ImageIconRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {

            protected JLabel label;

            // also used in display.switchboardEditor
            protected String rootPath = "resources/icons/misc/switchboard/";

            // reuse Sensor icon for block state
            protected char beanTypeChar = 'S';

            protected String onIconPath = rootPath + beanTypeChar + "-on-s.png";

            protected String offIconPath = rootPath + beanTypeChar + "-off-s.png";

            protected BufferedImage onImage;

            protected BufferedImage offImage;

            protected ImageIcon onIcon;

            protected ImageIcon offIcon;

            protected int iconHeight = -1;

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                log.debug("Renderer Item = {}, State = {}", row, value);
                if (iconHeight < 0) {
                    // load resources only first time, either for renderer or editor
                    loadIcons();
                    log.debug("icons loaded");
                }
                return updateLabel((String) value, row);
            }

            @Override
            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                log.debug("Renderer Item = {}, State = {}", row, value);
                if (iconHeight < 0) {
                    // load resources only first time, either for renderer or editor
                    loadIcons();
                    log.debug("icons loaded");
                }
                return updateLabel((String) value, row);
            }

            public JLabel updateLabel(String value, int row) {
                if (iconHeight > 0) {
                // if necessary, increase row height;
                //table.setRowHeight(row, Math.max(table.getRowHeight(), iconHeight - 5)); // TODO adjust table row height for Block icons
                }
                if (value.equals(Bundle.getMessage("BlockUnOccupied")) && offIcon != null) {
                    label = new JLabel(offIcon);
                    label.setVerticalAlignment(JLabel.BOTTOM);
                    log.debug("offIcon set");
                } else if (value.equals(Bundle.getMessage("BlockOccupied")) && onIcon != null) {
                    label = new JLabel(onIcon);
                    label.setVerticalAlignment(JLabel.BOTTOM);
                    log.debug("onIcon set");
                } else if (value.equals(Bundle.getMessage("BlockInconsistent"))) {
                    // centered text alignment
                    label = new JLabel("X", JLabel.CENTER);
                    label.setForeground(Color.red);
                    log.debug("Block state inconsistent");
                    iconHeight = 0;
                } else if (value.equals(Bundle.getMessage("BlockUnknown"))) {
                    // centered text alignment
                    label = new JLabel("?", JLabel.CENTER);
                    log.debug("Block state in transition");
                    iconHeight = 0;
                } else {
                    // failed to load icon
                    // centered text alignment
                    label = new JLabel(value, JLabel.CENTER);
                    log.warn("Error reading icons for BlockTable");
                    iconHeight = 0;
                }
                label.setToolTipText(value);
                label.addMouseListener(new MouseAdapter() {

                    @Override
                    public final void mousePressed(MouseEvent evt) {
                        log.debug("Clicked on icon in row {}", row);
                        stopCellEditing();
                    }
                });
                return label;
            }

            @Override
            public Object getCellEditorValue() {
                log.debug("getCellEditorValue, me = {})", this.toString());
                return this.toString();
            }

            /**
                 * Read and buffer graphics. Only called once for this table.
                 * @see #getTableCellEditorComponent(JTable, Object, boolean, int, int)
                 */
            protected void loadIcons() {
                try {
                    onImage = ImageIO.read(new File(onIconPath));
                    offImage = ImageIO.read(new File(offIconPath));
                } catch (IOException ex) {
                    log.error("error reading image from {} or {}", onIconPath, offIconPath, ex);
                }
                log.debug("Success reading images");
                int imageWidth = onImage.getWidth();
                int imageHeight = onImage.getHeight();
                // scale icons 50% to fit in table rows
                Image smallOnImage = onImage.getScaledInstance(imageWidth / 2, imageHeight / 2, Image.SCALE_DEFAULT);
                Image smallOffImage = offImage.getScaledInstance(imageWidth / 2, imageHeight / 2, Image.SCALE_DEFAULT);
                onIcon = new ImageIcon(smallOnImage);
                offIcon = new ImageIcon(smallOffImage);
                iconHeight = onIcon.getIconHeight();
            }
        }
    };
// end of custom data model
}
Also used : ImageIcon(javax.swing.ImageIcon) NamedBean(jmri.NamedBean) JButton(javax.swing.JButton) InstanceManager(jmri.InstanceManager) GuiLafPreferencesManager(apps.gui.GuiLafPreferencesManager) Manager(jmri.Manager) JTextField(javax.swing.JTextField) Image(java.awt.Image) BufferedImage(java.awt.image.BufferedImage) BufferedImage(java.awt.image.BufferedImage) AbstractCellEditor(javax.swing.AbstractCellEditor) TableCellEditor(javax.swing.table.TableCellEditor) TableCellRenderer(javax.swing.table.TableCellRenderer) MouseEvent(java.awt.event.MouseEvent) JComboBox(javax.swing.JComboBox) Reporter(jmri.Reporter) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) IOException(java.io.IOException) JTable(javax.swing.JTable) Block(jmri.Block) File(java.io.File) Sensor(jmri.Sensor)

Example 70 with MouseAdapter

use of java.awt.event.MouseAdapter in project JMRI by JMRI.

the class TableFrames method makeBlockFrame.

/*
     * ********************* BlockFrame *****************************
     */
protected JInternalFrame makeBlockFrame() {
    JInternalFrame frame = new JInternalFrame(Bundle.getMessage("TitleBlockTable"), true, false, false, true);
    _oBlockModel = new OBlockTableModel(this);
    _oBlockTable = new JTable(_oBlockModel);
    TableRowSorter<OBlockTableModel> sorter = new TableRowSorter<>(_oBlockModel);
    sorter.setComparator(OBlockTableModel.SYSNAMECOL, new jmri.util.SystemNameComparator());
    _oBlockTable.setRowSorter(sorter);
    _oBlockTable.setTransferHandler(new jmri.util.DnDTableImportExportHandler(new int[] { OBlockTableModel.EDIT_COL, OBlockTableModel.DELETE_COL, OBlockTableModel.REPORT_CURRENTCOL, OBlockTableModel.SPEEDCOL, OBlockTableModel.PERMISSIONCOL, OBlockTableModel.UNITSCOL }));
    _oBlockTable.setDragEnabled(true);
    // Use XTableColumnModel so we can control which columns are visible
    XTableColumnModel tcm = new XTableColumnModel();
    _oBlockTable.setColumnModel(tcm);
    _oBlockTable.getTableHeader().setReorderingAllowed(true);
    _oBlockTable.createDefaultColumnsFromModel();
    _oBlockModel.addHeaderListener(_oBlockTable);
    _oBlockTable.setDefaultEditor(JComboBox.class, new jmri.jmrit.symbolicprog.ValueEditor());
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.EDIT_COL).setCellEditor(new ButtonEditor(new JButton()));
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.EDIT_COL).setCellRenderer(new ButtonRenderer());
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.DELETE_COL).setCellEditor(new ButtonEditor(new JButton()));
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.DELETE_COL).setCellRenderer(new ButtonRenderer());
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.UNITSCOL).setCellRenderer(new MyBooleanRenderer(Bundle.getMessage("cm"), Bundle.getMessage("in")));
    JComboBox<String> box = new JComboBox<String>(OBlockTableModel.curveOptions);
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.CURVECOL).setCellEditor(new DefaultCellEditor(box));
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.REPORT_CURRENTCOL).setCellRenderer(new MyBooleanRenderer(Bundle.getMessage("Current"), Bundle.getMessage("Last")));
    box = new JComboBox<String>(jmri.InstanceManager.getDefault(SignalSpeedMap.class).getValidSpeedNames());
    box.addItem("");
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.SPEEDCOL).setCellEditor(new DefaultCellEditor(box));
    _oBlockTable.getColumnModel().getColumn(OBlockTableModel.PERMISSIONCOL).setCellRenderer(new MyBooleanRenderer(Bundle.getMessage("Permissive"), Bundle.getMessage("Absolute")));
    _oBlockTable.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent me) {
            showPopup(me);
        }

        @Override
        public void mouseReleased(MouseEvent me) {
            showPopup(me);
        }
    });
    for (int i = 0; i < _oBlockModel.getColumnCount(); i++) {
        int width = _oBlockModel.getPreferredWidth(i);
        _oBlockTable.getColumnModel().getColumn(i).setPreferredWidth(width);
    }
    _oBlockTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    ROW_HEIGHT = _oBlockTable.getRowHeight();
    int tableWidth = _desktop.getPreferredSize().width;
    _oBlockTable.setPreferredScrollableViewportSize(new java.awt.Dimension(tableWidth, ROW_HEIGHT * 10));
    _blockTablePane = new JScrollPane(_oBlockTable);
    tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.REPORTERCOL), false);
    tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.REPORT_CURRENTCOL), false);
    tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.PERMISSIONCOL), false);
    //        tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.SPEEDCOL), false);
    //        tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.ERR_SENSORCOL), false);
    tcm.setColumnVisible(tcm.getColumnByModelIndex(OBlockTableModel.CURVECOL), false);
    JPanel contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout(5, 5));
    JLabel prompt = new JLabel(Bundle.getMessage("AddBlockPrompt"));
    contentPane.add(prompt, BorderLayout.NORTH);
    contentPane.add(_blockTablePane, BorderLayout.CENTER);
    frame.setContentPane(contentPane);
    frame.pack();
    return frame;
}
Also used : JPanel(javax.swing.JPanel) ButtonEditor(jmri.util.table.ButtonEditor) JButton(javax.swing.JButton) SignalSpeedMap(jmri.implementation.SignalSpeedMap) BorderLayout(java.awt.BorderLayout) TableRowSorter(javax.swing.table.TableRowSorter) JScrollPane(javax.swing.JScrollPane) MouseEvent(java.awt.event.MouseEvent) JComboBox(javax.swing.JComboBox) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) XTableColumnModel(jmri.util.swing.XTableColumnModel) Point(java.awt.Point) DefaultCellEditor(javax.swing.DefaultCellEditor) Dimension(java.awt.Dimension) JTable(javax.swing.JTable) JInternalFrame(javax.swing.JInternalFrame) ButtonRenderer(jmri.util.table.ButtonRenderer)

Aggregations

MouseAdapter (java.awt.event.MouseAdapter)202 MouseEvent (java.awt.event.MouseEvent)199 JLabel (javax.swing.JLabel)52 JPanel (javax.swing.JPanel)48 ActionEvent (java.awt.event.ActionEvent)36 JScrollPane (javax.swing.JScrollPane)36 BorderLayout (java.awt.BorderLayout)35 Dimension (java.awt.Dimension)34 JButton (javax.swing.JButton)33 ActionListener (java.awt.event.ActionListener)32 Insets (java.awt.Insets)24 GridBagConstraints (java.awt.GridBagConstraints)20 KeyEvent (java.awt.event.KeyEvent)20 KeyAdapter (java.awt.event.KeyAdapter)19 JTextField (javax.swing.JTextField)16 ListSelectionEvent (javax.swing.event.ListSelectionEvent)16 Component (java.awt.Component)15 Point (java.awt.Point)15 JTable (javax.swing.JTable)15 ListSelectionListener (javax.swing.event.ListSelectionListener)15