Search in sources :

Example 56 with JTable

use of javax.swing.JTable in project JMRI by JMRI.

the class TransitTableAction method addEditPressed.

void addEditPressed() {
    pref = jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class);
    if (addFrame == null) {
        addFrame = new JmriJFrame(Bundle.getMessage("TitleAddTransit"));
        addFrame.addHelpMenu("package.jmri.jmrit.beantable.TransitAddEdit", true);
        addFrame.getContentPane().setLayout(new BoxLayout(addFrame.getContentPane(), BoxLayout.Y_AXIS));
        JPanel p;
        p = new JPanel();
        p.setLayout(new FlowLayout());
        p.add(sysNameLabel);
        p.add(sysNameFixed);
        p.add(sysName);
        sysName.setToolTipText(rbx.getString("TransitSystemNameHint"));
        p.add(new JLabel("     "));
        p.add(userNameLabel);
        p.add(userName);
        userName.setToolTipText(rbx.getString("TransitUserNameHint"));
        addFrame.getContentPane().add(p);
        p = new JPanel();
        ((FlowLayout) p.getLayout()).setVgap(0);
        p.add(_autoSystemName);
        _autoSystemName.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                autoSystemName();
            }
        });
        if (pref.getSimplePreferenceState(systemNameAuto)) {
            _autoSystemName.setSelected(true);
        }
        addFrame.getContentPane().add(p);
        addFrame.getContentPane().add(new JSeparator());
        JPanel p1 = new JPanel();
        p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
        JPanel p11 = new JPanel();
        p11.setLayout(new FlowLayout());
        p11.add(new JLabel(rbx.getString("SectionTableMessage")));
        p1.add(p11);
        JPanel p12 = new JPanel();
        // initialize table of sections
        sectionTableModel = new SectionTableModel();
        JTable sectionTable = new JTable(sectionTableModel);
        sectionTable.setRowSelectionAllowed(false);
        sectionTable.setPreferredScrollableViewportSize(new java.awt.Dimension(650, 150));
        TableColumnModel sectionColumnModel = sectionTable.getColumnModel();
        TableColumn sequenceColumn = sectionColumnModel.getColumn(SectionTableModel.SEQUENCE_COLUMN);
        sequenceColumn.setResizable(true);
        sequenceColumn.setMinWidth(50);
        sequenceColumn.setMaxWidth(70);
        TableColumn sectionColumn = sectionColumnModel.getColumn(SectionTableModel.SECTIONNAME_COLUMN);
        sectionColumn.setResizable(true);
        sectionColumn.setMinWidth(150);
        sectionColumn.setMaxWidth(210);
        TableColumn actionColumn = sectionColumnModel.getColumn(SectionTableModel.ACTION_COLUMN);
        // install button renderer and editor
        ButtonRenderer buttonRenderer = new ButtonRenderer();
        sectionTable.setDefaultRenderer(JButton.class, buttonRenderer);
        TableCellEditor buttonEditor = new ButtonEditor(new JButton());
        sectionTable.setDefaultEditor(JButton.class, buttonEditor);
        JButton testButton = new JButton(rbx.getString("AddEditActions"));
        sectionTable.setRowHeight(testButton.getPreferredSize().height);
        actionColumn.setResizable(false);
        actionColumn.setMinWidth(testButton.getPreferredSize().width);
        TableColumn alternateColumn = sectionColumnModel.getColumn(SectionTableModel.ALTERNATE_COLUMN);
        alternateColumn.setResizable(true);
        alternateColumn.setMinWidth(140);
        alternateColumn.setMaxWidth(170);
        JScrollPane sectionTableScrollPane = new JScrollPane(sectionTable);
        p12.add(sectionTableScrollPane, BorderLayout.CENTER);
        p1.add(p12);
        JPanel p13 = new JPanel();
        p13.setLayout(new FlowLayout());
        p13.add(primarySectionBox);
        primarySectionBox.setToolTipText(rbx.getString("PrimarySectionBoxHint"));
        p13.add(addNextSection = new JButton(rbx.getString("AddPrimaryButton")));
        addNextSection.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                addNextSectionPressed(e);
            }
        });
        addNextSection.setToolTipText(rbx.getString("AddPrimaryButtonHint"));
        p1.add(p13);
        JPanel p14 = new JPanel();
        p14.setLayout(new FlowLayout());
        p14.add(alternateSectionBox);
        alternateSectionBox.setToolTipText(rbx.getString("AlternateSectionBoxHint"));
        p14.add(addAlternateSection = new JButton(rbx.getString("AddAlternateButton")));
        addAlternateSection.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                addAlternateSectionPressed(e);
            }
        });
        addAlternateSection.setToolTipText(rbx.getString("AddAlternateButtonHint"));
        p14.add(new JLabel("        "));
        p14.add(insertAtBeginningBox);
        insertAtBeginningBox.setToolTipText(rbx.getString("InsertAtBeginningBoxHint"));
        p14.add(insertAtBeginning = new JButton(rbx.getString("InsertAtBeginningButton")));
        insertAtBeginning.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                insertAtBeginningPressed(e);
            }
        });
        insertAtBeginning.setToolTipText(rbx.getString("InsertAtBeginningButtonHint"));
        p1.add(p14);
        p1.add(new JSeparator());
        JPanel p15 = new JPanel();
        p15.setLayout(new FlowLayout());
        p15.add(deleteSections = new JButton(rbx.getString("DeleteSectionsButton")));
        deleteSections.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                deleteAllSections(e);
            }
        });
        deleteSections.setToolTipText(rbx.getString("DeleteSectionsButtonHint"));
        p15.add(new JLabel("     "));
        p15.add(removeLastSection = new JButton(rbx.getString("RemoveLastButton")));
        removeLastSection.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                removeLastSectionPressed(e);
            }
        });
        removeLastSection.setToolTipText(rbx.getString("RemoveLastButtonHint"));
        p15.add(new JLabel("     "));
        p15.add(removeFirstSection = new JButton(rbx.getString("RemoveFirstButton")));
        removeFirstSection.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                removeFirstSectionPressed(e);
            }
        });
        removeFirstSection.setToolTipText(rbx.getString("RemoveFirstButtonHint"));
        p1.add(p15);
        JPanel p16 = new JPanel();
        p16.setLayout(new FlowLayout());
        p16.add(seqNumLabel);
        p16.add(new JLabel("   "));
        p16.add(seqNum);
        seqNum.setToolTipText(rbx.getString("SeqNumHint"));
        p1.add(p16);
        JPanel p17 = new JPanel();
        p17.setLayout(new FlowLayout());
        p17.add(replacePrimaryForSequence = new JButton(rbx.getString("ReplacePrimaryForSeqButton")));
        replacePrimaryForSequence.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                replacePrimaryForSeqPressed(e);
            }
        });
        replacePrimaryForSequence.setToolTipText(rbx.getString("ReplacePrimaryForSeqButtonHint"));
        p17.add(new JLabel("     "));
        p17.add(deleteAlternateForSequence = new JButton(rbx.getString("DeleteAlternateForSeqButton")));
        deleteAlternateForSequence.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                deleteAlternateForSeqPressed(e);
            }
        });
        deleteAlternateForSequence.setToolTipText(rbx.getString("DeleteAlternateForSeqButtonHint"));
        p17.add(new JLabel("     "));
        p17.add(addAlternateForSequence = new JButton(rbx.getString("AddAlternateForSeqButton")));
        addAlternateForSequence.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                addAlternateForSeqPressed(e);
            }
        });
        addAlternateForSequence.setToolTipText(rbx.getString("AddAlternateForSeqButtonHint"));
        p1.add(p17);
        addFrame.getContentPane().add(p1);
        // set up bottom buttons
        addFrame.getContentPane().add(new JSeparator());
        JButton cancel = null;
        JPanel pb = new JPanel();
        pb.setLayout(new FlowLayout());
        pb.add(cancel = new JButton(Bundle.getMessage("ButtonCancel")));
        cancel.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                cancelPressed(e);
            }
        });
        cancel.setToolTipText(rbx.getString("CancelButtonHint"));
        pb.add(create = new JButton(Bundle.getMessage("ButtonCreate")));
        create.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                createPressed(e);
            }
        });
        create.setToolTipText(rbx.getString("SectionCreateButtonHint"));
        pb.add(update = new JButton(Bundle.getMessage("ButtonUpdate")));
        update.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                updatePressed(e);
            }
        });
        update.setToolTipText(rbx.getString("SectionUpdateButtonHint"));
        addFrame.getContentPane().add(pb);
    }
    if (editMode) {
        // setup for edit window
        _autoSystemName.setVisible(false);
        sysNameLabel.setEnabled(true);
        create.setVisible(false);
        update.setVisible(true);
        sysName.setVisible(false);
        sysNameFixed.setVisible(true);
        initializeEditInformation();
    } else {
        // setup for create window
        _autoSystemName.setVisible(true);
        _autoSystemName.setEnabled(true);
        autoSystemName();
        create.setVisible(true);
        create.setEnabled(true);
        update.setVisible(false);
        sysName.setVisible(true);
        sysNameFixed.setVisible(false);
        if (duplicateMode) {
            // setup with information from previous Transit
            initializeEditInformation();
            sysName.setText(curTransit.getSystemName());
            curTransit = null;
        } else {
            deleteAllSections(null);
        }
    }
    initializeSectionCombos();
    addFrame.pack();
    addFrame.setVisible(true);
}
Also used : JScrollPane(javax.swing.JScrollPane) JPanel(javax.swing.JPanel) FlowLayout(java.awt.FlowLayout) ButtonEditor(jmri.util.table.ButtonEditor) ActionEvent(java.awt.event.ActionEvent) BoxLayout(javax.swing.BoxLayout) JButton(javax.swing.JButton) JLabel(javax.swing.JLabel) TableColumnModel(javax.swing.table.TableColumnModel) TableColumn(javax.swing.table.TableColumn) JSeparator(javax.swing.JSeparator) ActionListener(java.awt.event.ActionListener) JmriJFrame(jmri.util.JmriJFrame) JTable(javax.swing.JTable) TableCellEditor(javax.swing.table.TableCellEditor) ButtonRenderer(jmri.util.table.ButtonRenderer)

