我无法让JSeparator显示在JToolBar内部。我的工具栏创建如下:
public class ToolBar extends JToolBar {
super();
FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 10, 5);
setLayout(layout);
add(new JButton("Button 1"));
addSeparator();
add(new JButton("Button 2"));
add(new JButton("Button 3"));
addSeparator();
// Show
setVisible(true);
setFloatable(false);
}
任何想法都会非常感激,我一直试图让这个工作太久了>(
答案 0 :(得分:4)
在那里尝试代码,当我调用addSeparator()
方法时,它会在按钮之间创建一个空格,但没有可见的分隔线。
但如果我将方法更改为addSeparator(new Dimension(20,20))
,则会创建可见的分隔线。
问题可能是默认的外观会创建一个高度为1的分隔符,因此您将无法看到它。
我在Mac OSX上运行它。
答案 1 :(得分:2)
你遇到的最大问题是没有必要对JToolBar进行子类化并在其上设置布局。只需创建一个实例并开始添加按钮和分隔符。
一般情况下,Swing团队不建议对Swing组件进行子类化。
您的代码应如下所示:
JToolBar t = new JToolbar();
t.add(new JButton("Button 1"));
t.addSeparator();
t.add(new JButton("Button 2"));
t.add(new JButton("Button 3"));
t.addSeparator();
// Show
t.setVisible(true);
t.setFloatable(false);
最后的建议是不要使用按钮。使用行动。这样,可以在工具栏,菜单等上使用相同的操作。有关详情,请访问http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html
<强>更新强> 工具栏分隔符的外观取决于您正在使用的LAF。
答案 2 :(得分:0)
我遇到了同样的问题。我发现根本原因是由最大尺寸造成的。
调整后,它变得正常。
// ---------------------------------------
// debug below:
// ---------------------------------------
JSeparator separator = new JSeparator(JSeparator.VERTICAL);
System.err.println("getMaximumSize(): " + separator.getMaximumSize());
System.err.println("getMinimumSize(): " + separator.getMinimumSize());
separator.setMaximumSize(new Dimension(2, separator.getMaximumSize().height));
// ---------------------------------------
// real sample below
// ---------------------------------------
// adds a vertical space bar
toolBar.add(Box.createHorizontalStrut(5));
// adds a vertical separator
JSeparator separator = new JSeparator(JSeparator.VERTICAL);
Dimension maximumSize = separator.getMaximumSize();
maximumSize.width = 2;
separator.setMaximumSize(maximumSize); // Important! Update it!
toolBar.add(separator);
// adds a vertical space bar
toolBar.add(Box.createHorizontalStrut(5));
by TJ Tsai(tsungjung411@yahoo.com.tw)