javajtree
❶ java JTree 布局
第一个是改变一下显示风格。
第二个,应该是你使用了布局。换成null的即可控制。
标记一下,晚上给出代码。
❷ java组件JTree问题,怎么给树的子节点注册鼠标双击监听
就是用JTree.addMouseListener就可以了。
然后在mouseClicked(MouseEvent e)方法中通过下面的方法获取所选的结点
TreePath path = testTree.getPathForLocation(e.getX(), e.getY());
TreeNode node = (TreeNode) path.getLastPathComponent();
可以用e.getClickCount()方法的返回值来判断是否双击
❸ 如何去掉Java中jtree中的背景颜色
/实例化一个DefaultTreeCellRenderer对象
DefaultTreeCellRenderer cellRender=new DefaultTreeCellRenderer();
//设置处于折叠状态下非叶子节点的图标
cellRender.setClosedIcon(new ImageIcon(EmployeeInfo.class.getResource("/org/somken//00003.gif")));
//设置叶子节点的图标
cellRender.setLeafIcon(new ImageIcon(EmployeeInfo.class.getResource("/org/somken//00004.gif")));
//设置处于展开状态下非叶子节点的图标
cellRender.setOpenIcon(new ImageIcon(EmployeeInfo.class.getResource("/org/somken//00002.gif")));
//设置非选定节点的背景色
cellRender.(Color.WHITE);
//设置节点在选中状态下的背景色
cellRender.setBackgroundSelectionColor(Color.lightGray);
//设置选中状态下节点边框的颜色
cellRender.setBorderSelectionColor(Color.MAGENTA);
//设置绘制选中状态下节点文本的颜色
cellRender.setTextSelectionColor(Color.MAGENTA);
tree.setCellRenderer(cellRender);
❹ Java中,Jtree的setShowsRootHandles(true)有什么实际用途
设置 showsRootHandles 属性的值,它指定是否应显示节点句柄。此属性的默认值取决于用于创建 JTree 的构造方法。某些外观可能不支持句柄;它们将忽略此属性。
这是java api中对这个方法的解释,具体的就是先不显示根(你添加到树中的root)所延伸出来的线条,默认是true
❺ Java中JTree用setRootVisible(false)隐藏它的根节点后,整棵树都不显示了,该怎么办啊
需要在设置子节点后,并且先设置根节点展开,再setRootVisible(false)就可以了。
网页链接
❻ 初学java,如何把JTree组件添加到界面中
/**
*把代码复制到文件,可以运行。
*/
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.Rectangle;
importjava.awt.Transparency;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.image.BufferedImage;
importjavax.swing.Icon;
importjavax.swing.ImageIcon;
importjavax.swing.JDialog;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTree;
importjavax.swing.UIManager;
importjavax.swing.tree.DefaultMutableTreeNode;
importjavax.swing.tree.TreeCellRenderer;
/**
*
*@authorbeans
*/
publicclassTreeMain{
publicstaticvoidmain(String[]args){
newTreeMain().showDialog();
}
publicTreeMain(){
}
/**
*显示窗口
*/
privatevoidshowDialog(){
JDialogdialog=newJDialog();
dialog.setBounds(newRectangle(50,50,380,280));
dialog.setTitle("演示树");
dialog.addWindowListener(newWindowAdapter(){
@Override
publicvoidwindowClosing(WindowEvente){
dialog.setVisible(false);
dialog.dispose();
}
});
dialog.add(this.getPanel(),BorderLayout.CENTER);
dialog.setVisible(true);
}
privateJPanelgetPanel(){
JPanelpanel=newJPanel();
JScrollPanetreePanel=newJScrollPane();
treePanel.setViewportView(this.getTree());
javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(panel);
panel.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(treePanel,javax.swing.GroupLayout.DEFAULT_SIZE,380,Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(treePanel,javax.swing.GroupLayout.PREFERRED_SIZE,272,javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(18,Short.MAX_VALUE))
);
panel.add(treePanel,BorderLayout.CENTER);
returnpanel;
}
/**
*取得树。
*
*@return
*/
privateJTreegetTree(){
DefaultMutableTreeNoderoot=newDefaultMutableTreeNode();
root.add(this.getNode());
root.add(this.getNode());
root.add(this.getNode());
JTreejtree=newJTree(root);
jtree.setRootVisible(false);
jtree.setCellRenderer(newCTreeCellRenderer());
jtree.expandRow(1);
returnjtree;
}
/**
*取得树节点。
*
*@return
*/
(){
DefaultMutableTreeNodenode=newDefaultMutableTreeNode(newNodeObject(true,"节"));
for(inti=0;i<5;i++){
DefaultMutableTreeNodeleaf=newDefaultMutableTreeNode(newNodeObject(false,"叶"+i));
node.add(leaf);
}
returnnode;
}
/**
*树节点和树叶,关联对象。
*/
classNodeObject{
booleanisNode;
Stringname;
/**
*
*@paramisNodethevalueofisNode
*@paramnamethevalueofname
*/
NodeObject(booleanisNode,Stringname){
this.isNode=isNode;
this.name=name;
}
/**
*图标
*
*@paramisSelect选中节点时返回不同的图标。
*@return
*/
ImageIcongetIcon(booleanisSelect){
intwh=20;
BufferedImageimage=newBufferedImage(wh,wh,BufferedImage.TYPE_INT_ARGB);
Graphics2Dg2=image.createGraphics();
image=g2.getDeviceConfiguration().createCompatibleImage(wh,wh,Transparency.TRANSLUCENT);
Graphics2Dg2d=image.createGraphics();
Fontfont=newFont("Dialog",Font.PLAIN,wh-4);
g2d.setFont(font);
g2d.setBackground(Color.WHITE);
g2d.setColor(Color.BLACK);
g2d.drawString(isSelect?"S":"N",0,wh-1);
g2d.setColor(this.isNode?Color.RED:Color.YELLOW);
g2d.drawLine(0,5,wh,5);
g2d.drawLine(0,10,wh,10);
g2d.drawLine(0,15,wh,15);
g2d.dispose();
g2.dispose();
returnnewImageIcon(image);
}
StringgetName(){
returnthis.name;
}
}
/**
*树渲染器
*/
{
protectedColorm_textSelectionColor;
protectedColorm_textNonSelectionColor;
protectedColorm_bkSelectionColor;
protectedColorm_bkNonSelectionColor;
protectedColorm_borderSelectionColor;
protectedbooleanm_selected;
publicCTreeCellRenderer(){
m_textSelectionColor=UIManager.getColor("Tree.selectionForeground");
m_textNonSelectionColor=UIManager.getColor("Tree.textForeground");
m_bkSelectionColor=UIManager.getColor("Tree.selectionBackground");
m_bkNonSelectionColor=UIManager.getColor("Tree.textBackground");
m_borderSelectionColor=UIManager.getColor("Tree.selectionBorderColor");
}
@Override
(JTreetree,Objectvalue,
booleanselected,booleanexpanded,booleanleaf,introw,booleanhasFocus){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)value;
NodeObjectobj=(NodeObject)node.getUserObject();
this.setIcon(obj.getIcon(selected));
this.setText(""+obj.getName()+"");
this.setForeground(selected?m_textSelectionColor:m_textNonSelectionColor);
this.setBackground(selected?m_bkSelectionColor:m_bkNonSelectionColor);
this.m_selected=selected;
returnthis;
}
@Override
publicvoidpaint(Graphicsg){
ColorbColor=this.getBackground();
Iconicon=this.getIcon();
g.setColor(bColor);
intoffset=0;
if(icon!=null&&getText()!=null){
offset=(icon.getIconWidth()+this.getIconTextGap());
}
g.fillRect(offset,0,this.getWidth()-1-offset,this.getHeight()-1);
if(this.m_selected){
g.setColor(this.m_borderSelectionColor);
g.drawRect(offset,0,this.getWidth()-1-offset,this.getHeight()-1);
}
super.paint(g);
}
}
}
❼ java怎样把一个现有文件夹的结构创建成一个JTree
package tmp;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.Icon;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.Arrays;
public class TestJTree extends JFrame {
private JPanel contentPane;
private Picture pic=null;
private String rootPath=TestJTree.class.getResource("/").getPath();
private JTree tree;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestJTree frame = new TestJTree();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestJTree() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JSplitPane splitPane = new JSplitPane();
splitPane.setDividerLocation(120);
contentPane.add(splitPane, BorderLayout.CENTER);
MyTreeNode AA = new MyTreeNode(new File(rootPath+"AA"));
tree = new JTree(AA);
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)&& e.getClickCount() == 1) {
MyTreeNode node = (MyTreeNode) tree.getLastSelectedPathComponent();
FileNode fn=(FileNode) node.getUserObject();
File f=fn.getFile();
if(!f.isDirectory()){
pic.loadPic(f.getAbsolutePath());
}
}
}
});
splitPane.setLeftComponent(tree);
pic=new Picture();
splitPane.setRightComponent(pic);
}
}
class MyTreeNode extends DefaultMutableTreeNode{
MyTreeNode(File file){
super(new FileNode(file));
FileNode fn=(FileNode)this.userObject;
File f=fn.getFile();
if(f.isDirectory()){
File[] fs=f.listFiles();
for(File ff:fs){
this.add(new MyTreeNode(ff));
}
}
}
}
class FileNode{
private String name;
private File file;
public FileNode(File file){
this.file=file;
name=file.getName();
}
public String toString(){
return name;
}
public String getName() {
return name;
}
public File getFile() {
return file;
}
}
class Picture extends JPanel {
private String picName;
public Picture(String picName){
this.picName=picName;
}
public Picture() {
}
public void paint (Graphics g) {
g.clearRect(0, 0, this.getWidth(), this.getWidth());
if(this.picName!=null){
Image image = this.getToolkit().getImage(picName);
g.drawImage(image, 0, 0, this);
}
}
public void loadPic(String picName){
this.picName=picName;
repaint();
}
}
//界面编程经验不多,代码可能有诸多不当之处,见谅
❽ java的JTree的使用方法,
JTree组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。
例如 Windows 系统的文件管理器,它就是一个典型的树层次结构。
JTree的构造函数:
·JTree() 建立一棵默认的树。
·JTree(Hashtable data) 利用Hashtable建立树。
·JTree(Object[] data) 利用数组建立树。
·JTree(TreeModel model) 利用TreeModel建立树。
·JTree(TreeNode root) 建立以root为根的树。
·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。
·JTree(Vector value) 利用Vector建立树。
使用一个JTree可以简单地像下面这样表示:
importjavax.swing.JFrame;
importjavax.swing.JTree;
importjavax.swing.event.TreeSelectionEvent;
importjavax.swing.event.TreeSelectionListener;
importjavax.swing.tree.DefaultMutableTreeNode;
publicclassTreeDemo{
publicstaticvoidmain(String[]args){
//创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
//publicDefaultMutableTreeNode(ObjectuserObject)
DefaultMutableTreeNodenode1=newDefaultMutableTreeNode("软件部");
node1.add(newDefaultMutableTreeNode(newUser("小花")));
node1.add(newDefaultMutableTreeNode(newUser("小虎")));
node1.add(newDefaultMutableTreeNode(newUser("小龙")));
DefaultMutableTreeNodenode2=newDefaultMutableTreeNode("销售部");
node2.add(newDefaultMutableTreeNode(newUser("小叶")));
node2.add(newDefaultMutableTreeNode(newUser("小雯")));
node2.add(newDefaultMutableTreeNode(newUser("小夏")));
DefaultMutableTreeNodetop=newDefaultMutableTreeNode("职员管理");
top.add(newDefaultMutableTreeNode(newUser("总经理")));
top.add(node1);
top.add(node2);
finalJTreetree=newJTree(top);
JFramef=newJFrame("JTreeDemo");
f.add(tree);
f.setSize(300,300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加选择事件
tree.addTreeSelectionListener(newTreeSelectionListener(){
@Override
publicvoidvalueChanged(TreeSelectionEvente){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree
.getLastSelectedPathComponent();
if(node==null)
return;
Objectobject=node.getUserObject();
if(node.isLeaf()){
Useruser=(User)object;
System.out.println("你选择了:"+user.toString());
}
}
});
}
}
classUser{
privateStringname;
publicUser(Stringn){
name=n;
}
//重点在toString,节点的显示文本就是toString
publicStringtoString(){
returnname;
}
}
❾ java swing jtree 什么是树的数据模型
Swing树使用人们所熟悉的文件夹和树叶图来显示分层的数据。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以有子节点,除根节点之外的所有节点都只有一个父节点。空的文件夹与树叶的不同之处就在于它允许有子节点。
除父节点和子节点外,树的节点还有一个用户对象(当使用DefaultTreeModel时就会呈现一个用户对象)。用户对象是Object类型,因此它提供了一个将任意对象与节点相关联的办法。
树有一个简单的模型,每一个JTree实例都要维护对绘制器和编辑器的引用,这个绘制器和编辑器被树中所有的节点所使用。表1中列出了swing.tree包中的主要类。
1.构建树
DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");//为了构建一个默认的树模型,必须提供一个根节点
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
root.add(country);
...
DefaultTreeModel treeModel = new DefaultTreeModel(root);//用根节点构建一个DefaultTreeModel树模型
JTree tree = new JTree(treeModel);//用这个树模型构建一个JTree树
或者,直接将根节点传递给JTree构造器,那么这课树会自动构建一个默认的树模型:
JTree tree = new JTree(root);
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(tree));
❿ java树组件JTree的用法,要求详解啊!!
树都是由节点组成的.并且一颗树只有一个根节点,下面是代码运行的javapackage demo1;import java.awt.Toolkit;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Dimension;public class Application1 {
boolean packFrame = false; /**
* Construct and show the application.
*/
public Application1() {
Frame1 frame = new Frame1();
// Validate frames that have preset sizes
// Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
} // Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
} /**
* Application entry point.
*
* @param args String[]
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception exception) {
exception.printStackTrace();
} new Application1();
}
});
}
}package demo1;
import java.awt.Toolkit;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.BorderFactory;public class Frame1
extends JFrame {
JPanel contentPane;
JPanel jPanel1 = new JPanel();
JTree jTree1;
BorderLayout borderLayout1 = new BorderLayout();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
} /**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(465, 380));
setTitle("Frame Title");
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(new Rectangle(37, 12, 216, 317));
jPanel1.setLayout(borderLayout1);
contentPane.add(jPanel1);
DefaultMutableTreeNode root=new DefaultMutableTreeNode("根节点");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("子节点");
DefaultMutableTreeNode r01=new DefaultMutableTreeNode("子节点下的节点");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("子节点2");
DefaultMutableTreeNode r3=new DefaultMutableTreeNode("子节点三");
// 向根节点中添加子节点
root.add(r1);
root.add(r2);
r1.add(r01);
root.add(r3);
jTree1=new JTree(root);
jPanel1.add(jTree1, java.awt.BorderLayout.NORTH);
//传入根节点
this.setVisible(true);
this.setBounds(100,100,400,500); }
public static void main(String[] args) {
Frame1 f=new Frame1();
}
}