代码如下,可copy运行
问题:为什么点击addleaf按钮时增加节点,每点一次都要多一个label宽度出来,要怎么改才正常添加一个label节点
急!!!!!!!!!!!!!!急!!!!!!!!!!!!!!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) {
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;
}
}
问题:为什么点击addleaf按钮时增加节点,每点一次都要多一个label宽度出来,要怎么改才正常添加一个label节点
急!!!!!!!!!!!!!!急!!!!!!!!!!!!!!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) {
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;
}
}
楼主【archer_xy】截止到2008-07-08 16:53:23的历史汇总数据(不包括此帖):
发帖的总数量:0 发帖的总分数:0 每贴平均分数:0
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
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;
}
}
正常做法应该怎么做?
树好想有个方法,expandRow(),展开节点用的