2017-11-25 9 views
1

JSeparatorをツールバーのセクションの間に配置したいと思います。セパレータは、これを追加すると表示されます。JSeparatorは長い空白を作成します

toolbar.add(radioButtonDDA, BorderLayout.NORTH); 
     toolbar.add(radioButtonPolygon, BorderLayout.NORTH); 
     toolbar.add(new JSeparator(1)); 
     toolbar.add(radioButtonseedFill, BorderLayout.NORTH); 
     toolbar.add(radioButtonScanLine, BorderLayout.NORTH); 
     toolbar.add(patternCheckBox, BorderLayout.NORTH); 
     toolbar.add(buttonClear, BorderLayout.NORTH); 

ただし、セパレータの後ろに空白スペースも作成されます。どのようにスペースを取り除くには?

toolbar space

答えて

1

代わり直接JSeparatorを使用する、JSeparatorは 区切り線を実装するための汎用的なコンポーネントを提供JavaDocs

から支持

に内蔵JToolBar Sを利用する - ほとんどそれらを論理グループに分割するメニュー項目 の間のディバイダとして一般的に使用されます。 JSeparatorを直接使用する代わりに、JMenuまたはJPopupMenu addSeparator メソッドを使用してセパレータを作成して追加することができます。

Separator

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JToolBar; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JToolBar toolbar = new JToolBar(); 
       toolbar.add(new JRadioButton("One")); 
       toolbar.add(new JRadioButton("Two")); 
       toolbar.addSeparator(); 
       //toolbar.add(new JSeparator(JSeparator.VERTICAL)); 
       toolbar.add(new JRadioButton("Three")); 
       toolbar.add(new JRadioButton("Four")); 
       toolbar.add(new JRadioButton("Five")); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(toolbar, BorderLayout.NORTH); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      add(new JLabel("Just here to fill space")); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 

} 

しかし、なぜ(それがこれを行うん)?

私はこの問題について深くは掘り下げていませんが、レイアウトマネージャはセパレータの最大サイズプロパティを使用して、コンポーネントのレイアウトを最適化する方法を決定していると推測します。それは残りのスペースを提供しています...これはおそらくJToolBarがそれ自身のセパレータをサポートしています

+0

完璧、ありがとう – nousicek

関連する問題