我想把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);但是,它还会在分隔符后面创建一个空白。如何摆脱这个空间?

发布于 2017-11-26 00:01:29
与其直接使用JSeparator,不如使用内置于支持中的JToolBar
来自JavaDocs
JSeparator提供了实现分隔线的通用组件--最常用的是作为菜单项之间的分隔器,将菜单项分解为逻辑分组。与直接使用JSeparator不同,您可以使用JMenu或JPopupMenu addSeparator方法来创建和添加分隔符。

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支持它自己的分隔符
https://stackoverflow.com/questions/47490954
复制相似问题