private void setValue(final JComponent component) { final String primitiveFormName = _primitiveForm.getName(); if (_dotDefinitionDialogFrame.isPropertyStatic(primitiveFormName, _property)) { Object object = _dotDefinitionDialogFrame.getValueOfStaticProperty(primitiveFormName, _property); if (component instanceof JComboBox) { final String currentValue; if (object instanceof Color) { currentValue = ColorManager.getInstance().getColorName((Color) object); } else if (object instanceof Integer) { Integer i = (Integer) object; if (i.equals(Font.PLAIN)) { currentValue = STANDARD_FONT; } else if (i.equals(Font.BOLD)) { currentValue = BOLD_FONT; } else if (i.equals(Font.ITALIC)) { currentValue = ITALIC_FONT; } else { currentValue = "Unbekannter Font"; } } else { currentValue = (String) object; } JComboBox comboBox = (JComboBox) component; comboBox.setSelectedItem(currentValue); } else if (component instanceof JSpinner) { JSpinner spinner = (JSpinner) component; if (object instanceof Integer) { spinner.setValue((Integer) object); } else { spinner.setValue((Double) object); } } } else { if (component instanceof JComboBox) { JComboBox comboBox = (JComboBox) component; comboBox.setSelectedItem(DOTPoint.getDefaultValue(_property)); } else if (component instanceof JSpinner) { JSpinner spinner = (JSpinner) component; spinner.setValue(DOTPoint.getDefaultValue(_property)); } } }
@SuppressWarnings("serial") class DOTItemDialog extends JDialog { private final PrimitiveForm _primitiveForm; private final DOTProperty _property; private JComboBox _colorComboBox = new JComboBox(ColorManager.getInstance().getColorNames()); private JComboBox _textStyleComboBox = new JComboBox(FONT_ITEMS); private JComboBox _textComboBox = new JComboBox(DOTPointPainter.DYNAMIC_TEXT_ITEMS); private JSpinner _diameterSpinner = new JSpinner(getNewDiameterSpinnerModel()); private JSpinner _strokeWidthSpinner = new JSpinner(getNewStrokeWidthSpinnerModel()); private JSpinner _transparencySpinner = new JSpinner(getNewTransparencySpinnerModel()); private JSpinner _textSizeSpinner = new JSpinner(getNewTextSizeSpinnerModel()); private final DynamicDefinitionComponent _dynamicDefinitionComponent; JComponent _component = null; @SuppressWarnings("unchecked") private Object initDynamicDefinitionComponent() { final String selectedPrimitiveFormName = _dotDefinitionDialogFrame.getSelectedPrimitiveForm(); final DOTProperty currentProperty = _dotDefinitionDialogFrame.getSelectedProperty(); PrimitiveFormPropertyPair pfpPair = new PrimitiveFormPropertyPair(selectedPrimitiveFormName, currentProperty); final JTable workWithThisTable = _dynamicTables.get(pfpPair); int selectedRow = workWithThisTable.getSelectedRow(); if (selectedRow == -1) { if (workWithThisTable.getModel().getRowCount() > 0) { selectedRow = 0; } else { return null; } } selectedRow = workWithThisTable.convertRowIndexToModel(selectedRow); final TableModel model = workWithThisTable.getModel(); DynamicDOTItemManager dynamicDOTItemManager = (DynamicDOTItemManager) model; final DisplayObjectTypeItemWithInterval dotItemWithInterval = dynamicDOTItemManager.get(selectedRow); _dynamicDefinitionComponent.fillComponents(dotItemWithInterval); return dotItemWithInterval.getItem().getPropertyValue(); } private void addButtonListeners(JButton saveButton, JButton cancelButton) { ActionListener actionListenerSave = new ActionListener() { public void actionPerformed(ActionEvent e) { Object propertyValue = null; String errorString = null; if (_property == DOTProperty.DURCHMESSER) { propertyValue = _diameterSpinner.getValue(); errorString = "Bitte wählen Sie einen Durchmesser aus!"; } else if (_property == DOTProperty.FARBE || _property == DOTProperty.FUELLUNG) { propertyValue = _colorComboBox.getSelectedItem(); errorString = "Bitte wählen Sie eine Farbe aus!"; } else if (_property == DOTProperty.GROESSE) { propertyValue = _textSizeSpinner.getValue(); errorString = "Bitte wählen Sie eine Schriftgröße aus!"; } else if (_property == DOTProperty.STRICHBREITE) { propertyValue = _strokeWidthSpinner.getValue(); errorString = "Bitte wählen Sie eine Strichbreite aus!"; } else if (_property == DOTProperty.TEXT) { propertyValue = _textComboBox.getSelectedItem(); errorString = "Bitte wählen Sie einen Text aus!"; } else if (_property == DOTProperty.TEXTSTIL) { propertyValue = _textStyleComboBox.getSelectedItem(); errorString = "Bitte wählen Sie einen Textstil aus!"; } else if (_property == DOTProperty.TRANSPARENZ) { propertyValue = _transparencySpinner.getValue(); errorString = "Bitte wählen Sie eine Tranparenz aus!"; } else { errorString = "DOTPointDialog.addButtonListeners(): unbehandelte Eigenschaft!"; } if (propertyValue == null) { JOptionPane.showMessageDialog( new JFrame(), errorString, "Fehler", JOptionPane.ERROR_MESSAGE); return; } final String description = _dynamicDefinitionComponent.getInfoText(); if (description == null) { JOptionPane.showMessageDialog( new JFrame(), "Bitte geben Sie einen Info-Text ein!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } final String attributeGroupName = _dynamicDefinitionComponent.getAttributeGroupName(); if (attributeGroupName == null) { JOptionPane.showMessageDialog( new JFrame(), "Bitte wählen Sie eine Attributgruppe aus!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } final String aspectName = _dynamicDefinitionComponent.getAspectName(); if (aspectName == null) { JOptionPane.showMessageDialog( new JFrame(), "Bitte wählen Sie einen Aspekt aus!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } final String attributeName = _dynamicDefinitionComponent.getAttributeName(); if (attributeName == null) { int error = _dynamicDefinitionComponent.checkAttributeName(); if (error == 1) { JOptionPane.showMessageDialog( new JFrame(), "Bitte wählen Sie ein Attribut aus!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } else if (error == 2) { JOptionPane.showMessageDialog( new JFrame(), "Der Attributname ist ungültig!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } } final Double fromValue = _dynamicDefinitionComponent.getFromValue(); if (fromValue == null) { int error = _dynamicDefinitionComponent.checkFromValue(); if (error == 1) { JOptionPane.showMessageDialog( new JFrame(), "Bitte tragen Sie einen Von-Wert ein!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } else if ((error == 2) || (error == 3)) { JOptionPane.showMessageDialog( new JFrame(), "Bitte korrigieren Sie den Von-Wert!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } } final Double toValue = _dynamicDefinitionComponent.getToValue(); if (toValue == null) { int error = _dynamicDefinitionComponent.checkToValue(); if (error == 1) { JOptionPane.showMessageDialog( new JFrame(), "Bitte tragen Sie einen Bis-Wert ein!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } else if ((error == 2) || (error == 3)) { JOptionPane.showMessageDialog( new JFrame(), "Bitte korrigieren Sie den Bis-Wert!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } } if ((fromValue != null) && (toValue != null) && fromValue > toValue) { JOptionPane.showMessageDialog( new JFrame(), "Der Von-Wert ist größer als der Bis-Wert!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } DynamicDOTItem dItem = new DynamicDOTItem( attributeGroupName, aspectName, attributeName, description, propertyValue); _dotDefinitionDialogFrame .getScratchDisplayObjectType() .setValueOfDynamicProperty( _primitiveForm.getName(), _property, dItem, fromValue, toValue); _dotDefinitionDialogFrame.setSomethingChanged(true); } }; saveButton.addActionListener(actionListenerSave); ActionListener actionListenerCancel = new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }; cancelButton.addActionListener(actionListenerCancel); } DOTItemDialog() { super(); _primitiveForm = primitiveForm; _property = property; _dynamicDefinitionComponent = new DynamicDefinitionComponent(_configuration, new DOTPointPlugin()); final Object propertyValue = initDynamicDefinitionComponent(); final JPanel panel = new JPanel(); panel.setLayout(new SpringLayout()); JLabel aLabel = null; if (_property == DOTProperty.DURCHMESSER) { aLabel = new JLabel("Durchmesser: "); if (propertyValue != null) { _diameterSpinner.setValue(propertyValue); } _component = _diameterSpinner; } else if (_property == DOTProperty.FARBE || _property == DOTProperty.FUELLUNG) { aLabel = new JLabel("Farbe: "); if (propertyValue != null) { _colorComboBox.setSelectedItem(propertyValue); } _component = _colorComboBox; } else if (_property == DOTProperty.GROESSE) { aLabel = new JLabel("Schriftgröße: "); if (propertyValue != null) { _textSizeSpinner.setValue(propertyValue); } _component = _textSizeSpinner; } else if (_property == DOTProperty.STRICHBREITE) { aLabel = new JLabel("Strichbreite: "); if (propertyValue != null) { _strokeWidthSpinner.setValue(propertyValue); } _component = _strokeWidthSpinner; } else if (_property == DOTProperty.TEXT) { aLabel = new JLabel("Text: "); prepareTextComboBox(propertyValue); _component = _textComboBox; } else if (_property == DOTProperty.TEXTSTIL) { aLabel = new JLabel("Textstil: "); if (propertyValue != null) { _textStyleComboBox.setSelectedItem(propertyValue); } _component = _textStyleComboBox; } else if (_property == DOTProperty.TRANSPARENZ) { aLabel = new JLabel("Tranzparenz: "); if (propertyValue != null) { _transparencySpinner.setValue(propertyValue); } _component = _transparencySpinner; } panel.add(aLabel); panel.add(_component); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); SpringUtilities.makeCompactGrid(panel, 2, 20, 5); final JButton saveButton = new JButton("Speichern"); saveButton.setEnabled(_dotDefinitionDialogFrame.isEditable()); final JButton cancelButton = new JButton("Dialog schließen"); final JPanel buttonsPanel = new JPanel(); buttonsPanel.setLayout(new SpringLayout()); buttonsPanel.add(saveButton); buttonsPanel.add(cancelButton); buttonsPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); SpringUtilities.makeCompactGrid(buttonsPanel, 2, 20, 5); addButtonListeners(saveButton, cancelButton); setTitle("GND: Darstellungsfestlegung für Punkte"); setLayout(new BorderLayout()); add(new JScrollPane(panel), BorderLayout.NORTH); add(new JScrollPane(_dynamicDefinitionComponent), BorderLayout.CENTER); add(buttonsPanel, BorderLayout.SOUTH); pack(); setSize(700, 550); final Rectangle bounds = getBounds(); setLocation( new Point((int) (bounds.getHeight() / 1.5 + 300), (int) (bounds.getWidth() / 1.5))); } private void prepareTextComboBox(final Object propertyValue) { // _textComboBox wird in der letzten Zeile editierbar gemacht, und es wird // der übergebene Wert in diese Zeile eingetragen und selektiert, wenn er nicht // einem der anderen Einträge entspricht. if (propertyValue != null) { String propertyValueAsString = (String) propertyValue; final int size = _textComboBox.getModel().getSize(); boolean propertyValueFound = false; for (int i = 0; i < size - 1; i++) { if (propertyValueAsString.equals((String) _textComboBox.getItemAt(i))) { propertyValueFound = true; _textComboBox.setSelectedIndex(i); break; } } if (!propertyValueFound) { _textComboBox.removeItemAt(size - 1); _textComboBox.addItem(propertyValueAsString); _textComboBox.setSelectedIndex(size - 1); } } ItemListener textComboBoxItemListener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { if (_textComboBox.getSelectedIndex() == DOTPointPainter.DYNAMIC_TEXT_ITEMS.length - 1) { _textComboBox.setEditable(true); } else { _textComboBox.setEditable(false); } } } }; _textComboBox.addItemListener(textComboBoxItemListener); ActionListener editorActionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { final int length = DOTPointPainter.DYNAMIC_TEXT_ITEMS.length; final int index = length - 1; final ComboBoxEditor editor = _textComboBox.getEditor(); String editedItem = (String) editor.getItem(); _textComboBox.insertItemAt(editedItem, index); final DefaultComboBoxModel model = (DefaultComboBoxModel) _textComboBox.getModel(); if (model.getSize() > length) { // Sieht komisch aus, aber der direkte Weg ging nicht. model.removeElementAt(length); } } }; _textComboBox.getEditor().addActionListener(editorActionListener); } public void runDialog() { setVisible(true); } }
private StaticPanel createStaticColorPanel(PrimitiveForm primitiveForm, DOTProperty property) { return createStaticComboBoxPanel( primitiveForm, property, "Farbe: ", ColorManager.getInstance().getColorNames()); }