private void removeItem(Object obj, Field field, int index) { final JScrollBar sb = genericTagPropertiesEditPanelScrollPanel.getVerticalScrollBar(); final int val = sb.getValue(); // save scroll top SWFType swfType = field.getAnnotation(SWFType.class); if (swfType != null && !swfType .countField() .isEmpty()) { // Fields with same countField must be removed from too Field[] fields = obj.getClass().getDeclaredFields(); for (int f = 0; f < fields.length; f++) { SWFType fieldSwfType = fields[f].getAnnotation(SWFType.class); if (fieldSwfType != null && fieldSwfType.countField().equals(swfType.countField())) { ReflectionTools.removeFromField(obj, fields[f], index); } } try { // If countField exists, decrement, otherwise do nothing Field countField = obj.getClass().getDeclaredField(swfType.countField()); int cnt = countField.getInt(obj); cnt--; countField.setInt(obj, cnt); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) { // ignored } } else { ReflectionTools.removeFromField(obj, field, index); } generateEditControls(editedTag, false); // Restore scroll top after some time. TODO: Handle this better. I don't know how :-(. new Thread() { @Override public void run() { try { Thread.sleep(500); } catch (InterruptedException ex) { logger.log(Level.SEVERE, null, ex); } View.execInEventDispatch( () -> { genericTagPropertiesEditPanelScrollPanel.getVerticalScrollBar().setValue(val); }); } }.start(); revalidate(); repaint(); }
private void setTagText(Tag tag) { clear(); generateEditControls(tag, true); StringBuilder val = new StringBuilder(); for (String key : keys) { GenericTagEditor ed = editors.get(key); if (((Component) ed).isVisible()) { val.append(key).append(" : ").append(ed.getReadOnlyValue()).append("<br>"); } } // HTML for colors: val.insert(0, "<html>").append("</html>"); genericTagPropertiesEditorPane.setContentType("text/html"); genericTagPropertiesEditorPane.setText(val.toString()); genericTagPropertiesEditorPane.setCaretPosition(0); hdr.setText(tag.toString()); }
public void setEditMode(boolean edit, Tag tag) { if (tag == null) { tag = this.tag; } this.tag = tag; this.editedTag = Helper.deepCopy(tag); generateEditControls(editedTag, !edit); if (edit) { remove(genericTagPropertiesEditorPaneScrollPanel); add(genericTagPropertiesEditPanelScrollPanel, BorderLayout.CENTER); } else { genericTagPropertiesEditPanel.removeAll(); genericTagPropertiesEditPanel.setSize(0, 0); remove(genericTagPropertiesEditPanelScrollPanel); add(genericTagPropertiesEditorPaneScrollPanel, BorderLayout.CENTER); setTagText(this.tag); } revalidate(); repaint(); }