我正在学习Java Swing,并且遇到了我想解决的光学问题。
当我在Windows 7上使用系统默认外观时,我会在浮动的JToolBar上获得巨大的关闭按钮和空标题栏。
仅浮动工具栏的图像(没有后台应用程序):
有没有办法去除周围的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);
}
}
});
答案 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);