use of javax.swing.JTable in project processdash by dtuma.
the class TaskDependencyCellEditor method buildUIComponents.
private void buildUIComponents(Map iconMap) {
// first, create the button we'll use as our cell editor
button = new JButton();
button.setBackground(Color.white);
button.setFont(UIManager.getFont("TextField.font"));
button.setBorderPainted(false);
button.setMargin(new Insets(0, 0, 0, 0));
button.addKeyListener(EventHandler.create(KeyListener.class, button, "doClick"));
button.addActionListener((ActionListener) EventHandler.create(ActionListener.class, this, "buttonClicked"));
// now, create the components we'll show in the dialog.
List components = new LinkedList();
pathLabel = new JLabel("path label");
components.add(pathLabel);
components.add(Box.createRigidArea(new Dimension(5, 5)));
dependencies = new DependencyTableModel();
dependencyTable = new JTable(dependencies);
dependencyTable.setDefaultRenderer(Object.class, new TaskDependencyCellRenderer());
scrollPane = new JScrollPane(dependencyTable);
components.add(scrollPane);
components.add(Box.createRigidArea(new Dimension(5, 5)));
taskTree = new WBSJTable(dependencySource.getTaskTree(), iconMap);
taskTree.setEditingEnabled(false);
AddAction addAction = new AddAction(taskTree);
RemoveAction removeAction = new RemoveAction(dependencyTable);
SaveChangesAction saveAction = new SaveChangesAction();
// Configure key and mouse bindings for convenience
bindKeys(dependencyTable, new TransferFocusAction(taskTree), "TAB");
bindKeys(dependencyTable, removeAction, "BACK_SPACE", "DELETE", "SUBTRACT");
bindKeys(dependencyTable, saveAction, "ENTER");
bindKeys(taskTree, new TransferFocusAction(dependencyTable), "TAB");
bindKeys(taskTree, addAction, "SPACE", "INSERT", "ADD");
bindKeys(taskTree, saveAction, "ENTER");
taskTree.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "collapseTree");
taskTree.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "expandTree");
taskTree.addMouseListener(new WBSClickHandler(addAction));
Box b = Box.createHorizontalBox();
b.add(Box.createHorizontalGlue());
b.add(new JButton(addAction));
b.add(Box.createHorizontalGlue());
b.add(new JButton(removeAction));
b.add(Box.createHorizontalGlue());
components.add(b);
components.add(Box.createRigidArea(new Dimension(5, 5)));
JScrollPane sp = new JScrollPane(taskTree);
sp.setPreferredSize(new Dimension(300, 200));
components.add(sp);
components.add(new JOptionPaneTweaker.GrabFocus(taskTree));
optionPane = new JOptionPane(components.toArray(), JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
// we can't actually create the dialog yet, because we don't know
// who the parent window will be.
}
use of javax.swing.JTable in project sling by apache.
the class RequestListSelectionListener method valueChanged.
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
int idx = lsm.getMinSelectionIndex();
if (idx >= 0) {
try {
idx = table.getRowSorter().convertRowIndexToModel(idx);
TableModel tm = ((RequestTrackerFile) table.getModel()).getData(idx);
if (dataField == null) {
dataField = new JTable();
dataField.setAutoCreateRowSorter(true);
dataField.setGridColor(Color.GRAY);
dataField.setShowGrid(true);
dataField.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
dataField.setRowSelectionAllowed(true);
dataField.setTableHeader(new JTableHeader(dataField.getColumnModel()));
dataField.setFont(new Font("Monospaced", dataField.getFont().getStyle(), dataField.getFont().getSize()));
dataField.setShowHorizontalLines(false);
// dataField.setIntercellSpacing(new Dimension(3, 5));
JDialog d = new JDialog(this.parent);
d.add(new JScrollPane(dataField));
d.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
dataField = null;
}
});
// setup location and size and ensure updating preferences
Util.setupComponentLocationSize(d, REQUEST_X, REQUEST_Y, REQUEST_WIDTH, REQUEST_HEIGHT, (int) screenSize.getWidth() / 4, (int) screenSize.getHeight() / 4, (int) screenSize.getWidth() / 2, (int) screenSize.getHeight() / 2);
d.setVisible(true);
}
dataField.setModel(tm);
Util.setupColumnWidths(dataField.getColumnModel(), REQUEST_COLS);
} catch (IOException e1) {
// ignore
}
}
}
}
use of javax.swing.JTable in project JMRI by JMRI.
the class LightTableAction method createModel.
/**
* Create the JTable DataModel, along with the changes for the specific case
* of Lights.
*/
@Override
protected void createModel() {
// load graphic state column display preference
_graphicState = InstanceManager.getDefault(GuiLafPreferencesManager.class).isGraphicTableState();
m = new BeanTableDataModel() {
public static final int ENABLECOL = NUMCOLUMN;
public static final int INTENSITYCOL = ENABLECOL + 1;
public static final int EDITCOL = INTENSITYCOL + 1;
protected String enabledString = Bundle.getMessage("ColumnHeadEnabled");
protected String intensityString = Bundle.getMessage("ColumnHeadIntensity");
@Override
public int getColumnCount() {
return NUMCOLUMN + 3;
}
@Override
public String getColumnName(int col) {
if (col == EDITCOL) {
// no heading on "Edit"
return "";
}
if (col == INTENSITYCOL) {
return intensityString;
}
if (col == ENABLECOL) {
return enabledString;
} else {
return super.getColumnName(col);
}
}
@Override
public Class<?> getColumnClass(int col) {
if (col == EDITCOL) {
return JButton.class;
}
if (col == INTENSITYCOL) {
return Double.class;
}
if (col == ENABLECOL) {
return Boolean.class;
} else if (col == VALUECOL && _graphicState) {
// use an image to show light state
return JLabel.class;
} else {
return super.getColumnClass(col);
}
}
@Override
public int getPreferredWidth(int col) {
// override default value for UserName column
if (col == USERNAMECOL) {
return new JTextField(16).getPreferredSize().width;
}
if (col == EDITCOL) {
return new JTextField(6).getPreferredSize().width;
}
if (col == INTENSITYCOL) {
return new JTextField(6).getPreferredSize().width;
}
if (col == ENABLECOL) {
return new JTextField(6).getPreferredSize().width;
} else {
return super.getPreferredWidth(col);
}
}
@Override
public boolean isCellEditable(int row, int col) {
if (col == EDITCOL) {
return true;
}
if (col == INTENSITYCOL) {
return ((Light) getBySystemName((String) getValueAt(row, SYSNAMECOL))).isIntensityVariable();
}
if (col == ENABLECOL) {
return true;
} else {
return super.isCellEditable(row, col);
}
}
@Override
public String getValue(String name) {
Light l = lightManager.getBySystemName(name);
if (l == null) {
return ("Failed to find " + name);
}
int val = l.getState();
switch(val) {
case Light.ON:
return Bundle.getMessage("LightStateOn");
case Light.INTERMEDIATE:
return Bundle.getMessage("LightStateIntermediate");
case Light.OFF:
return Bundle.getMessage("LightStateOff");
case Light.TRANSITIONINGTOFULLON:
return Bundle.getMessage("LightStateTransitioningToFullOn");
case Light.TRANSITIONINGHIGHER:
return Bundle.getMessage("LightStateTransitioningHigher");
case Light.TRANSITIONINGLOWER:
return Bundle.getMessage("LightStateTransitioningLower");
case Light.TRANSITIONINGTOFULLOFF:
return Bundle.getMessage("LightStateTransitioningToFullOff");
default:
return "Unexpected value: " + val;
}
}
@Override
public Object getValueAt(int row, int col) {
switch(col) {
case EDITCOL:
return Bundle.getMessage("ButtonEdit");
case INTENSITYCOL:
return ((Light) getBySystemName((String) getValueAt(row, SYSNAMECOL))).getTargetIntensity();
case ENABLECOL:
return ((Light) getBySystemName((String) getValueAt(row, SYSNAMECOL))).getEnabled();
default:
return super.getValueAt(row, col);
}
}
@Override
public void setValueAt(Object value, int row, int col) {
switch(col) {
case EDITCOL:
// Use separate Runnable so window is created on top
class WindowMaker implements Runnable {
int row;
WindowMaker(int r) {
row = r;
}
@Override
public void run() {
// set up to edit
addPressed(null);
fixedSystemName.setText((String) getValueAt(row, SYSNAMECOL));
// don't really want to stop Light w/o user action
editPressed();
}
}
WindowMaker t = new WindowMaker(row);
javax.swing.SwingUtilities.invokeLater(t);
break;
case INTENSITYCOL:
// alternate
try {
Light l = (Light) getBySystemName((String) getValueAt(row, SYSNAMECOL));
double intensity = ((Double) value);
if (intensity < 0) {
intensity = 0;
}
if (intensity > 1.0) {
intensity = 1.0;
}
l.setTargetIntensity(intensity);
} catch (IllegalArgumentException e1) {
status1.setText(Bundle.getMessage("LightError16"));
}
break;
case ENABLECOL:
// alternate
Light l = (Light) getBySystemName((String) getValueAt(row, SYSNAMECOL));
boolean v = l.getEnabled();
l.setEnabled(!v);
break;
case VALUECOL:
if (_graphicState) {
// respond to clicking on ImageIconRenderer CellEditor
Light ll = (Light) getBySystemName((String) getValueAt(row, SYSNAMECOL));
clickOn(ll);
fireTableRowsUpdated(row, row);
break;
}
//$FALL-THROUGH$
default:
super.setValueAt(value, row, col);
break;
}
}
/**
* Delete the bean after all the checking has been done.
* <P>
* Deactivate the light, then use the superclass to delete it.
*/
@Override
void doDelete(NamedBean bean) {
((Light) bean).deactivateLight();
super.doDelete(bean);
}
// all properties update for now
@Override
protected boolean matchPropertyName(java.beans.PropertyChangeEvent e) {
return true;
}
@Override
public Manager getManager() {
return lightManager;
}
@Override
public NamedBean getBySystemName(String name) {
return lightManager.getBySystemName(name);
}
@Override
public NamedBean getByUserName(String name) {
return lightManager.getByUserName(name);
}
@Override
protected String getMasterClassName() {
return getClassName();
}
@Override
public void clickOn(NamedBean t) {
int oldState = ((Light) t).getState();
int newState;
switch(oldState) {
case Light.ON:
newState = Light.OFF;
break;
case Light.OFF:
newState = Light.ON;
break;
default:
newState = Light.OFF;
log.warn("Unexpected Light state " + oldState + " becomes OFF");
break;
}
((Light) t).setState(newState);
}
@Override
public JButton configureButton() {
return new JButton(" " + Bundle.getMessage("LightStateOff") + " ");
}
@Override
protected String getBeanType() {
return Bundle.getMessage("BeanNameLight");
}
/**
* Customize the light table Value (State) column to show an appropriate graphic for the light 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 Lights
*/
@Override
protected void configValueColumn(JTable table) {
// have the value column hold a JPanel (icon)
//setColumnToHoldButton(table, VALUECOL, new JLabel("123456")); // for small round icon, but cannot be converted to JButton
// add extras, override BeanTableDataModel
log.debug("Light configValueColumn (I am {})", super.toString());
if (_graphicState) {
// load icons, only once
// editor
table.setDefaultEditor(JLabel.class, new ImageIconRenderer());
// item class copied from SwitchboardEditor panel
table.setDefaultRenderer(JLabel.class, new ImageIconRenderer());
} else {
// classic text style state indication
super.configValueColumn(table);
}
}
/**
* Visualize state in table as a graphic, customized for Lights (2 states + ... for transitioning).
* Renderer and Editor are identical, as the cell contents are not actually edited,
* only used to toggle state using {@link #clickOn(NamedBean)}.
* @see jmri.jmrit.beantable.sensor.SensorTableDataModel.ImageIconRenderer
* @see jmri.jmrit.beantable.BlockTableAction#createModel()
* @see jmri.jmrit.beantable.TurnoutTableAction#createModel()
*/
class ImageIconRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
protected JLabel label;
// also used in display.switchboardEditor
protected String rootPath = "resources/icons/misc/switchboard/";
// for Light
protected char beanTypeChar = 'L';
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 Lights
}
if (value.equals(Bundle.getMessage("LightStateOff")) && offIcon != null) {
label = new JLabel(offIcon);
label.setVerticalAlignment(JLabel.BOTTOM);
log.debug("offIcon set");
} else if (value.equals(Bundle.getMessage("LightStateOn")) && onIcon != null) {
label = new JLabel(onIcon);
label.setVerticalAlignment(JLabel.BOTTOM);
log.debug("onIcon set");
} else if (value.equals(Bundle.getMessage("BeanStateInconsistent"))) {
// centered text alignment
label = new JLabel("X", JLabel.CENTER);
label.setForeground(Color.red);
log.debug("Light state inconsistent");
iconHeight = 0;
} else if (value.equals(Bundle.getMessage("LightStateIntermediate"))) {
// centered text alignment
label = new JLabel("...", JLabel.CENTER);
log.debug("Light 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 LightTable");
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
}
use of javax.swing.JTable in project JMRI by JMRI.
the class SignalGroupSubTableAction method editHead.
/**
* Open an editor to set the details of a Signal Head as part of a Signal Group.
* Called when user clicks the Edit button for a Head in the Add/Edit Signal Group pane.
* @see SignalGroupTableAction#signalHeadEditPressed(int) SignalGroupTableAction.signalHeadEditPressed
* @param g Parent Signal Head
* @param headName System or User Name of this Signal Head
*/
void editHead(SignalGroup g, String headName) {
curSignalGroup = g;
curHeadName = headName;
curSignalHead = jmri.InstanceManager.getDefault(jmri.SignalHeadManager.class).getSignalHead(curHeadName);
// shows i18n strings from signal head definition
_OnAppearance = new JComboBox<String>(curSignalHead.getValidStateNames());
_OffAppearance = new JComboBox<String>(curSignalHead.getValidStateNames());
_systemName = new JLabel(headName);
_systemName.setVisible(true);
jmri.TurnoutManager tm = InstanceManager.turnoutManagerInstance();
List<String> systemNameList = tm.getSystemNameList();
_turnoutList = new ArrayList<SignalGroupTurnout>(systemNameList.size());
Iterator<String> iter = systemNameList.iterator();
while (iter.hasNext()) {
String systemName = iter.next();
String userName = tm.getBySystemName(systemName).getUserName();
_turnoutList.add(new SignalGroupTurnout(systemName, userName));
}
jmri.SensorManager sm = InstanceManager.sensorManagerInstance();
systemNameList = sm.getSystemNameList();
_sensorList = new ArrayList<SignalGroupSensor>(systemNameList.size());
iter = systemNameList.iterator();
while (iter.hasNext()) {
String systemName = iter.next();
Sensor sen = sm.getBySystemName(systemName);
if (sen != null) {
String userName = sen.getUserName();
_sensorList.add(new SignalGroupSensor(systemName, userName));
}
}
initializeIncludedList();
// Set up sub panel for editing of a Signal Group Signal Head item
if (addSubFrame == null) {
// create one if not yet available
addSubFrame = new JmriJFrame((Bundle.getMessage("EditSignalGroup") + " - " + Bundle.getMessage("BeanNameSignalHead")), false, true);
addSubFrame.addHelpMenu("package.jmri.jmrit.beantable.SignalGroupAddEdit", true);
addSubFrame.setLocation(100, 30);
addSubFrame.getContentPane().setLayout(new BoxLayout(addSubFrame.getContentPane(), BoxLayout.Y_AXIS));
Container contentPane = addSubFrame.getContentPane();
// add system name label
JPanel ps = new JPanel();
ps.setLayout(new FlowLayout());
ps.add(nameLabel);
ps.add(_systemName);
contentPane.add(ps);
// add user name label
JPanel pc = new JPanel();
pc.setLayout(new FlowLayout());
pc.add(signalOnStateLabel);
// comboBox to set On Appearance
pc.add(_OnAppearance);
_OnAppearance.setToolTipText(Bundle.getMessage("StateWhenMetTooltip"));
pc.add(spacer);
pc.add(signalOffStateLabel);
// comboBox to set On Appearance
pc.add(_OffAppearance);
_OffAppearance.setToolTipText(Bundle.getMessage("StateWhenNotMetTooltip"));
contentPane.add(pc);
JPanel p = new JPanel();
p.setLayout(new FlowLayout());
p.add(userLabel);
contentPane.add(p);
// fill in info for the Signal Head being configured
if (curSignalHead.getClass().getName().contains("SingleTurnoutSignalHead")) {
jmri.implementation.SingleTurnoutSignalHead stsh = (jmri.implementation.SingleTurnoutSignalHead) InstanceManager.getDefault(jmri.SignalHeadManager.class).getByUserName(curHeadName);
// we may use a user name in the editing pane, so look for that first
if (stsh == null) {
stsh = (jmri.implementation.SingleTurnoutSignalHead) InstanceManager.getDefault(jmri.SignalHeadManager.class).getBySystemName(curHeadName);
// when user name is empty, get by user name
}
if (stsh != null) {
log.debug("SGsubTA #279 editHead: setting props for signal head {}", curHeadName);
if ((g.getHeadOnState(curSignalHead) == 0x00) && (g.getHeadOffState(curSignalHead) == 0x00)) {
g.setHeadOnState(curSignalHead, stsh.getOnAppearance());
g.setHeadOffState(curSignalHead, stsh.getOffAppearance());
}
} else {
// nothing found
log.error("Failed to get signal head object named {}", curHeadName);
}
}
setSignalHeadStateBox(g.getHeadOnState(curSignalHead), _OnAppearance);
setSignalHeadStateBox(g.getHeadOffState(curSignalHead), _OffAppearance);
// add Turnout Display Choice
JPanel py = new JPanel();
py.add(new JLabel(Bundle.getMessage("Show")));
selGroup = new ButtonGroup();
allButton = new JRadioButton(Bundle.getMessage("All"), true);
selGroup.add(allButton);
py.add(allButton);
allButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Setup for display of all Turnouts, if needed
if (!showAll) {
showAll = true;
_SignalGroupTurnoutModel.fireTableDataChanged();
_SignalGroupSensorModel.fireTableDataChanged();
}
}
});
includedButton = new JRadioButton(Bundle.getMessage("Included"), false);
selGroup.add(includedButton);
py.add(includedButton);
includedButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Setup for display of included Turnouts only, if needed
if (showAll) {
showAll = false;
initializeIncludedList();
_SignalGroupTurnoutModel.fireTableDataChanged();
_SignalGroupSensorModel.fireTableDataChanged();
}
}
});
py.add(new JLabel(" " + Bundle.getMessage("_and_", Bundle.getMessage("Turnouts"), Bundle.getMessage("Sensors"))));
contentPane.add(py);
// add turnout table
p2xt = new JPanel();
JPanel p2xtSpace = new JPanel();
p2xtSpace.setLayout(new BoxLayout(p2xtSpace, BoxLayout.Y_AXIS));
p2xtSpace.add(new JLabel("XXX"));
p2xt.add(p2xtSpace);
JPanel p21t = new JPanel();
p21t.setLayout(new BoxLayout(p21t, BoxLayout.Y_AXIS));
p21t.add(new JLabel(Bundle.getMessage("SelectInGroup", Bundle.getMessage("Turnouts"))));
p2xt.add(p21t);
_SignalGroupTurnoutModel = new SignalGroupTurnoutModel();
JTable SignalGroupTurnoutTable = new JTable(_SignalGroupTurnoutModel);
TableRowSorter<SignalGroupTurnoutModel> sgtSorter = new TableRowSorter<>(_SignalGroupTurnoutModel);
sgtSorter.setComparator(SignalGroupTurnoutModel.SNAME_COLUMN, new SystemNameComparator());
RowSorterUtil.setSortOrder(sgtSorter, SignalGroupTurnoutModel.SNAME_COLUMN, SortOrder.ASCENDING);
SignalGroupTurnoutTable.setRowSorter(sgtSorter);
SignalGroupTurnoutTable.setRowSelectionAllowed(false);
SignalGroupTurnoutTable.setPreferredScrollableViewportSize(new java.awt.Dimension(480, 80));
ROW_HEIGHT = SignalGroupTurnoutTable.getRowHeight();
JComboBox<String> stateTCombo = new JComboBox<String>();
stateTCombo.addItem(SET_TO_CLOSED);
stateTCombo.addItem(SET_TO_THROWN);
TableColumnModel SignalGroupTurnoutColumnModel = SignalGroupTurnoutTable.getColumnModel();
TableColumn includeColumnT = SignalGroupTurnoutColumnModel.getColumn(SignalGroupTurnoutModel.INCLUDE_COLUMN);
includeColumnT.setResizable(false);
includeColumnT.setMinWidth(50);
includeColumnT.setMaxWidth(60);
TableColumn sNameColumnT = SignalGroupTurnoutColumnModel.getColumn(SignalGroupTurnoutModel.SNAME_COLUMN);
sNameColumnT.setResizable(true);
sNameColumnT.setMinWidth(75);
sNameColumnT.setMaxWidth(95);
TableColumn uNameColumnT = SignalGroupTurnoutColumnModel.getColumn(SignalGroupTurnoutModel.UNAME_COLUMN);
uNameColumnT.setResizable(true);
uNameColumnT.setMinWidth(210);
uNameColumnT.setMaxWidth(260);
TableColumn stateColumnT = SignalGroupTurnoutColumnModel.getColumn(SignalGroupTurnoutModel.STATE_COLUMN);
stateColumnT.setCellEditor(new DefaultCellEditor(stateTCombo));
stateColumnT.setResizable(false);
stateColumnT.setMinWidth(90);
stateColumnT.setMaxWidth(100);
_SignalGroupTurnoutScrollPane = new JScrollPane(SignalGroupTurnoutTable);
p2xt.add(_SignalGroupTurnoutScrollPane, BorderLayout.CENTER);
contentPane.add(p2xt);
p2xt.setVisible(true);
JPanel po = new JPanel();
po.setLayout(new FlowLayout());
JLabel operLabel = new JLabel(Bundle.getMessage("ChooseOrAnd"));
po.add(operLabel);
po.add(_SensorTurnoutOper);
contentPane.add(po);
// add sensor table
p2xs = new JPanel();
JPanel p2xsSpace = new JPanel();
p2xsSpace.setLayout(new BoxLayout(p2xsSpace, BoxLayout.Y_AXIS));
p2xsSpace.add(new JLabel("XXX"));
p2xs.add(p2xsSpace);
JPanel p21s = new JPanel();
p21s.setLayout(new BoxLayout(p21s, BoxLayout.Y_AXIS));
p21s.add(new JLabel(Bundle.getMessage("SelectInGroup", Bundle.getMessage("Sensors"))));
p2xs.add(p21s);
_SignalGroupSensorModel = new SignalGroupSensorModel();
JTable SignalGroupSensorTable = new JTable(_SignalGroupSensorModel);
TableRowSorter<SignalGroupSensorModel> sgsSorter = new TableRowSorter<>(_SignalGroupSensorModel);
sgsSorter.setComparator(SignalGroupSensorModel.SNAME_COLUMN, new SystemNameComparator());
RowSorterUtil.setSortOrder(sgsSorter, SignalGroupSensorModel.SNAME_COLUMN, SortOrder.ASCENDING);
SignalGroupSensorTable.setRowSorter(sgsSorter);
SignalGroupSensorTable.setRowSelectionAllowed(false);
SignalGroupSensorTable.setPreferredScrollableViewportSize(new java.awt.Dimension(480, 80));
JComboBox<String> stateSCombo = new JComboBox<String>();
stateSCombo.addItem(SET_TO_ACTIVE);
stateSCombo.addItem(SET_TO_INACTIVE);
TableColumnModel SignalGroupSensorColumnModel = SignalGroupSensorTable.getColumnModel();
TableColumn includeColumnS = SignalGroupSensorColumnModel.getColumn(SignalGroupSensorModel.INCLUDE_COLUMN);
includeColumnS.setResizable(false);
includeColumnS.setMinWidth(50);
includeColumnS.setMaxWidth(60);
TableColumn sNameColumnS = SignalGroupSensorColumnModel.getColumn(SignalGroupSensorModel.SNAME_COLUMN);
sNameColumnS.setResizable(true);
sNameColumnS.setMinWidth(75);
sNameColumnS.setMaxWidth(95);
TableColumn uNameColumnS = SignalGroupSensorColumnModel.getColumn(SignalGroupSensorModel.UNAME_COLUMN);
uNameColumnS.setResizable(true);
uNameColumnS.setMinWidth(210);
uNameColumnS.setMaxWidth(260);
TableColumn stateColumnS = SignalGroupSensorColumnModel.getColumn(SignalGroupSensorModel.STATE_COLUMN);
stateColumnS.setCellEditor(new DefaultCellEditor(stateSCombo));
stateColumnS.setResizable(false);
stateColumnS.setMinWidth(90);
stateColumnS.setMaxWidth(100);
_SignalGroupSensorScrollPane = new JScrollPane(SignalGroupSensorTable);
p2xs.add(_SignalGroupSensorScrollPane, BorderLayout.CENTER);
contentPane.add(p2xs);
p2xs.setVisible(true);
// add notes panel
JPanel pa = new JPanel();
pa.setLayout(new BoxLayout(pa, BoxLayout.Y_AXIS));
JPanel p1 = new JPanel();
p1.setLayout(new FlowLayout());
p1.add(status1);
pa.add(p1);
Border pBorder = BorderFactory.createEtchedBorder();
pa.setBorder(pBorder);
contentPane.add(pa);
// add buttons - Add SignalGroup button
JPanel pb = new JPanel();
pb.setLayout(new FlowLayout(FlowLayout.TRAILING));
// add Cancel button
pb.add(cancelButton);
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cancelSubPressed(e);
}
});
// add Update SignalGroup button
pb.add(updateSubButton);
updateSubButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateSubPressed(e, false);
}
});
updateSubButton.setToolTipText(Bundle.getMessage("TooltipUpdate"));
p2xtSpace.setVisible(false);
p2xsSpace.setVisible(false);
updateSubButton.setVisible(true);
contentPane.add(pb);
addSubFrame.pack();
}
// set listener for window closing
addSubFrame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
addSubFrame.setVisible(false);
cancelSubEdit();
_SignalGroupSensorModel.dispose();
_SignalGroupTurnoutModel.dispose();
}
});
addSubFrame.setVisible(true);
// add AND/OR choice box
setoperBox(curSignalGroup.getSensorTurnoutOper(curSignalHead), _SensorTurnoutOper);
setSignalHeadStateBox(curSignalGroup.getHeadOnState(curSignalHead), _OnAppearance);
setSignalHeadStateBox(curSignalGroup.getHeadOffState(curSignalHead), _OffAppearance);
int setRow = 0;
for (int i = _turnoutList.size() - 1; i >= 0; i--) {
SignalGroupTurnout turnout = _turnoutList.get(i);
Turnout tTurnout = turnout.getTurnout();
if (curSignalGroup.isTurnoutIncluded(curSignalHead, tTurnout)) {
turnout.setIncluded(true);
turnout.setState(curSignalGroup.getTurnoutState(curSignalHead, tTurnout));
setRow = i;
} else {
turnout.setIncluded(false);
turnout.setState(Turnout.CLOSED);
}
}
setRow -= 1;
if (setRow < 0) {
setRow = 0;
}
_SignalGroupTurnoutScrollPane.getVerticalScrollBar().setValue(setRow * ROW_HEIGHT);
_SignalGroupTurnoutModel.fireTableDataChanged();
for (int i = _sensorList.size() - 1; i >= 0; i--) {
SignalGroupSensor sensor = _sensorList.get(i);
Sensor tSensor = sensor.getSensor();
if (curSignalGroup.isSensorIncluded(curSignalHead, tSensor)) {
sensor.setIncluded(true);
sensor.setState(curSignalGroup.getSensorState(curSignalHead, tSensor));
setRow = i;
} else {
sensor.setIncluded(false);
sensor.setState(Sensor.INACTIVE);
}
}
status1.setText(updateInst);
updateSubButton.setVisible(true);
}
use of javax.swing.JTable in project JMRI by JMRI.
the class SectionTableAction method addEditPressed.
void addEditPressed() {
pref = jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class);
if (addFrame == null) {
addFrame = new JmriJFrame(Bundle.getMessage("TitleAddSection"));
addFrame.addHelpMenu("package.jmri.jmrit.beantable.SectionAddEdit", true);
addFrame.getContentPane().setLayout(new BoxLayout(addFrame.getContentPane(), BoxLayout.Y_AXIS));
JPanel p = new JPanel();
p.setLayout(new FlowLayout());
p.add(sysNameLabel);
p.add(sysNameFixed);
p.add(sysName);
p.add(_autoSystemName);
_autoSystemName.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
autoSystemName();
}
});
if (pref.getSimplePreferenceState(systemNameAuto)) {
_autoSystemName.setSelected(true);
}
sysName.setToolTipText(rbx.getString("SectionSystemNameHint"));
p.add(new JLabel(" "));
p.add(userNameLabel);
p.add(userName);
userName.setToolTipText(rbx.getString("SectionUserNameHint"));
addFrame.getContentPane().add(p);
JPanel pa = new JPanel();
pa.setLayout(new FlowLayout());
pa.add(generationStateLabel);
addFrame.getContentPane().add(pa);
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("BlockTableMessage")));
p1.add(p11);
JPanel p12 = new JPanel();
// initialize table of blocks
blockTableModel = new BlockTableModel();
JTable blockTable = new JTable(blockTableModel);
blockTable.setRowSelectionAllowed(false);
blockTable.setPreferredScrollableViewportSize(new java.awt.Dimension(350, 100));
TableColumnModel blockColumnModel = blockTable.getColumnModel();
TableColumn sNameColumn = blockColumnModel.getColumn(BlockTableModel.SNAME_COLUMN);
sNameColumn.setResizable(true);
sNameColumn.setMinWidth(90);
sNameColumn.setMaxWidth(130);
TableColumn uNameColumn = blockColumnModel.getColumn(BlockTableModel.UNAME_COLUMN);
uNameColumn.setResizable(true);
uNameColumn.setMinWidth(210);
uNameColumn.setMaxWidth(260);
JScrollPane blockTableScrollPane = new JScrollPane(blockTable);
p12.add(blockTableScrollPane, BorderLayout.CENTER);
p1.add(p12);
JPanel p13 = new JPanel();
p13.setLayout(new FlowLayout());
p13.add(deleteBlocks = new JButton(rbx.getString("DeleteAllBlocksButton")));
deleteBlocks.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteBlocksPressed(e);
}
});
deleteBlocks.setToolTipText(rbx.getString("DeleteAllBlocksButtonHint"));
p13.add(new JLabel(" "));
p13.add(blockBox);
blockBox.setToolTipText(rbx.getString("BlockBoxHint"));
p13.add(addBlock = new JButton(rbx.getString("AddBlockButton")));
addBlock.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addBlockPressed(e);
}
});
addBlock.setToolTipText(rbx.getString("AddBlockButtonHint"));
p1.add(p13);
addFrame.getContentPane().add(p1);
addFrame.getContentPane().add(new JSeparator());
JPanel p31 = new JPanel();
p31.setLayout(new FlowLayout());
p31.add(new JLabel(rbx.getString("EntryPointTable")));
addFrame.getContentPane().add(p31);
JPanel p32 = new JPanel();
p32.setLayout(new FlowLayout());
entryPointOptions = new ButtonGroup();
p32.add(manually);
entryPointOptions.add(manually);
manually.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
manualEntryPoints = true;
}
});
manually.setToolTipText(rbx.getString("SetManuallyHint"));
p32.add(new JLabel(" "));
p32.add(automatic);
entryPointOptions.add(automatic);
automatic.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
manualEntryPoints = false;
}
});
automatic.setToolTipText(rbx.getString("SetAutomaticHint"));
p32.add(layoutEditorBox);
layoutEditorBox.setToolTipText(rbx.getString("LayoutEditorBoxHint"));
layoutEditorBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
layoutEditorSelectionChanged();
}
});
// djd debugging - temporarily hide these items until the automatic setting of entry point direction is ready
// addFrame.getContentPane().add(p32);
// end djd debugging
JPanel p33 = new JPanel();
// initialize table of entry points
entryPointTableModel = new EntryPointTableModel();
JTable entryPointTable = new JTable(entryPointTableModel);
entryPointTable.setRowSelectionAllowed(false);
// GT - 12-Oct-2009
entryPointTable.setPreferredScrollableViewportSize(new java.awt.Dimension(550, 100));
TableColumnModel entryPointColumnModel = entryPointTable.getColumnModel();
TableColumn fromBlockColumn = entryPointColumnModel.getColumn(EntryPointTableModel.BLOCK_COLUMN);
fromBlockColumn.setResizable(true);
fromBlockColumn.setMinWidth(250);
fromBlockColumn.setMaxWidth(310);
// GT - 12-Oct-2009 - start
TableColumn toBlockColumn = entryPointColumnModel.getColumn(EntryPointTableModel.TO_BLOCK_COLUMN);
toBlockColumn.setResizable(true);
toBlockColumn.setMinWidth(150);
toBlockColumn.setMaxWidth(210);
// GT - 12-Oct-2009 - end
JComboBox<String> directionCombo = new JComboBox<String>();
directionCombo.addItem(rbx.getString("SectionForward"));
directionCombo.addItem(rbx.getString("SectionReverse"));
directionCombo.addItem(Bundle.getMessage("BeanStateUnknown"));
TableColumn directionColumn = entryPointColumnModel.getColumn(EntryPointTableModel.DIRECTION_COLUMN);
directionColumn.setCellEditor(new DefaultCellEditor(directionCombo));
entryPointTable.setRowHeight(directionCombo.getPreferredSize().height);
directionColumn.setPreferredWidth(directionCombo.getPreferredSize().width);
directionColumn.setResizable(false);
JScrollPane entryPointTableScrollPane = new JScrollPane(entryPointTable);
p33.add(entryPointTableScrollPane, BorderLayout.CENTER);
addFrame.getContentPane().add(p33);
p33.setVisible(true);
JPanel p34 = new JPanel();
p34.setLayout(new FlowLayout());
p34.add(new JLabel(rbx.getString("DirectionNote")));
addFrame.getContentPane().add(p34);
addFrame.getContentPane().add(new JSeparator());
// set up for direction sensors
JPanel p20 = new JPanel();
p20.setLayout(new FlowLayout());
p20.add(new JLabel(rbx.getString("DirectionSensorLabel")));
addFrame.getContentPane().add(p20);
JPanel p21 = new JPanel();
p21.setLayout(new FlowLayout());
p21.add(new JLabel(rbx.getString("ForwardSensor")));
p21.add(forwardSensorField);
forwardSensorField.setToolTipText(rbx.getString("ForwardSensorHint"));
p21.add(new JLabel(" "));
p21.add(new JLabel(rbx.getString("ReverseSensor")));
p21.add(reverseSensorField);
reverseSensorField.setToolTipText(rbx.getString("ReverseSensorHint"));
addFrame.getContentPane().add(p21);
addFrame.getContentPane().add(new JSeparator());
// set up for stopping sensors
JPanel p40 = new JPanel();
p40.setLayout(new FlowLayout());
p40.add(new JLabel(rbx.getString("StoppingSensorLabel")));
addFrame.getContentPane().add(p40);
JPanel p41 = new JPanel();
p41.setLayout(new FlowLayout());
p41.add(new JLabel(rbx.getString("ForwardStopSensor")));
p41.add(forwardStopSensorField);
forwardStopSensorField.setToolTipText(rbx.getString("ForwardStopSensorHint"));
p41.add(new JLabel(" "));
p41.add(new JLabel(rbx.getString("ReverseStopSensor")));
p41.add(reverseStopSensorField);
reverseStopSensorField.setToolTipText(rbx.getString("ReverseStopSensorHint"));
addFrame.getContentPane().add(p41);
addFrame.getContentPane().add(new JSeparator());
// set up bottom buttons
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);
create.setVisible(true);
update.setVisible(false);
sysName.setVisible(true);
sysNameFixed.setVisible(false);
autoSystemName();
clearForCreate();
}
// initialize layout editor panels
if (initializeLayoutEditorCombo(layoutEditorBox)) {
manually.setVisible(true);
automatic.setVisible(true);
layoutEditorBox.setVisible(true);
} else {
manually.setVisible(false);
automatic.setVisible(false);
layoutEditorBox.setVisible(false);
}
// initialize block combo - first time
initializeBlockCombo();
addFrame.pack();
addFrame.setVisible(true);
}
Aggregations