为什么addSeparator()无法使用我的JToolBar?

时间:2010-07-07 17:26:05

标签: java swing layout jtoolbar

我无法让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);

}

任何想法都会非常感激,我一直试图让这个工作太久了>(

3 个答案:

答案 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)