我在JTabbedPane中3个标签,我想有他们彼此相邻,就像这样: 如何设置JTabbed面板的宽度以适应标签
但是,我没有找到如何全自动设置JTabbedPane的宽度,从而使标签接下来会彼此适应,所以我只是tabs.setPreferredSize(new Dimension(210, 300));
更不用说问题了w ith重命名或添加/删除选项卡。
那么,有没有一种很好的方法来计算标签名称的宽度,然后传入setPrefferedSize()
方法,或者更好的方法是使用一些setWidthToFitTabs()
方法?
编辑:最小完整的例子:
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Tabs text");
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("Tab1", new JLabel("Content1"));
tabs.addTab("Tab2", new JLabel("Content2"));
tabs.addTab("Tab3", new JLabel("Content3"));
tabs.addTab("Tab4", new JLabel("Content4"));
for (int i = 0; i < tabs.getTabCount(); i++) {
System.out.println(tabs.getUI().getTabBounds(tabs, i));
}
frame.add(tabs);
frame.pack();
frame.setVisible(true);
});
结果:
java.awt.Rectangle[x=2,y=59,width=-8,height=19]
java.awt.Rectangle[x=2,y=40,width=-8,height=19]
java.awt.Rectangle[x=2,y=21,width=-8,height=19]
java.awt.Rectangle[x=2,y=2,width=49,height=19]
看是否有此主题帮助:http://stackoverflow.com/questions/9636601/tabs-at-固定位置在jtabbedpane或在一行 – Berger
感谢您的链接,一个可行的解决方案,最坏的情况。顺便说一句我已经尝试了'pane.getUI()。getTabBounds(pane,i).width',但它返回前-8个选项卡。只有第三个标签具有正确的'65'宽度。 – kajacx
请发布您的[mcve],证明您的问题。请参阅[我应该避免在Java Swing中使用setPreferred | Maximum | MinimumSize?](http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java -swi),普遍的共识是肯定的。我认为这是一个布局问题(或可能是空布局问题) – Frakcool