在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例桌面应用界面/GUI → java swing树形控件示例源码(treeview)

java swing树形控件示例源码(treeview)

桌面应用界面/GUI

下载此实例
  • 开发语言:Java
  • 实例大小:0.03M
  • 下载次数:11
  • 浏览次数:224
  • 发布时间:2019-08-24
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:robot666
  • 文件格式:.zip
  • 所需积分:2
 相关标签: TreeView swing tree java view

实例介绍

【实例简介】AboveCellTreeToolTips.zip

【实例截图】

from clipboard

【核心代码】

// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@

package example;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.Objects;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeSelectionModel;

public final class MainPanel extends JPanel {
  private MainPanel() {
    super(new BorderLayout());

    JTree tree0 = new JTree(new DefaultTreeModel(makeTreeRoot())) {
      @Override public void updateUI() {
        super.updateUI();
        setCellRenderer(new TooltipTreeCellRenderer());
      }
    };
    ToolTipManager.sharedInstance().registerComponent(tree0);

    JTree tree1 = new TooltipTree(new DefaultTreeModel(makeTreeRoot()));
    ToolTipManager.sharedInstance().registerComponent(tree1);

    JPanel p = new JPanel(new GridLayout(2, 1));
    p.add(makeTitledPanel("Default location", tree0));
    p.add(makeTitledPanel("Draw directly above the cell", tree1));

    JSplitPane sp = new JSplitPane();
    sp.setResizeWeight(.5);
    sp.setLeftComponent(p);
    sp.setRightComponent(new JLabel("dummy panel"));

    add(sp);
    setPreferredSize(new Dimension(320, 240));
  }

