vector里添加了东西,如何让jtree刷新,现在我的做法是new 了一个新的 jtree,这样是不合理的,求正确做法import java.awt.Color;
import java.awt.Component;
import java.util.Vector;import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;public class NewJFrame1 extends javax.swing.JFrame {    public NewJFrame1() {        initComponents();
        init();
    }    private void init() {
        rootVector.addElement(fileVector);
    }    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {        jScrollPane1 = new javax.swing.JScrollPane();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        jButton1.setText("addfile");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });        jButton2.setText("addleaf");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(
            javax.swing.GroupLayout.Alignment.LEADING).addGroup(
            layout.createSequentialGroup().addContainerGap().addComponent(
                jScrollPane1,
                javax.swing.GroupLayout.PREFERRED_SIZE,
                158,
                javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(
                javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(
                    jButton1).addComponent(jButton2)).addContainerGap(32, Short.MAX_VALUE)));
        layout.setVerticalGroup(layout.createParallelGroup(
            javax.swing.GroupLayout.Alignment.LEADING).addGroup(
            layout.createSequentialGroup().addContainerGap().addGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                    layout
                        .createSequentialGroup()
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton2)).addComponent(
                    jScrollPane1,
                    javax.swing.GroupLayout.DEFAULT_SIZE,
                    424,
                    Short.MAX_VALUE)).addContainerGap()));        pack();
    }// </editor-fold>    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        rootVector.addElement(new NamedVector("新建文件夹"));
        initTree();
    }    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        fileVector.addElement(new JLabel("ccc"));
        initTree();
    }    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }    private void initTree() {
        tree = new JTree(rootVector);
        TreeCellRenderer renderer = new BookCellRenderer();
        tree.setCellRenderer(renderer);        jScrollPane1.setViewportView(tree);
    }    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;    private javax.swing.JButton jButton2;    private javax.swing.JScrollPane jScrollPane1;    // End of variables declaration
    public Vector fileVector = new NamedVector("新建文件夹");    public Vector rootVector = new NamedVector("root");    private javax.swing.JTree tree;
}class NamedVector extends Vector {    String name;    public NamedVector(String name) {
        this.name = name;
    }    public String toString() {
        return "[" + name + "]";
    }
}class BookCellRenderer extends DefaultTreeCellRenderer {    JPanel jPanel;    DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();    public BookCellRenderer() {
        jPanel = new JPanel();        jPanel.setBorder(BorderFactory.createLineBorder(Color.black));
        backgroundSelectionColor = defaultRenderer.getBackgroundSelectionColor();
        backgroundNonSelectionColor = defaultRenderer.getBackgroundNonSelectionColor();
    }    public Component getTreeCellRendererComponent(JTree tree,
                                                  Object value,
                                                  boolean selected,
                                                  boolean expanded,
                                                  boolean leaf,
                                                  int row,
                                                  boolean hasFocus) {        Component returnValue = null;
        if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
            Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
            if (userObject instanceof JLabel) {                if(jPanel != null){
                    jPanel = new JPanel();
                    jPanel.setBorder(BorderFactory.createLineBorder(Color.black));
                }
                jPanel.add((JLabel) userObject);                if (selected) {
                    jPanel.setBackground(backgroundSelectionColor);
                } else {
                    jPanel.setBackground(backgroundNonSelectionColor);
                }
                jPanel.setEnabled(tree.isEnabled());
                returnValue = jPanel;
            }
        }
        if (returnValue == null) {
            returnValue =
                    defaultRenderer.getTreeCellRendererComponent(
                        tree,
                        value,
                        selected,
                        expanded,
                        leaf,
                        row,
                        hasFocus);
        }
        return returnValue;
    }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【archer_xy】截止到2008-07-09 11:15:30的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:50                       每贴平均分数:50                       
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:1                        结贴的总分数:50                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    ...还没搞定阿?记得上个帖子里我写了阿,updateUI就行import java.awt.Color;
    import java.awt.Component;
    import java.util.Vector;import javax.swing.BorderFactory;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.tree.MutableTreeNode;
    import javax.swing.tree.TreeCellRenderer;public class NewJFrame1 extends javax.swing.JFrame {    public NewJFrame1() {        initComponents();
            init();
        }    private void init() {
            rootVector.addElement(fileVector);
        }    // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {        jScrollPane1 = new javax.swing.JScrollPane();
            jButton1 = new javax.swing.JButton();
            jButton2 = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        jButton1.setText("addfile");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });        jButton2.setText("addleaf");
            jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton2ActionPerformed(evt);
                }
            });        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addContainerGap().addComponent(
                    jScrollPane1,
                    javax.swing.GroupLayout.PREFERRED_SIZE,
                    158,
                    javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(
                    javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(
                        jButton1).addComponent(jButton2)).addContainerGap(32, Short.MAX_VALUE)));
            layout.setVerticalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addContainerGap().addGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                        layout
                            .createSequentialGroup()
                            .addComponent(jButton1)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(jButton2)).addComponent(
                        jScrollPane1,
                        javax.swing.GroupLayout.DEFAULT_SIZE,
                        424,
                        Short.MAX_VALUE)).addContainerGap()));        pack();
        }// </editor-fold>    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            rootVector.addElement(new NamedVector("新建文件夹"));
            initTree();
        }    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
            ((DefaultMutableTreeNode) ((DefaultMutableTreeNode) tree.getModel().getRoot())
                .getChildAt(0)).add(new DefaultMutableTreeNode("ccc"));
    //        fileVector.addElement(new JLabel("ccc"));
            tree.expandRow(0);
            tree.updateUI();
        }    public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {
                    new NewJFrame1().setVisible(true);
                }
            });
        }    private void initTree() {
            tree = new JTree(rootVector);
            TreeCellRenderer renderer = new BookCellRenderer();
            tree.setCellRenderer(renderer);        jScrollPane1.setViewportView(tree);
        }    // Variables declaration - do not modify
        private javax.swing.JButton jButton1;    private javax.swing.JButton jButton2;    private javax.swing.JScrollPane jScrollPane1;    // End of variables declaration
        public Vector fileVector = new NamedVector("新建文件夹");    public Vector rootVector = new NamedVector("root");    private javax.swing.JTree tree;
    }class NamedVector extends Vector {    String name;    public NamedVector(String name) {
            this.name = name;
        }    public String toString() {
            return "[" + name + "]";
        }
    }class BookCellRenderer extends DefaultTreeCellRenderer {    JPanel jPanel;    DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();    public BookCellRenderer() {
            jPanel = new JPanel();        jPanel.setBorder(BorderFactory.createLineBorder(Color.black));
            backgroundSelectionColor = defaultRenderer.getBackgroundSelectionColor();
            backgroundNonSelectionColor = defaultRenderer.getBackgroundNonSelectionColor();
        }    public Component getTreeCellRendererComponent(JTree tree,
                                                      Object value,
                                                      boolean selected,
                                                      boolean expanded,
                                                      boolean leaf,
                                                      int row,
                                                      boolean hasFocus) {        Component returnValue = null;
            if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
                Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
                if (userObject instanceof JLabel) {                if (jPanel != null) {
                        jPanel = new JPanel();
                        jPanel.setBorder(BorderFactory.createLineBorder(Color.black));
                    }
                    jPanel.add((JLabel) userObject);                if (selected) {
                        jPanel.setBackground(backgroundSelectionColor);
                    } else {
                        jPanel.setBackground(backgroundNonSelectionColor);
                    }
                    jPanel.setEnabled(tree.isEnabled());
                    returnValue = jPanel;
                }
            }
            if (returnValue == null) {
                returnValue =
                        defaultRenderer.getTreeCellRendererComponent(
                            tree,
                            value,
                            selected,
                            expanded,
                            leaf,
                            row,
                            hasFocus);
            }
            return returnValue;
        }
    }
      

  3.   

    懂了,我把你那句代码改成这样了:
     ((DefaultMutableTreeNode) ((DefaultMutableTreeNode) tree.getModel().getRoot()).getChildAt(0)).add(new DefaultMutableTreeNode(new JLabel("haha")));
    thank you