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);
}
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);
}
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;
}
}
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;
}
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;
}
Aggregations