Example 57 with JTable

use of javax.swing.JTable in project JMRI by JMRI.

the class CircuitBuilder method editCircuitDialog.

/**
     * Edit existing OBlock Used by edit to set up _editCircuitFrame Sets
     * _currentBlock to chosen OBlock or null if none selected
     */
private void editCircuitDialog(String title) {
    _dialog = new JDialog(_editor, Bundle.getMessage(title), true);
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout(10, 10));
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
    mainPanel.add(Box.createVerticalStrut(STRUT_SIZE));
    JPanel p = new JPanel();
    p.add(new JLabel(Bundle.getMessage("selectOBlock")));
    mainPanel.add(p);
    _oblockModel = PickListModel.oBlockPickModelInstance();
    JTable table = _oblockModel.makePickTable();
    mainPanel.add(new JScrollPane(table));
    mainPanel.add(Box.createVerticalStrut(STRUT_SIZE));
    mainPanel.add(makeDoneButtonPanel(false));
    panel.add(mainPanel);
    _dialog.getContentPane().add(panel);
    _dialog.setLocation(_editor.getLocation().x + 100, _editor.getLocation().y + 100);
    _dialog.pack();
    _dialog.setVisible(true);
}
Also used : JScrollPane(javax.swing.JScrollPane) JPanel(javax.swing.JPanel) BorderLayout(java.awt.BorderLayout) BoxLayout(javax.swing.BoxLayout) JTable(javax.swing.JTable) JLabel(javax.swing.JLabel) JDialog(javax.swing.JDialog)

