當前位置:首頁 » 編程語言 » javajtree

javajtree

發布時間: 2022-05-21 09:34:35

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

熱點內容
python集合運算符 發布:2025-02-14 03:06:18 瀏覽:205
pic編譯軟體 發布:2025-02-14 03:01:04 瀏覽:984
反編譯在編譯 發布:2025-02-14 02:55:36 瀏覽:418
python列印對象 發布:2025-02-14 02:51:20 瀏覽:573
QRM演算法 發布:2025-02-14 02:45:19 瀏覽:265
c語言列印結構體 發布:2025-02-14 02:42:28 瀏覽:141
編譯技術實驗一 發布:2025-02-14 02:28:24 瀏覽:648
編程手機入門 發布:2025-02-14 02:27:40 瀏覽:733
區域網視頻android 發布:2025-02-14 02:23:56 瀏覽:423
麒麟系統如何安裝安卓程序 發布:2025-02-14 02:07:21 瀏覽:399