Search in sources :

Example 91 with TableCellRenderer

use of javax.swing.table.TableCellRenderer in project jmeter by apache.

the class UserParametersGui method getMaximalRequiredColumnWidth.

/**
     * Compute max width between width of the largest column at columnIndex and headerWidth
     * @param columnIndex Column index
     * @param headerWidth Header width based on Font
     */
private int getMaximalRequiredColumnWidth(int columnIndex, int headerWidth) {
    int maxWidth = headerWidth;
    TableColumn column = paramTable.getColumnModel().getColumn(columnIndex);
    TableCellRenderer cellRenderer = column.getCellRenderer();
    if (cellRenderer == null) {
        cellRenderer = new DefaultTableCellRenderer();
    }
    for (int row = 0; row < paramTable.getModel().getRowCount(); row++) {
        Component rendererComponent = cellRenderer.getTableCellRendererComponent(paramTable, paramTable.getModel().getValueAt(row, columnIndex), false, false, row, columnIndex);
        double valueWidth = rendererComponent.getPreferredSize().getWidth();
        maxWidth = (int) Math.max(maxWidth, valueWidth);
    }
    return maxWidth;
}
Also used : TableCellRenderer(javax.swing.table.TableCellRenderer) DefaultTableCellRenderer(javax.swing.table.DefaultTableCellRenderer) Component(java.awt.Component) TableColumn(javax.swing.table.TableColumn) DefaultTableCellRenderer(javax.swing.table.DefaultTableCellRenderer)

Example 92 with TableCellRenderer

use of javax.swing.table.TableCellRenderer in project jabref by JabRef.

the class EntryLinkListEditor method adjustColumnWidth.

public void adjustColumnWidth() {
    for (int column = 0; column < this.getColumnCount(); column++) {
        int width = 0;
        for (int row = 0; row < this.getRowCount(); row++) {
            TableCellRenderer renderer = this.getCellRenderer(row, column);
            Component comp = this.prepareRenderer(renderer, row, column);
            width = Math.max(comp.getPreferredSize().width, width);
        }
        this.columnModel.getColumn(column).setPreferredWidth(width);
    }
}
Also used : TableCellRenderer(javax.swing.table.TableCellRenderer) JComponent(javax.swing.JComponent) Component(java.awt.Component)

Example 93 with TableCellRenderer

use of javax.swing.table.TableCellRenderer in project JMRI by JMRI.

the class TableSorter method setTableHeader.

public void setTableHeader(JTableHeader tableHeader) {
    if (this.tableHeader != null) {
        this.tableHeader.removeMouseListener(mouseListener);
        TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
        if (defaultRenderer instanceof SortableHeaderRenderer) {
            this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
        }
    }
    this.tableHeader = tableHeader;
    if (this.tableHeader != null) {
        this.tableHeader.addMouseListener(mouseListener);
        this.tableHeader.setDefaultRenderer(new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
    }
}
Also used : TableCellRenderer(javax.swing.table.TableCellRenderer)

Example 94 with TableCellRenderer

use of javax.swing.table.TableCellRenderer in project jdk8u_jdk by JetBrains.

the class bug6711682 method createAndShowGUI.

private static void createAndShowGUI() {
    editorCb = new JCheckBox();
    rendererCb = new JCheckBox();
    JFrame f = new JFrame("Table with CheckBox");
    Container p = f.getContentPane();
    p.setLayout(new BorderLayout());
    table = new JTable(new Object[][] { { false }, { false }, { false } }, new Object[] { "CheckBox" });
    TableCellEditor editor = new TableCellEditor() {

        int editedRow;

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            this.editedRow = row;
            editorCb.setSelected(Boolean.TRUE.equals(value));
            editorCb.setBackground(UIManager.getColor("Table.selectionBackground"));
            return editorCb;
        }

        public void addCellEditorListener(CellEditorListener l) {
        }

        public void cancelCellEditing() {
        }

        public Object getCellEditorValue() {
            return editorCb.isSelected();
        }

        public boolean isCellEditable(EventObject anEvent) {
            return true;
        }

        public void removeCellEditorListener(CellEditorListener l) {
        }

        public boolean shouldSelectCell(EventObject anEvent) {
            return true;
        }

        public boolean stopCellEditing() {
            table.getModel().setValueAt(editorCb.isSelected(), editedRow, 0);
            return true;
        }
    };
    table.getColumnModel().getColumn(0).setCellEditor(editor);
    TableCellRenderer renderer = new TableCellRenderer() {

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            rendererCb.setSelected(Boolean.TRUE.equals(value));
            return rendererCb;
        }
    };
    table.getColumnModel().getColumn(0).setCellRenderer(renderer);
    p.add(table, BorderLayout.CENTER);
    f.pack();
    f.setVisible(true);
}
Also used : TableCellRenderer(javax.swing.table.TableCellRenderer) EventObject(java.util.EventObject) CellEditorListener(javax.swing.event.CellEditorListener) TableCellEditor(javax.swing.table.TableCellEditor) EventObject(java.util.EventObject)