Example 58 with JTable

use of javax.swing.JTable in project JMRI by JMRI.

the class DnDTableExportHandler method createTransferable.

@Override
public Transferable createTransferable(JComponent c) {
    JTable table = (JTable) c;
    int col = table.getSelectedColumn();
    int row = table.getSelectedRow();
    if (col < 0 || row < 0) {
        return null;
    }
    row = table.convertRowIndexToModel(row);
    col = table.convertColumnIndexToModel(col);
    if (log.isDebugEnabled()) {
        log.debug("TransferHandler.createTransferable: from (" + row + ", " + col + ") for \"" + table.getModel().getValueAt(row, col) + "\"");
    }
    Object obj = table.getModel().getValueAt(row, col);
    if (obj instanceof String) {
        return new StringSelection((String) obj);
    } else if (obj != null) {
        return new StringSelection(obj.getClass().getName());
    } else {
        return null;
    }
}
Also used : JTable(javax.swing.JTable) StringSelection(java.awt.datatransfer.StringSelection)

Example 59 with JTable

use of javax.swing.JTable in project JMRI by JMRI.

the class DnDTableImportExportHandler method importData.

@Override
public boolean importData(TransferHandler.TransferSupport support) {
    if (!canImport(support)) {
        return false;
    }
    if (log.isDebugEnabled()) {
        JTable.DropLocation loc = (JTable.DropLocation) support.getDropLocation();
        log.debug("importData: isDrop= {} location= {} row= {} col= {}", support.isDrop(), loc.getDropPoint(), loc.getRow(), loc.getColumn());
    }
    if (!support.isDrop()) {
        return false;
    }
    TransferHandler.DropLocation loc = support.getDropLocation();
    if (!(loc instanceof JTable.DropLocation)) {
        return false;
    }
    Component comp = support.getComponent();
    if (!(comp instanceof JTable)) {
        return false;
    }
    JTable.DropLocation location = (JTable.DropLocation) loc;
    JTable table = (JTable) comp;
    int row = location.getRow();
    int col = location.getColumn();
    row = table.convertRowIndexToModel(row);
    col = table.convertColumnIndexToModel(col);
    for (int i = 0; i < _skipColumns.length; i++) {
        if (_skipColumns[i] == col) {
            return false;
        }
    }
    try {
        Transferable trans = support.getTransferable();
        Object obj = trans.getTransferData(DataFlavor.stringFlavor);
        table.getModel().setValueAt(obj, row, col);
        return true;
    } catch (UnsupportedFlavorException ufe) {
        log.warn("DnDStringImportHandler.importData: " + ufe.getMessage());
    } catch (IOException ioe) {
        log.warn("DnDStringImportHandler.importData: " + ioe.getMessage());
    }
    return false;
}
Also used : JTable(javax.swing.JTable) Transferable(java.awt.datatransfer.Transferable) TransferHandler(javax.swing.TransferHandler) IOException(java.io.IOException) Component(java.awt.Component) UnsupportedFlavorException(java.awt.datatransfer.UnsupportedFlavorException)

