【发布时间】:2012-03-15 23:23:26
【问题描述】:
我正在尝试增加标签内容的可用空间量。
如何在选项卡列表旁边放置一个菜单栏或等效项? (最好在选项卡的左侧,图片的对面)
【问题讨论】:
我正在尝试增加标签内容的可用空间量。
如何在选项卡列表旁边放置一个菜单栏或等效项? (最好在选项卡的左侧,图片的对面)
【问题讨论】:
您可以使用 jide 的 JideTabbedPane。
Jide 是商业库,但是这个 JideTabbedPane 类是开源的,在这里获取源代码:http://java.net/projects/jide-oss/
截图如下。
【讨论】:
不,不覆盖整个 BacisTabbedPaneUI 直接不可能,所有示例都是各种质量(外观和原生操作系统非常敏感),very good example by aephyr,
我的观点 JTabbedPane 是 *** JComponent,实现 GlassPane 的有趣示例(您为 JMenuBar 设置了一些边框,例如凸起的蚀刻和线条边框??? :-)
疯狂而肮脏的黑客攻击
来自代码
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public class TabbedPaneWithManuBar {
public void makeUI() {
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
for (int i = 0; i < 20; i++) {
JPanel panel = new JPanel();
panel.setName("tab" + (i + 1));
panel.setPreferredSize(new Dimension(600, 100));
tabbedPane.add(panel);
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tabbedPane);
frame.pack();
Rectangle tabBounds = tabbedPane.getBoundsAt(0);
Container glassPane = (Container) frame.getRootPane().getGlassPane();
glassPane.setVisible(true);
glassPane.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.NONE;
gbc.insets = new Insets(tabBounds.y + 23, 0, 0, 5);
gbc.anchor = GridBagConstraints.NORTHEAST;
JMenuBar menuBar = new JMenuBar();
menuBar.add(createMenu("Menu Example 1"));
menuBar.add(createMenu("Menu Example 1"));
menuBar.add(createMenu("Menu Example 1"));
menuBar.add(Box.createHorizontalGlue());
menuBar.add(createMenu("About"));
menuBar.setPreferredSize(new Dimension(menuBar.getPreferredSize().width , (int) tabBounds.getHeight() - 2));
glassPane.add(menuBar, gbc);
//JButton button = new JButton("My Button Position");
//button.setPreferredSize(new Dimension(button.getPreferredSize().width, (int) tabBounds.getHeight() - 2));
//glassPane.add(button, gbc);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JMenu createMenu(String title) {
JMenu m = new JMenu(title);
m.add("Menu item #1 in " + title);
m.add("Menu item #2 in " + title);
m.add("Menu item #3 in " + title);
if (title.equals("About")) {
m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
return m;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TabbedPaneWithManuBar().makeUI();
}
});
}
}
【讨论】: