【问题标题】:How to remove/replace the close button from a floating JToolBar如何从浮动 JToolBar 中删除/替换关闭按钮
【发布时间】:2013-09-28 18:32:20
【问题描述】:

我正在学习 Java Swing,并且有一个我正在尝试解决的光学问题。

当我在 Windows 7 上使用系统默认外观时,我会在浮动 JToolBar 上看到巨大的关闭按钮和空标题栏。

仅浮动工具栏的图像(后台没有应用程序):

有没有办法去除浮动工具栏周围的边框和按钮? 或者至少调整它们的大小?

感谢 nachokk 的建议以及在 https://forums.oracle.com/thread/2279762 上找到的以下片段,我可能会向前迈出一步。但是,仍然无法正常工作。现在取消停靠后,工具栏变得不可见。

    tbFile = new JToolBar();
    tbFile.addHierarchyListener(new HierarchyListener() {

        @Override
        public void hierarchyChanged(HierarchyEvent e) {
            if ((e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED) == 0) return;
            JToolBar bar = (JToolBar) e.getComponent();
            if (!((BasicToolBarUI) bar.getUI()).isFloating()) return;
            final Window topLevel = SwingUtilities.windowForComponent(bar);
            if (topLevel instanceof JDialog) {
                //((JDialog) topLevel).setVisible(false);
                ((JDialog) topLevel).setUndecorated(true);
                //((JDialog) topLevel).setVisible(true);
            }    
        }
    });

【问题讨论】:

  • 不这么认为,换个Window主题
  • 您可以添加一张图片以更具描述性吗?试试JFrame#setUndecorated(true),如果你正在寻找它..
  • 我想在主框架中有装饰,但不是在工具栏中,同时浮动。不幸的是,JToolBar 类中没有 setUndecorated 方法。
  • @MaximShoustin,我不寻找个人的,而是通用的解决方案。对于任何操作系统上的每个用户
  • 在对话框可显示时设置 undecorated 属性是非法的 - 在调用该方法之前处理它。照原样,它抛出一个 IllegalStateException (奇怪地)被某处吞没。

标签: java swing look-and-feel jtoolbar


【解决方案1】:

感谢这里的 cmets 和 Yishai 在https://stackoverflow.com/a/875317/1107653 上的回答,我得到了我想要的 - 未装饰的浮动工具栏。 要使用 setUndecorated,首先要处理框架/对话框。

    tbFile = new JToolBar();
    final HierarchyListener hierarchyListener = new HierarchyListener() {

        @Override
        public void hierarchyChanged(HierarchyEvent e) {

            if ((e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED) == 0) return;
            JToolBar bar = (JToolBar) e.getComponent();
            if (!((BasicToolBarUI) bar.getUI()).isFloating()) return;

            Window topLevel = SwingUtilities.windowForComponent(bar);
            if(topLevel == null) return;

            topLevel.dispose();
            ((JDialog) topLevel).setUndecorated(true);
            topLevel.setVisible(true);

        }
    };
    tbFile.addHierarchyListener(hierarchyListener);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2016-03-14
    • 2010-10-25
    • 1970-01-01
    • 2016-10-01
    • 2015-10-10
    • 2017-05-20
    相关资源
    最近更新 更多