3

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

}

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

4

3 回答 3

4

在那里尝试您的代码,当我调用该addSeparator()方法时,它会在按钮之间创建一个空间,但没有可见的分隔线。

但是,如果我将方法更改为addSeparator(new Dimension(20,20))它,则会创建可见的分隔线。

问题可能是默认外观创建了一个高度为 1 的分隔符,因此您将无法看到它。

我在 Mac OSX 上运行它。

于 2010-07-07T18:35:07.230 回答
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。

于 2010-07-07T19:14:29.607 回答
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));

作者 TJ Tsai (tsungjung411@yahoo.com.tw)

于 2014-12-14T15:49:10.987 回答