【发布时间】:2014-11-13 03:24:35
【问题描述】:
我想要一个能够像 Eclipse IDE 一样处理 JTabbedPane 的 JInternalFrame。我希望标签位于标题栏的顶部。每个选项卡都应该有自己的关闭按钮。 InternalFrame 还应该有一个关闭按钮,以便用户可以一次性关闭所有选项卡。
这就是我所拥有的:
这就是我想要的(截图取自 Eclipse IDE):
我不知道如何才能做到这一点。谁能指出我正确的方向?
编辑:
根据对 UI Delegate 的评论,我创建了一个能够删除菜单的 UI 代理子类,但是这样做存在一些问题:
-
与普通的 JInternalFrame 相比,它看起来有点有趣,尽管我没有对它做任何事情,只是将“createActionMap”和“add(menuBar)”行注释掉。
-
我在库代码中找不到任何地方来指示标题栏和 contentPane 位置的设置方式 - 显然我想移动 contentPane 的位置以与标题栏重叠。
代码如下:
public class MyInternalFrameUI extends BasicInternalFrameUI {
public MyInternalFrameUI(JInternalFrame b) {
super(b);
// TODO Auto-generated constructor stub
}
public static ComponentUI createUI(JComponent b) {
return new MyInternalFrameUI((JInternalFrame)b);
}
protected JComponent createNorthPane(JInternalFrame w) {
titlePane = new MyBasicInternalFrameTitlePane(w);
return titlePane;
}
}
public class MyBasicInternalFrameTitlePane extends BasicInternalFrameTitlePane {
public MyBasicInternalFrameTitlePane(JInternalFrame f) {
super(f);
}
protected void installTitlePane() {
installDefaults();
installListeners();
createActions();
enableActions();
//createActionMap(); // This method is package protected and not visible
setLayout(createLayout());
assembleSystemMenu();
createButtons();
addSubComponents();
}
protected void addSubComponents() {
//add(menuBar); // Remove this to disable the menu
add(iconButton);
add(maxButton);
add(closeButton);
}
}
【问题讨论】:
-
您需要编写自己的内部框架外观委托...
-
在对 LAF 进行了无数小时的研究之后,对于一个简单的需求来说,这似乎非常复杂。我浏览了一些库文件,这引起了更多的混乱。了解 Synth LAF 最容易吗?但是,我不想为所有组件提供 LAF。来自 wikipedia 的引用:但是,synth 不提供默认外观,并且未在 synth XML 文件中定义的组件将不会被绘制。但是,可以为所有其他小部件分配默认样式,并仅为某些特定小部件自定义样式。 - 但它没有解释如何。
标签: java eclipse swing jtabbedpane jinternalframe