如何从浮动JToolBar中删除/替换关闭按钮

时间:2013-09-28 18:32:21

标签: java swing look-and-feel jtoolbar

我正在学习Java Swing,并且遇到了我想解决的光学问题。

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

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

the floating toolbar

有没有办法去除周围的Borders&浮动工具栏的按钮? 或者至少调整它们的尺寸?

感谢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);
            }    
        }
    });

1 个答案:

答案 0 :(得分:0)

感谢这里的评论以及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);