将 JTable 放入 JTree 中

2024-02-18

与螺纹有关Jtable 作为 Jtree 节点 https://stackoverflow.com/questions/8839025/jtable-as-a-jtree-node我把 JTable 放到 JTree 中,但是JTree视图在启动时未正确呈现,我该怎么办setPreferredSize for JTable, 因为PreferredScrollableViewportSize缩小了JTable带渲染TableHeader + one Row, one Row保持隐藏状态,但展开 Node(s) TreeRenderer 后会更改并重新绘制setPreferredSize到预期的Dimension

import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.*;

public class TreeWithTableRenderer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTree tree;

    public TreeWithTableRenderer() {
        DefaultMutableTreeNode AA1 = new DefaultMutableTreeNode("AA1");
        DefaultMutableTreeNode AA2 = new DefaultMutableTreeNode("AA2");
        DefaultMutableTreeNode A = new DefaultMutableTreeNode("A");
        A.add(AA1);
        A.add(AA2);
        DefaultMutableTreeNode BB1 = new DefaultMutableTreeNode("BB1");
        DefaultMutableTreeNode BB2 = new DefaultMutableTreeNode("BB2");
        DefaultMutableTreeNode B = new DefaultMutableTreeNode("B");
        B.add(BB1);
        B.add(BB2);
        DefaultMutableTreeNode CC1 = new DefaultMutableTreeNode("CC1");
        DefaultMutableTreeNode CC2 = new DefaultMutableTreeNode("CC2");
        DefaultMutableTreeNode C = new DefaultMutableTreeNode("C");
        C.add(CC1);
        C.add(CC2);
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
        root.add(A);
        root.add(B);
        root.add(C);
        tree = new JTree(root);
        tree.setCellRenderer(new MyTableInTreeCellRenderer());
        tree.setRowHeight(0);
        JScrollPane jsp = new JScrollPane(tree);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(jsp, BorderLayout.CENTER);
        pack();
        setLocationRelativeTo(null);
    }

    class MyTableInTreeCellRenderer extends JPanel implements TreeCellRenderer {

        private static final long serialVersionUID = 1L;
        private JTable table;

        public MyTableInTreeCellRenderer() {
            super(new BorderLayout());
            table = new JTable();
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);
        }

        public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            final String v = (String) ((DefaultMutableTreeNode) value).getUserObject();
            table.setModel(new DefaultTableModel() {

                private static final long serialVersionUID = 1L;

                @Override
                public int getRowCount() {
                    return 2;
                }

                @Override
                public int getColumnCount() {
                    return 2;
                }

                @Override
                public Object getValueAt(int row, int column) {
                    return v + ":" + row + ":" + column;
                }
            });
            table.setPreferredScrollableViewportSize(table.getPreferredSize());
            return this;
        }
    }

    public static void main(String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new TreeWithTableRenderer().setVisible(true);
            }
        });
    }
}

摆脱scrollPane,无论如何它都是功能失调的(到目前为止我同意Russell的观点:-)并使用适当的LayoutManager将表格及其标题添加到面板中:

public MyTableInTreeCellRenderer() {
    super();
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    table = new JTable();
    add(table.getTableHeader());
    add(table);
}

您可能需要稍微调整一下视觉效果,左侧和顶部边框线丢失 - 不完全确定哪个组件正常绘制它们,可能是滚动窗格

Edit

忘记了:在计算渲染组件所需的大小(在ui委托中完成,即VariableHeightLayoutCache)时查询scrollPane的prefSize的原因是scrollPane尚未配置标题。查询发生在面板添加到 rendererPane 之前,完整的配置在表的 addNotify 中完成,只有在将面板添加到层次结构之后才会发生

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JTable 放入 JTree 中 的相关文章

