在java中如何响应单击JTree树中一个节点

在java中如何响应单击JTree树中一个节点,第1张

我给你写了一个例子 你看看吧 你看了就明白了

package tree;

import javaawtComponent;

import javaawtDimension;

import javaawtEvent;

import javaawtToolkit;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaawteventMouseAdapter;

import javaawteventMouseEvent;

import javabeansbeancontextBeanContext;

import javaxswingJFrame;

import javaxswingJLabel;

import javaxswingJMenuItem;

import javaxswingJPopupMenu;

import javaxswingJScrollPane;

import javaxswingJTextField;

import javaxswingJTree;

import javaxswingeventTreeSelectionEvent;

import javaxswingeventTreeSelectionListener;

import javaxswingtableDefaultTableModel;

import javaxswingtreeDefaultMutableTreeNode;

import javaxswingtreeDefaultTreeModel;

import comsunxmlinternalmessagingsaajpackagingmimeutilBEncoderStream;

public class MainFrame extends JFrame {

public static void main(String args[]) {

try {

MainFrame frame = new MainFrame();

Dimension frameSize = framegetSize();

Dimension screenSize = ToolkitgetDefaultToolkit()getScreenSize();

if(frameSizewidth>screenSizewidth){

frameSizewidth=screenSizewidth;

}

if(frameSizeheight>screenSizeheight){

frameSizeheight=screenSizeheight;

}

framesetLocation((screenSizewidth-frameSizewidth)/2, (screenSizeheight-frameSizeheight)/2);

framesetVisible(true);

} catch (Exception e) {

eprintStackTrace();

}

}

private JTree tree;

private DefaultMutableTreeNode root = new DefaultMutableTreeNode("语言");

private DefaultMutableTreeNode menu_accp = new DefaultMutableTreeNode("英语");

private DefaultMutableTreeNode menu_benet = new DefaultMutableTreeNode("法语");

private DefaultMutableTreeNode menu_accp_s1 = new DefaultMutableTreeNode("4级");

private DefaultMutableTreeNode menu_accp_s2 = new DefaultMutableTreeNode("6级");

private DefaultMutableTreeNode menu_accp_y2 = new DefaultMutableTreeNode("8级");

private JTextField txtParent;

private JTextField txtNode;

private JTextField txtType;

private JTextField txtChild;

private JPopupMenu popupMenu;

/

Create the frame

/

public MainFrame() {

super();

getContentPane()setLayout(null);

setBounds(100, 100, 535, 375);

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

final JScrollPane scrollPane = new JScrollPane();

scrollPanesetBounds(24, 10, 173, 317);

getContentPane()add(scrollPane);

tree = new JTree(root);

treeaddMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if(egetModifiers()==EventMETA_MASK){

addPopup(getContentPane(), popupMenu);

popupMenushow(getContentPane(),egetX()+30,egetY()+40);

}

}

});

treeaddTreeSelectionListener(new TreeSelectionListener() {

public void valueChanged(TreeSelectionEvent e) {

DefaultMutableTreeNode node = (DefaultMutableTreeNode) treegetLastSelectedPathComponent();

Object nodeInfo = nodegetUserObject();

if(nodeisRoot()){

txtParentsetText("");

txtNodesetText(nodeInfotoString());

txtTypesetText("根节点");

txtChildsetText(nodegetChildCount() + "");

}else{

txtParentsetText(nodegetParent()toString());

txtNodesetText(nodeInfotoString());

if(nodeisLeaf()){

txtTypesetText("叶节点");

}else{

txtTypesetText("枝节点");

}

txtChildsetText(nodegetChildCount() + "");

}

}

});

scrollPanesetViewportView(tree);

txtParent = new JTextField();

txtParentsetBounds(339, 49, 90, 21);

getContentPane()add(txtParent);

txtNode = new JTextField();

txtNodesetBounds(339, 107, 90, 21);

getContentPane()add(txtNode);

txtType = new JTextField();

txtTypesetBounds(339, 167, 90, 21);

getContentPane()add(txtType);

txtChild = new JTextField();

txtChildsetBounds(339, 231, 90, 21);

getContentPane()add(txtChild);

final JLabel label = new JLabel();

labelsetText("父类型节点");

labelsetBounds(225, 49, 90, 15);

getContentPane()add(label);

final JLabel label_1 = new JLabel();

label_1setText("节点的名称");

label_1setBounds(225, 107, 90, 15);

getContentPane()add(label_1);

final JLabel label_2 = new JLabel();

label_2setText("节点的类型");

label_2setBounds(225, 167, 90, 15);

getContentPane()add(label_2);

final JLabel label_3 = new JLabel();

label_3setText("子节点的个数");

label_3setBounds(225, 231, 90, 15);

getContentPane()add(label_3);

popupMenu = new JPopupMenu();

final JMenuItem menuItem = new JMenuItem();

menuItemaddActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

DefaultMutableTreeNode node = (DefaultMutableTreeNode) treegetLastSelectedPathComponent();

DefaultTreeModel model = (DefaultTreeModel) treegetModel();

modelremoveNodeFromParent(node);

}

});

menuItemsetText("删除");

popupMenuadd(menuItem);

//

}

private static void addPopup(Component component, final JPopupMenu popup) {

componentaddMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) {

if (eisPopupTrigger())

showMenu(e);

}

public void mouseReleased(MouseEvent e) {

if (eisPopupTrigger())

showMenu(e);

}

private void showMenu(MouseEvent e) {

popupshow(egetComponent(), egetX(), egetY());

}

});

}

}

我写过一个类似效果的阅读器, 用于记录笔记,或者阅读小说; 使用的组件是JTree ;

JTree添加一个选择事件的响应器,然后根据事件获取到当前选择的树节点, 然后读取对应的文字或者; 关键代码如下:

jtaddTreeSelectionListener(new TreeSelectionListener() {

    public void valueChanged(TreeSelectionEvent e) {

//写入你的逻辑代码

}

}

我的阅读器效果如下图(使用的是swing + BeautyEye的皮肤)

使用getLastSelectedPathComponent()方法,像下面这样:

DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) treegetLastSelectedPathComponent();

从根节点遍历查找,获取userObject来进行比较,一致时则设置选中该节点,需注意的是:

1树节点名称是可以重名的

2userObject对象并不一定是String对象

以上就是关于在java中如何响应单击JTree树中一个节点全部的内容,包括:在java中如何响应单击JTree树中一个节点、JAVA swing界面编程,怎么实现点击左边的树节点,然后在右边刷新界面,显示相关界面数据、swing JTree 怎样返回当前选择的 节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9743090.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存