3

JToolBar 内に JSeparator を表示するのに問題があります。私のツールバーは次のように作成されます:

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 に答える