随机推荐

  • 使布局为“内联块”的图像在底部具有悬停标题

    我正在开发一个图像库 并希望通过以下方式在图像底部显示标题 默认情况下显示图像 不带任何文本 将鼠标悬停在图像上时 深灰色半透明背景的底部会出现一个 可能被截断的 标题 最好我的 HTML 保持原样 最重要的是 图像保持为 显示 内联块 因
  • Visual C++ 2017 Redistributable 包可以支持使用 VC2015 的应用程序吗?

    如果我只安装Visual C 2017 可再发行组件在我的机器上 它可以支持为以下内容编写的应用程序吗 2015 换句话说 如果我卸载Visual C 2015 可再发行组件并安装Visual C 2017 可再发行组件 所有应用程序都会正
  • jQuery UI AutoComplete:仅允许从建议列表中选择值

    我正在实施jQuery UI 自动完成我想知道是否有什么方法只允许从建议结果返回的内容与允许在文本框中输入任何值相反 我将其用于标记系统 就像本网站上使用的标记系统一样 因此我只想允许用户从返回到自动完成插件的预填充列表中选择标记 你也可以
  • CGPath复制lineJoin和miterLimit没有明显影响

    我正在使用偏移 CGPath复制 strokingWithWidth lineCap lineJoin miterLimit transform https developer apple com reference coregraphic
  • 无法在 CentOS 7 上启动 postgresql 服务

    无法在 CentOS 7 上启动 postgresql 9 5 我关注了这个页面 https wiki postgresql org wiki YUM Installation https wiki postgresql org wiki
  • 如何为 Python 3.7 安装 fbprophet(anaconda 发行版)

    我尝试使用fbprophet使用Python进行时间序列分析 I ran from fbprophet import Prophet但得到了No module named fbprophet I think fbprophet不是 anac
  • 如何在透明矩形 svg 上添加阴影

    我想在透明的 SVG 元素上添加阴影 我尝试过使用各种不同类型的过滤器 但没有效果 svg 元素上的 css3 过滤器 filter drop shadow 0 6mm 4mm rgb 160 0 210 新的投影滤镜
  • jQuery UI 工具提示小部件自动关闭

    我如何在 1 秒后自动关闭 jQuery UI Tooltip Widget 我使用以下代码 var du 1000 document tooltip show effect slideDown delay du duration du 2
  • bson_ext gem 在 macOS 上安装失败

    我坚持安装 1 5 1 版本的 bson ext gem 我几乎尝试了在网上找到的所有内容 但没有任何帮助 我尝试重新安装ruby rvm等 我在用 RVM MacOs Catalina 10 15 6 红宝石2 6 5 捆绑安装后我得到这
  • 对于 .NET 项目,Elastic Beanstalk 和 CloudFormation 之间有什么区别? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我开发了一个 NET MVC 应用程序 并开始使用 AWS 并通过 Visual Studio Tool
  • EMR 与 AWS 上的 EC2/Hadoop

    我知道 EC2 比 EMR 更灵活 但工作量更大 然而就成本而言 如果使用 EC2 可能需要将 EBS 卷附加到 EC2 实例 而 AWS 只是从 S3 流入数据 因此 在 AWS 计算器上计算数字 即使对于 EMR 也必须为 EC2 付费
  • git 从合并中删除提交

    我有以下问题 我试图将远程分支合并到本地 然后将更改推送到存储库 好吧 我获取了具有三个提交的远程分支 但其中一个尚未完成 所以我不想推送一个这些提交到存储库 当我运行 git log 时 它向我显示以下内容 commit A1 merge
  • 是否可以在 MVC 5 控制器中的一项操作上禁用身份验证过滤器?

    AuthenticateUser public class HomeController Controller GET Home public ActionResult Index return View AllowAnonymous pu
  • Keras 中的反向传播?

    谁能告诉我 Keras 中的反向传播是如何完成的 我读到它在 Torch 中非常简单 在 Caffe 中很复杂 但我找不到任何关于使用 Keras 执行此操作的信息 我正在 Keras 中实现我自己的层 非常初学者 并且想知道如何进行反向传
  • C# 可序列化类到 xsd

    有没有办法从可序列化的 C 类输出 xml 模式 xsd 我浏览过网络 但不确定我是否在寻找正确的东西 Thanks 您正在寻找 XSD exehttp msdn microsoft com en us library x6c1kb0s a
  • Play Protect 无法识别该应用程序的开发者

    我尝试在 Google Play 以外的市场中发布我的应用程序 当我尝试安装我的应用程序时 它说 Play Protect 无法识别该应用程序的开发者 来自未知开发者的应用程序有时可能不安全 我认为问题可能出在应用程序的标志上 我通过另一个
  • IntelliJ 无法将爆炸战争部署到 tomcat

    我有一个 Java Web 应用程序 正在 IntelliJ 中开发并使用 Apache Tomcat 进行部署 我定义了一些在团队中的每个人之间共享的运行配置 这些运行配置被定义为将分解的战争工件部署到本地 tomcat 中 其他团队成员
  • 如何从检测意图 API 触发对话流事件?

    如何从 python 检测意图 API 触发对话流中的事件 我想在启动聊天窗口时立即触发欢迎意图 您需要将 WELCOME 事件作为查询输入的一部分发送到调用detect intent 它可能看起来像这样 import dialogflow
  • 在应用程序购买沙箱中不提示我输入登录/密码

    我们正在开发一款应用程序 当然 用于应用程序购买 IAP 我已完成指南中启用 iap 的所有操作 一切正常 直到我想购买 一些代码 MainViewController m void viewDidLoad if SKPaymentQueu
  • 将 JTable 放入 JTree 中

    与螺纹有关Jtable 作为 Jtree 节点 https stackoverflow com questions 8839025 jtable as a jtree node我把 JTable 放到 JTree 中 但是JTree视图在启