Swing Leere Felder in einem JTree nicht zulassen

Balbes

Mitglied
Hallo!
Ich habe einen editierbaren JTree. Ich möchte, dass leere Zellen als Blätter nicht zugelassen werden. Wenn ich z.B. die Zelle editiere und den Inhalt leer mache, soll eine Meldung gegeben werden und die Zelle wieder mit einem String z.B "defaut value" befüllt werden.
Ich mache so:
Java:
jtree.getModel().addTreeModelListener(new TreeModelListener() {
      public void treeNodesChanged(TreeModelEvent tme) {
        TreePath tp = tme.getTreePath();
        Object[] children = tme.getChildren();
        DefaultMutableTreeNode changedNode;
        if (children != null)
          changedNode = (DefaultMutableTreeNode) children[0];
        else
          changedNode = (DefaultMutableTreeNode) tp.getLastPathComponent();

        if(changedNode.getUserObject().toString().trim().length() == 0){
	        			  JOptionPane.showMessageDialog(null,
	        		                "The name cannot be empty!", "Error",
	        		                JOptionPane.WARNING_MESSAGE);	

       changedNode.setUserObject("defaut value");
      }

Das funktioniert aber nicht. Der Inhalt der Zelle bleibt leer. Was muss gemacht werden?
 
Java:
changedNode.getUserObject().toString().trim().length() == 0
versuche:
Java:
changedNode.getUserObject().toString().trim().equals("")
Strings werden mit String.equals(String) verglichen.
 
Das spielt keine grosse Rolle. Die Bedingung ist in beiden Fällen wahr. Es geht nicht darum, dass sie nicht erfüllt wird, sie wird erfüllt. Das Problem ist, dass die Zelle nach der Meldung leer bleibt und nicht "default value" enthält.
 
Sorry hatte mich eben verlesen. Habs eben mal ins Eclipse gepackt... Das tut

Java:
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

public class Tree extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JTree jTree = null;

	/**
	 * This is the default constructor
	 */
	public Tree() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJTree(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jTree
	 * 
	 * @return javax.swing.JTree
	 */
	private JTree getJTree() {

		jTree = new JTree();
		jTree.setEditable(true);
		jTree.getModel().addTreeModelListener(new TreeModelListener() {

			@Override
			public void treeNodesChanged(TreeModelEvent tme) {
				TreePath tp = tme.getTreePath();
				Object[] children = tme.getChildren();
				DefaultMutableTreeNode changedNode;
				if (children != null)
					changedNode = (DefaultMutableTreeNode) children[0];
				else
					changedNode = (DefaultMutableTreeNode) tp
							.getLastPathComponent();

				if (changedNode.getUserObject().toString().trim().length() == 0)
					JOptionPane.showMessageDialog(null,
							"The name cannot be empty!", "Error",
							JOptionPane.WARNING_MESSAGE);

				changedNode.setUserObject("defaut value");
			}

			@Override
			public void treeNodesInserted(TreeModelEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void treeNodesRemoved(TreeModelEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void treeStructureChanged(TreeModelEvent arg0) {
				// TODO Auto-generated method stub

			}

		});

		return jTree;
	}

}
 

Neue Themen


Zurück
Oben