  private static DefaultMutableTreeNode makeTreeRoot() {
    DefaultMutableTreeNode set4 = new DefaultMutableTreeNode("Set 00000004");
    set4.add(new DefaultMutableTreeNode("222222111111111111111122222"));
    set4.add(new DefaultMutableTreeNode("eeeeeeeeeeeee"));
    set4.add(new DefaultMutableTreeNode("bbbbbbbbbbbb"));
    set4.add(new DefaultMutableTreeNode("zzzzzzz"));

    DefaultMutableTreeNode set1 = new DefaultMutableTreeNode("Set 00000001");
    set1.add(new DefaultMutableTreeNode("33333333333333333333333333333333333"));
    set1.add(new DefaultMutableTreeNode("111111111"));
    set1.add(new DefaultMutableTreeNode("22222222222"));
    set1.add(set4);
    set1.add(new DefaultMutableTreeNode("222222"));
    set1.add(new DefaultMutableTreeNode("222222222"));

    DefaultMutableTreeNode set2 = new DefaultMutableTreeNode("Set 00000002");
    set2.add(new DefaultMutableTreeNode("eeeeeeeeeeeee"));
    set2.add(new DefaultMutableTreeNode("bbbbbbbbbbbb"));

    DefaultMutableTreeNode set3 = new DefaultMutableTreeNode("Set 00000003");
    set3.add(new DefaultMutableTreeNode("zzzzzzz"));
    set3.add(new DefaultMutableTreeNode("aaaaaaaaaaaa"));
    set3.add(new DefaultMutableTreeNode("ccccccccc"));

    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
    root.add(new DefaultMutableTreeNode("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
    root.add(set3);
    root.add(new DefaultMutableTreeNode("eeeeeeeeeeeeeeeeeeeeeeeeeeeee"));
    root.add(set1);
    root.add(set2);
    root.add(new DefaultMutableTreeNode("22222222222222222222222222222222222"));
    root.add(new DefaultMutableTreeNode("bbbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
    return root;
  }

  private static Component makeTitledPanel(String title, Component c) {
    JScrollPane scroll = new JScrollPane(c);
    scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    JPanel p = new JPanel(new BorderLayout());
    p.setBorder(BorderFactory.createTitledBorder(title));
    p.add(scroll);
    return p;
  }

  public static void main(String... args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGui();
      }
    });
  }

  public static void createAndShowGui() {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
      ex.printStackTrace();
      Toolkit.getDefaultToolkit().beep();
    }
    JFrame frame = new JFrame("@title@");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.getContentPane().add(new MainPanel());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

class TooltipTree extends JTree {
  private final JLabel label = new JLabel() {
    @Override public Dimension getPreferredSize() {
      Dimension d = super.getPreferredSize();
      d.height = getRowHeight();
      return d;
    }
  };

  protected TooltipTree(TreeModel model) {
    super(model);
  }

  @Override public void updateUI() {
    super.updateUI();
    // setRowHeight(24);
    setCellRenderer(new TooltipTreeCellRenderer());
  }

  @Override public Point getToolTipLocation(MouseEvent e) {
    Point p = e.getPoint();
    int i = getRowForLocation(p.x, p.y);
    Rectangle cellBounds = getRowBounds(i);
    if (i >= 0 && Objects.nonNull(cellBounds) && cellBounds.contains(p.x, p.y)) {
      TreeSelectionModel tsm = getSelectionModel();
      Object node = getPathForRow(i).getLastPathComponent();
      // System.out.println(node);
      boolean hasFocus = hasFocus() && tsm.getLeadSelectionRow() == i;
      boolean isLeaf = getModel().isLeaf(node);
      TreeCellRenderer r = getCellRenderer();
      Component tcr = r.getTreeCellRendererComponent(this, node, isRowSelected(i), isExpanded(i), isLeaf, i, hasFocus);
      if (tcr instanceof JComponent && Objects.nonNull(((JComponent) tcr).getToolTipText())) {
        // System.out.println(((JComponent) tcr).getToolTipText());
        Point pt = cellBounds.getLocation();
        // label.setBorder(BorderFactory.createLineBorder(Color.RED));
        Insets ins = label.getInsets();
        pt.translate(-ins.left, -ins.top);
        label.setIcon(new RendererIcon(tcr, cellBounds));
        // System.out.println(pt);
        return pt;
      }
    }
    return null;
  }

  // @Override public String getToolTipText(MouseEvent e) {
  //   String str = super.getToolTipText(e);
  //   System.out.println("getToolTipText: "   str);
  //   return str;
  // }

  @Override public JToolTip createToolTip() {
    JToolTip tip = new JToolTip() {
      @Override public Dimension getPreferredSize() {
        return label.getPreferredSize();
      }
    };
    // System.out.println("createToolTip");
    tip.setBorder(BorderFactory.createEmptyBorder());
    tip.setLayout(new BorderLayout());
    tip.setComponent(this);
    tip.add(label);
    return tip;
  }
}

class TooltipTreeCellRenderer implements TreeCellRenderer {
  private final TreeCellRenderer renderer = new DefaultTreeCellRenderer();

  @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    JLabel l = (JLabel) renderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
    l.setToolTipText(value == null ? null : value.toString());
    // Container c = SwingUtilities.getAncestorOfClass(JScrollPane.class, tree);
    // if (c instanceof JScrollPane) {
    //   Insets i = l.getInsets();
    //   Rectangle rect = ((JScrollPane) c).getViewportBorderBounds();
    //   FontMetrics fm = l.getFontMetrics(l.getFont());
    //   String str = Objects.toString(value, "");
    //   l.setToolTipText(fm.stringWidth(str) > rect.width ? str : null);
    // }
    return l;
  }
}

class RendererIcon implements Icon {
  private final Component renderer;
  private final Rectangle rect;

  protected RendererIcon(Component renderer, Rectangle rect) {
    this.renderer = renderer;
    this.rect = rect;
    rect.setLocation(0, 0);
  }

  @Override public void paintIcon(Component c, Graphics g, int x, int y) {
    if (c instanceof Container) {
      Graphics2D g2 = (Graphics2D) g.create();
      g2.clearRect(0, 0, c.getWidth(), c.getHeight());
      // g2.translate(x, y);
      SwingUtilities.paintComponent(g2, renderer, (Container) c, rect);
      g2.dispose();
    }
  }

  @Override public int getIconWidth() {
    return renderer.getPreferredSize().width;
  }

  @Override public int getIconHeight() {
    return renderer.getPreferredSize().height;
  }
}

实例下载地址

java swing树形控件示例源码(treeview)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警