JDreeノードに使用するJTreeノードの可視性に問題があります。 モデルに新しいノードを追加したいとき、Jtreeはリフレッシュされません。JDialog - 動的に追加されたノードをJTreeで更新する
setRootVisible(true)を設定した場合と同じようにノードが更新されていますか。
ここにコードがあります。事前のおかげで
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class TestClass {
JTree tree;
DefaultTreeModel dm;
JDialog dialog;
public TestClass(){
JFrame frame = new JFrame("title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JPanel showPane = new JPanel();
showPane.setLayout(new BorderLayout());
dm = new DefaultTreeModel(new DefaultMutableTreeNode("root"));
tree = new JTree(dm);
tree.setRootVisible(false);
JButton button = new JButton("add node");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
dm.insertNodeInto(new DefaultMutableTreeNode("Node " + (root.getChildCount() + 1)), root, root.getChildCount());
int c = root.getChildCount();
System.out.println("child count: " + c);
for(int i=0; i<c; i++){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) root.getChildAt(i);
System.out.println("has node:" + node.getUserObject().toString());
}
}
});
showPane.add(tree, BorderLayout.CENTER);
showPane.add(button, BorderLayout.PAGE_END);
JComponent[] inputComponents = new JComponent[] {showPane};
Object[] opButtons = {"OK"};
JOptionPane optPane = new JOptionPane(inputComponents
, JOptionPane.PLAIN_MESSAGE
, JOptionPane.CLOSED_OPTION
, null
, opButtons
, opButtons[0]);
optPane.setPreferredSize(new Dimension(400 ,250));
dialog = optPane.createDialog(null, "Create new Application Node");
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
if(optPane.getValue() != null){
System.exit(0);
}
}
public static void main(String arg[]){
TestClass myClass = new TestClass();
}
}
追加されたノードを非表示にする2つの要素があります。 1)ルートは表示されません。 2)モデルが更新された後、ノードは拡張されません。 –