Example 95 with TableCellRenderer

use of javax.swing.table.TableCellRenderer in project JMRI by JMRI.

the class EcosLocoTableAction method createModel.

@Override
protected void createModel() {
    m = new BeanTableDataModel() {

        //We have to set a manager first off, but this gets replaced.
        @Override
        protected EcosLocoAddressManager getManager() {
            return locoManager;
        }

        protected String getRosterAttribute() {
            return rosterAttribute;
        }

        @Override
        public String getValue(String s) {
            return "Set";
        }

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

        @Override
        public void clickOn(jmri.NamedBean t) {
        }

        @Override
        protected synchronized void updateNameList() {
            // first, remove listeners from the individual objects
            if (ecosObjectIdList != null) {
                for (int i = 0; i < ecosObjectIdList.size(); i++) {
                    // if object has been deleted, it's not here; ignore it
                    jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(i));
                    if (b != null) {
                        b.removePropertyChangeListener(this);
                    }
                }
            }
            ecosObjectIdList = getManager().getEcosObjectList();
            // and add them back in
            for (int i = 0; i < ecosObjectIdList.size(); i++) {
                getByEcosObject(ecosObjectIdList.get(i)).addPropertyChangeListener(this);
            }
        }

        @Override
        public void propertyChange(java.beans.PropertyChangeEvent e) {
            updateNameList();
            if (e.getPropertyName().equals("length")) {
                // a new jmri.jmrix.ecos.EcosLocoAddressManager is available in the manager
                updateNameList();
                fireTableDataChanged();
            } else if (matchPropertyName(e)) {
                // a value changed.  Find it, to avoid complete redraw
                String object = ((jmri.jmrix.ecos.EcosLocoAddress) e.getSource()).getEcosObject();
                // since we can add columns, the entire row is marked as updated
                int row = ecosObjectIdList.indexOf(object);
                fireTableRowsUpdated(row, row);
            }
        }

        @Override
        public int getColumnCount() {
            return STOP + 1;
        }

        @Override
        public void setValueAt(Object value, int row, int col) {
            if (col == COMMENTCOL) {
                RosterEntry re;
                String ecosObjectNo = ecosObjectIdList.get(row);
                if (value == null) {
                    return;
                } else if (value instanceof RosterEntry) {
                    re = (RosterEntry) value;
                    if ((re.getAttribute(getRosterAttribute()) != null && !re.getAttribute(getRosterAttribute()).equals(""))) {
                        JOptionPane.showMessageDialog(f, ecosObjectNo + " This roster entry already has an ECOS loco assigned to it ");
                        log.error(ecosObjectNo + " This roster entry already has an ECOS loco assigned to it ");
                        return;
                    }
                    String oldRoster = getByEcosObject(ecosObjectNo).getRosterId();
                    RosterEntry oldre;
                    if (oldRoster != null) {
                        oldre = Roster.getDefault().getEntryForId(oldRoster);
                        if (oldre != null) {
                            oldre.deleteAttribute(getRosterAttribute());
                        }
                    }
                    re.putAttribute(getRosterAttribute(), ecosObjectNo);
                    getByEcosObject(ecosObjectNo).setRosterId(re.getId());
                    re.updateFile();
                } else if (value instanceof String) {
                    List<RosterEntry> r = Roster.getDefault().getEntriesWithAttributeKeyValue(getRosterAttribute(), ecosObjectNo);
                    if (r.isEmpty()) {
                        r.get(0).deleteAttribute(getRosterAttribute());
                        getByEcosObject(ecosObjectNo).setRosterId(null);
                        r.get(0).updateFile();
                    }
                }
                Roster.getDefault().writeRoster();
            } else if (col == ADDTOROSTERCOL) {
                addToRoster(row, col);
            } else if (col == STOP) {
                stopLoco(row, col);
            } else if (col == DELETECOL) {
                // button fired, delete Bean
                deleteLoco(row, col);
            } else if (col == USERNAMECOL) {
                jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
                EcosMessage m = new EcosMessage("request(" + b.getEcosObject() + ", control, force)");
                adaptermemo.getTrafficController().sendEcosMessage(m, null);
                m = new EcosMessage("set(" + b.getEcosObject() + ", name[\"" + (String) value + "\"])");
                adaptermemo.getTrafficController().sendEcosMessage(m, null);
                m = new EcosMessage("release(" + b.getEcosObject() + ", control)");
                adaptermemo.getTrafficController().sendEcosMessage(m, null);
            }
        }

        /**
             * {@inheritDoc }
             */
        @Override
        @Deprecated
        public JTable makeJTable(TableSorter sorter) {
            return this.makeJTable((TableModel) sorter);
        }

        @Override
        public JTable makeJTable(@Nonnull String name, @Nonnull TableModel model, @Nullable RowSorter sorter) {
            JTable table = this.makeJTable(model);
            table.setName(name);
            table.setRowSorter(sorter);
            return table;
        }

        private JTable makeJTable(@Nonnull TableModel model) {
            JTable table = new JTable(model) {

                @Override
                public TableCellRenderer getCellRenderer(int row, int column) {
                    if (column == COMMENTCOL) {
                        return getRenderer(row);
                    } else {
                        return super.getCellRenderer(row, column);
                    }
                }

                @Override
                public TableCellEditor getCellEditor(int row, int column) {
                    if (column == COMMENTCOL) {
                        return getEditor(row);
                    } else {
                        return super.getCellEditor(row, column);
                    }
                }

                TableCellRenderer getRenderer(int row) {
                    TableCellRenderer retval = rendererMap.get(ecosObjectIdList.get(row));
                    if (retval == null) {
                        jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
                        RosterEntry re = null;
                        if (b != null) {
                            re = Roster.getDefault().getEntryForId(b.getRosterId());
                        }
                        retval = new RosterBoxRenderer(re);
                        rendererMap.put(ecosObjectIdList.get(row), retval);
                    }
                    return retval;
                }

                Hashtable<Object, TableCellRenderer> rendererMap = new Hashtable<>();

                TableCellEditor getEditor(int row) {
                    TableCellEditor retval = editorMap.get(ecosObjectIdList.get(row));
                    if (retval == null) {
                        jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
                        RosterEntry re = null;
                        if (b != null) {
                            re = Roster.getDefault().getEntryForId(b.getRosterId());
                        }
                        GlobalRosterEntryComboBox cb = new GlobalRosterEntryComboBox();
                        cb.setNonSelectedItem(" ");
                        if (re == null) {
                            cb.setSelectedIndex(0);
                        } else {
                            cb.setSelectedItem(re);
                        }
                        // create a new one with right aspects
                        retval = new RosterComboBoxEditor(cb);
                        editorMap.put(ecosObjectIdList.get(row), retval);
                    }
                    return retval;
                }

                Hashtable<Object, TableCellEditor> editorMap = new Hashtable<>();
            };
            table.getTableHeader().setReorderingAllowed(true);
            table.setColumnModel(new XTableColumnModel());
            table.createDefaultColumnsFromModel();
            addMouseListenerToHeader(table);
            return table;
        }

        /**
             * Is this property event announcing a change this table should
             * display?
             * <P>
             * Note that events will come both from the
             * jmri.jmrix.ecos.EcosLocoAddressManagers and also from the manager
             */
        @Override
        protected boolean matchPropertyName(java.beans.PropertyChangeEvent e) {
            if (!showLocoMonitor && (e.getPropertyName().equals("Speed") || e.getPropertyName().equals("Direction"))) {
                return false;
            }
            return true;
        }

        @Override
        public String getColumnName(int col) {
            switch(col) {
                case SYSNAMECOL:
                    return "ECoS Object Id";
                case USERNAMECOL:
                    return "ECoS Descritpion";
                case VALUECOL:
                    return "ECoS Address";
                case COMMENTCOL:
                    return "JMRI Roster Id";
                case DELETECOL:
                    return "Delete";
                case PROTOCOL:
                    return "ECOS Protocol";
                case ADDTOROSTERCOL:
                    return "Add to Roster";
                case SPEEDDIR:
                    return "Speed Direction";
                case STOP:
                    return "Stop";
                default:
                    return "unknown";
            }
        }

        @Override
        public Class<?> getColumnClass(int col) {
            switch(col) {
                case SYSNAMECOL:
                case USERNAMECOL:
                case VALUECOL:
                case PROTOCOL:
                case SPEEDDIR:
                    return String.class;
                case ADDTOROSTERCOL:
                case DELETECOL:
                case STOP:
                    return JButton.class;
                case COMMENTCOL:
                    return JComboBox.class;
                default:
                    return null;
            }
        }

        @Override
        public boolean isCellEditable(int row, int col) {
            switch(col) {
                case COMMENTCOL:
                    return true;
                case ADDTOROSTERCOL:
                    jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
                    if (b.getRosterId() == null || b.getRosterId().equals("")) {
                        return true;
                    } else {
                        return false;
                    }
                case USERNAMECOL:
                case DELETECOL:
                case STOP:
                    return true;
                default:
                    return false;
            }
        }

        @Override
        public int getPreferredWidth(int col) {
            switch(col) {
                case SYSNAMECOL:
                    return new JTextField(5).getPreferredSize().width;
                case COMMENTCOL:
                    return new JTextField(20).getPreferredSize().width;
                case USERNAMECOL:
                    return new JTextField(20).getPreferredSize().width;
                case // not actually used due to the configureTable, setColumnToHoldButton, configureButton
                ADDTOROSTERCOL:
                    return new JTextField(12).getPreferredSize().width;
                case // not actually used due to the configureTable, setColumnToHoldButton, configureButton
                STOP:
                    return new JTextField(6).getPreferredSize().width;
                case VALUECOL:
                    return new JTextField(5).getPreferredSize().width;
                case SPEEDDIR:
                    return new JTextField(10).getPreferredSize().width;
                case PROTOCOL:
                    return new JTextField(5).getPreferredSize().width;
                default:
                    //log.warn("Unexpected column in getPreferredWidth: "+col);
                    return super.getPreferredWidth(col);
            }
        }

        @Override
        public void configureTable(JTable tbl) {
            table = tbl;
            setColumnToHoldButton(table, ADDTOROSTERCOL, new JButton("Add to Roster"));
            setColumnToHoldButton(table, STOP, stopButton());
            super.configureTable(table);
            XTableColumnModel columnModel = (XTableColumnModel) table.getColumnModel();
            TableColumn column = columnModel.getColumnByModelIndex(SPEEDDIR);
            columnModel.setColumnVisible(column, false);
            column = columnModel.getColumnByModelIndex(STOP);
            columnModel.setColumnVisible(column, false);
        }

        @Override
        public NamedBean getBySystemName(String name) {
            return null;
        }

        @Override
        public NamedBean getByUserName(String name) {
            return null;
        }

        @Override
        public synchronized void dispose() {
            showLocoMonitor = false;
            getManager().removePropertyChangeListener(this);
            if (ecosObjectIdList != null) {
                for (int i = 0; i < ecosObjectIdList.size(); i++) {
                    jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(i));
                    if (b != null) {
                        b.removePropertyChangeListener(this);
                    }
                }
            }
        }

        protected void deleteLoco(final int row, int col) {
            if (row >= ecosObjectIdList.size()) {
                log.debug("row is greater than list size");
                return;
            }
            jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
            final JDialog dialog = new JDialog();
            dialog.setTitle("Remove Loco From ECOS");
            dialog.setLocation(300, 200);
            dialog.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
            JPanel container = new JPanel();
            container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
            container.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            JLabel question = new JLabel("Are you sure that you want to remove loco " + b.getEcosDescription() + " from the ECOS ?");
            question.setAlignmentX(Component.CENTER_ALIGNMENT);
            container.add(question);
            JButton yesButton = new JButton("Yes");
            JButton noButton = new JButton("No");
            JPanel button = new JPanel();
            button.setAlignmentX(Component.CENTER_ALIGNMENT);
            button.add(yesButton);
            button.add(noButton);
            container.add(button);
            noButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    dialog.dispose();
                }
            });
            yesButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
                    removeObjectFromEcos.removeObjectFromEcos(ecosObjectIdList.get(row), adaptermemo.getTrafficController());
                    dialog.dispose();
                }
            });
            container.setAlignmentX(Component.CENTER_ALIGNMENT);
            container.setAlignmentY(Component.CENTER_ALIGNMENT);
            dialog.getContentPane().add(container);
            dialog.pack();
            dialog.setModal(true);
            dialog.setVisible(true);
        }

        @Override
        public int getRowCount() {
            return ecosObjectIdList.size();
        }

        @Override
        public Object getValueAt(int row, int col) {
            if (row >= ecosObjectIdList.size()) {
                log.debug("row is greater than list size");
                return null;
            }
            jmri.jmrix.ecos.EcosLocoAddress b;
            switch(col) {
                case SYSNAMECOL:
                    return ecosObjectIdList.get(row);
                case // return user name
                USERNAMECOL:
                    // sometimes, the TableSorter invokes this on rows that no longer exist, so we check
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    return (b != null) ? b.getEcosDescription() : null;
                case //
                VALUECOL:
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    return (b != null) ? b.getNumber() : null;
                case COMMENTCOL:
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    RosterEntry re = null;
                    if (b != null) {
                        re = Roster.getDefault().getEntryForId(b.getRosterId());
                    }
                    GlobalRosterEntryComboBox cb = (GlobalRosterEntryComboBox) table.getCellRenderer(row, col);
                    if (re == null) {
                        cb.setSelectedIndex(0);
                    } else {
                        cb.setSelectedItem(re);
                    }
                    return re;
                case PROTOCOL:
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    return (b != null) ? b.getECOSProtocol() : null;
                case //
                ADDTOROSTERCOL:
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    if (b.getRosterId() == null || b.getRosterId().equals("")) {
                        return "Add To Roster";
                    } else {
                        return " ";
                    }
                case STOP:
                    return "Stop";
                case SPEEDDIR:
                    b = getByEcosObject(ecosObjectIdList.get(row));
                    return (b != null) ? (b.getDirectionAsString() + " : " + b.getSpeed()) : null;
                case //
                DELETECOL:
                    return Bundle.getMessage("ButtonDelete");
                default:
                    //log.error("internal state inconsistent with table requst for "+row+" "+col);
                    return null;
            }
        }

        @Override
        protected String getBeanType() {
            return "Ecos Loco";
        }

        @Override
        protected void showPopup(MouseEvent e) {
        }
    };
}
Also used : TableSorter(jmri.util.com.sun.TableSorter) JPanel(javax.swing.JPanel) EcosMessage(jmri.jmrix.ecos.EcosMessage) NamedBean(jmri.NamedBean) ActionEvent(java.awt.event.ActionEvent) BoxLayout(javax.swing.BoxLayout) JButton(javax.swing.JButton) JTextField(javax.swing.JTextField) NamedBean(jmri.NamedBean) List(java.util.List) GlobalRosterEntryComboBox(jmri.jmrit.roster.swing.GlobalRosterEntryComboBox) TableCellEditor(javax.swing.table.TableCellEditor) TableCellRenderer(javax.swing.table.TableCellRenderer) RowSorter(javax.swing.RowSorter) TableRowSorter(javax.swing.table.TableRowSorter) MouseEvent(java.awt.event.MouseEvent) Hashtable(java.util.Hashtable) JLabel(javax.swing.JLabel) XTableColumnModel(jmri.util.swing.XTableColumnModel) TableColumn(javax.swing.table.TableColumn) EcosLocoAddressManager(jmri.jmrix.ecos.EcosLocoAddressManager) EcosLocoAddress(jmri.jmrix.ecos.EcosLocoAddress) ActionListener(java.awt.event.ActionListener) JTable(javax.swing.JTable) BeanTableDataModel(jmri.jmrit.beantable.BeanTableDataModel) RosterEntry(jmri.jmrit.roster.RosterEntry) TableModel(javax.swing.table.TableModel) JDialog(javax.swing.JDialog) RemoveObjectFromEcos(jmri.jmrix.ecos.utilities.RemoveObjectFromEcos)

Aggregations

TableCellRenderer (javax.swing.table.TableCellRenderer)122 TableColumn (javax.swing.table.TableColumn)50 Component (java.awt.Component)47 DefaultTableCellRenderer (javax.swing.table.DefaultTableCellRenderer)24 JComponent (javax.swing.JComponent)20 JTable (javax.swing.JTable)20 TableColumnModel (javax.swing.table.TableColumnModel)18 JLabel (javax.swing.JLabel)17 JTableHeader (javax.swing.table.JTableHeader)17 MouseEvent (java.awt.event.MouseEvent)11 ColumnInfo (com.intellij.util.ui.ColumnInfo)8 ActionEvent (java.awt.event.ActionEvent)8 JButton (javax.swing.JButton)8 DefaultTableColumnModel (javax.swing.table.DefaultTableColumnModel)8 MouseAdapter (java.awt.event.MouseAdapter)7 TableCellEditor (javax.swing.table.TableCellEditor)7 TableModel (javax.swing.table.TableModel)7 ActionListener (java.awt.event.ActionListener)6 List (java.util.List)6 JPanel (javax.swing.JPanel)6