TreeCellEditor для редактирования нескольких узлов - PullRequest
0 голосов
/ 05 июня 2018

Может ли кто-нибудь показать пример TreeCellEditor, который может обновлять несколько узлов за одно редактирование?Из того, что я могу сказать, GetCellEditorValue() будет обновлять только один узел.

Мой редактор в настоящее время принимает выбранные узлы, сравнивает их и отображает различные значения, как при отображении других общих значений узлов.

Мой конструктор, который инициализирует «myDevice».

    public DeviceEditor(Collection<DefaultMutableTreeNode> nodes) throws NoSuchFieldException {
    System.out.println("CREATING NEW EDITOR \n");
    this.nodes = nodes;
    ObjectMatcher matcher = new ObjectMatcher();
    try {
        myDevice = matcher.match(nodes, DefaultDevice.CREATE_MULTIVALUE_DEFAULTDEVICE(), new DefaultDevice());
        //System.out.println("Device= " + myDevice.getAddress() + " " + myDevice.getHostName());
    } catch (Exception e) {
        System.out.println(e);
    }
    initComponents();

}

Методы TreeCellEditor

@Override
public Component getTreeCellEditorComponent(JTree jtree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
   // this.tree = jtree;
    return this;

}

@Override
public Object getCellEditorValue() {
    //This value is what is populated into the JTree
    return this.myDevice;
}

@Override
public boolean isCellEditable(EventObject eo) {
    //should be true only if it's a leaf. 
    return true;
}

@Override
public boolean shouldSelectCell(EventObject eo) {
    //Don't Select
    return false;
}

@Override
public boolean stopCellEditing() {
    try {
        System.out.println("\n Cell Editing Stopped");
        //update myDevice
        if (!this.addressField.getText().equals(DefaultDevice.MULTIVALUE)) {
            myDevice.setAddress(this.addressField.getText());
        }
        myDevice.setDeviceType(this.deviceTypeField.getText());
        myDevice.setLocation(this.locationField.getText());
        myDevice.setSerialNumber(this.serialField.getText());
        myDevice.setUser(this.userField.getText());
        myDevice.setPassword(new String(this.passwordField.getPassword()));
        myDevice.setVendor(this.vendorField.getText());
        myDevice.setModel(this.modelField.getText());
        myDevice.setOS(this.osField.getText());
        myDevice.setDescription(this.descriptionField.getText());
        myDevice.setVersion(this.versionField.getText());
        myDevice.setDeviceType(this.deviceTypeField.getText());
        myDevice.setDisplayHostName(this.hostNameCheckBox.isSelected());
        myDevice.setDisplayIPV4Address(this.ipV4checkBox.isSelected());
        myDevice.setDisplayIPV6Address(this.ipV6CheckBox.isSelected());

        DeviceEditor.UPDATE_DEVICES(nodes, myDevice);
        return true;
    } catch (IPConverter.InvalidIPException ex) {
        Exceptions.printStackTrace(ex);
        return false;
    }

}
...