Example 60 with JTable

use of javax.swing.JTable in project JMRI by JMRI.

the class RosterFrame method createTop.

JComponent createTop() {
    Object selectedRosterGroup = prefsMgr.getProperty(getWindowFrameRef(), SELECTED_ROSTER_GROUP);
    groups = new RosterGroupsPanel((selectedRosterGroup != null) ? selectedRosterGroup.toString() : null);
    groups.setNewWindowMenuAction(this.getNewWindowAction());
    setTitle(groups.getSelectedRosterGroup());
    final JPanel rosters = new JPanel();
    rosters.setLayout(new BorderLayout());
    // set up roster table
    rtable = new RosterTable(true, ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    rtable.setRosterGroup(this.getSelectedRosterGroup());
    rtable.setRosterGroupSource(groups);
    rosters.add(rtable, BorderLayout.CENTER);
    // add selection listener
    rtable.getTable().getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
        JTable table = rtable.getTable();
        if (!e.getValueIsAdjusting()) {
            if (rtable.getSelectedRosterEntries().length == 1 && table.getSelectedRow() >= 0) {
                log.debug("Selected row ", table.getSelectedRow());
                locoSelected(rtable.getModel().getValueAt(table.getRowSorter().convertRowIndexToModel(table.getSelectedRow()), RosterTableModel.IDCOL).toString());
            } else if (rtable.getSelectedRosterEntries().length > 1 || table.getSelectedRow() < 0) {
                locoSelected(null);
            }
        // leave last selected item visible if no selection
        }
    });
    //Set all the sort and width details of the table first.
    String rostertableref = getWindowFrameRef() + ":roster";
    rtable.getTable().setName(rostertableref);
    // Allow only one column to be sorted at a time - 
    // Java allows multiple column sorting, but to effectly persist that, we
    // need to be intelligent about which columns can be meaningfully sorted
    // with other columns; this bypasses the problem by only allowing the
    // last column sorted to affect sorting
    RowSorterUtil.addSingleSortableColumnListener(rtable.getTable().getRowSorter());
    // Reset and then persist the table's ui state
    JTablePersistenceManager tpm = InstanceManager.getNullableDefault(JTablePersistenceManager.class);
    if (tpm != null) {
        tpm.resetState(rtable.getTable());
        tpm.persist(rtable.getTable());
    }
    rtable.getTable().setDragEnabled(true);
    rtable.getTable().setTransferHandler(new TransferHandler() {

        @Override
        public int getSourceActions(JComponent c) {
            return TransferHandler.COPY;
        }

        @Override
        public Transferable createTransferable(JComponent c) {
            JTable table = rtable.getTable();
            ArrayList<String> Ids = new ArrayList<>(table.getSelectedRowCount());
            for (int i = 0; i < table.getSelectedRowCount(); i++) {
                Ids.add(rtable.getModel().getValueAt(table.getRowSorter().convertRowIndexToModel(table.getSelectedRows()[i]), RosterTableModel.IDCOL).toString());
            }
            return new RosterEntrySelection(Ids);
        }

        @Override
        public void exportDone(JComponent c, Transferable t, int action) {
        // nothing to do
        }
    });
    MouseListener rosterMouseListener = new rosterPopupListener();
    rtable.getTable().addMouseListener(rosterMouseListener);
    try {
        clickDelay = ((Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"));
    } catch (RuntimeException e) {
        clickDelay = 500;
        log.debug("Unable to get the double click speed, Using JMRI default of half a second" + e.toString());
    }
    // assemble roster/groups splitpane
    rosterGroupSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, groups, rosters);
    rosterGroupSplitPane.setOneTouchExpandable(true);
    // emphasis rosters
    rosterGroupSplitPane.setResizeWeight(0);
    Object w = prefsMgr.getProperty(getWindowFrameRef(), "rosterGroupPaneDividerLocation");
    if (w != null) {
        groupSplitPaneLocation = (Integer) w;
        rosterGroupSplitPane.setDividerLocation(groupSplitPaneLocation);
    }
    if (!Roster.getDefault().getRosterGroupList().isEmpty()) {
        if (prefsMgr.getSimplePreferenceState(this.getClass().getName() + ".hideGroups")) {
            hideGroupsPane(true);
        }
    } else {
        enableRosterGroupMenuItems(false);
    }
    PropertyChangeListener propertyChangeListener = (PropertyChangeEvent changeEvent) -> {
        JSplitPane sourceSplitPane = (JSplitPane) changeEvent.getSource();
        String propertyName = changeEvent.getPropertyName();
        if (propertyName.equals(JSplitPane.LAST_DIVIDER_LOCATION_PROPERTY)) {
            int current = sourceSplitPane.getDividerLocation();
            hideGroups = current <= 1;
            Integer last = (Integer) changeEvent.getNewValue();
            if (current >= 2) {
                groupSplitPaneLocation = current;
            } else if (last >= 2) {
                groupSplitPaneLocation = last;
            }
        }
    };
    groups.addPropertyChangeListener(SELECTED_ROSTER_GROUP, new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent pce) {
            prefsMgr.setProperty(this.getClass().getName(), SELECTED_ROSTER_GROUP, pce.getNewValue());
            setTitle((String) pce.getNewValue());
        }
    });
    rosterGroupSplitPane.addPropertyChangeListener(propertyChangeListener);
    Roster.getDefault().addPropertyChangeListener((PropertyChangeEvent e) -> {
        if (e.getPropertyName().equals("RosterGroupAdded") && Roster.getDefault().getRosterGroupList().size() == 1) {
            // if the pane is hidden, show it when 1st group is created
            hideGroupsPane(false);
            enableRosterGroupMenuItems(true);
        } else if (!rtable.isVisible() && (e.getPropertyName().equals("saved"))) {
            if (firstHelpLabel != null) {
                firstHelpLabel.setVisible(false);
            }
            rtable.setVisible(true);
            rtable.resetColumnWidths();
        }
    });
    if (Roster.getDefault().numEntries() == 0) {
        try {
            BufferedImage myPicture = ImageIO.read(FileUtil.findURL(("resources/" + Bundle.getMessage("ThrottleFirstUseImage")), FileUtil.Location.INSTALLED));
            //rosters.add(new JLabel(new ImageIcon( myPicture )), BorderLayout.CENTER);
            firstHelpLabel = new JLabel(new ImageIcon(myPicture));
            rtable.setVisible(false);
            rosters.add(firstHelpLabel, BorderLayout.NORTH);
            //tableArea.add(firstHelpLabel);
            rtable.setVisible(false);
        } catch (IOException ex) {
        // handle exception...
        }
    }
    return rosterGroupSplitPane;
}
Also used : RosterEntrySelection(jmri.util.datatransfer.RosterEntrySelection) JPanel(javax.swing.JPanel) ImageIcon(javax.swing.ImageIcon) PropertyChangeListener(java.beans.PropertyChangeListener) ListSelectionEvent(javax.swing.event.ListSelectionEvent) ArrayList(java.util.ArrayList) BufferedImage(java.awt.image.BufferedImage) MouseListener(java.awt.event.MouseListener) BorderLayout(java.awt.BorderLayout) PropertyChangeEvent(java.beans.PropertyChangeEvent) JComponent(javax.swing.JComponent) Transferable(java.awt.datatransfer.Transferable) JLabel(javax.swing.JLabel) IOException(java.io.IOException) JTablePersistenceManager(jmri.swing.JTablePersistenceManager) JTable(javax.swing.JTable) TransferHandler(javax.swing.TransferHandler) JSplitPane(javax.swing.JSplitPane)

Aggregations

JTable (javax.swing.JTable)584 JScrollPane (javax.swing.JScrollPane)282 JPanel (javax.swing.JPanel)217 Dimension (java.awt.Dimension)145 JButton (javax.swing.JButton)139 BorderLayout (java.awt.BorderLayout)133 JLabel (javax.swing.JLabel)129 ActionEvent (java.awt.event.ActionEvent)109 ActionListener (java.awt.event.ActionListener)81 TableColumn (javax.swing.table.TableColumn)79 DefaultTableModel (javax.swing.table.DefaultTableModel)75 Component (java.awt.Component)66 BoxLayout (javax.swing.BoxLayout)66 FlowLayout (java.awt.FlowLayout)58 MouseEvent (java.awt.event.MouseEvent)58 JTextField (javax.swing.JTextField)57 TableColumnModel (javax.swing.table.TableColumnModel)52 GridBagConstraints (java.awt.GridBagConstraints)46 TableCellRenderer (javax.swing.table.TableCellRenderer)43 Test (org.junit.Test)43