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();
}
}