它是非常基本的 UI,但我无法设置 JCheckBox
按钮,以便它们紧挨着另一个(垂直)放置,没有任何间距。我将如何减少下面看到的间距?
JPanel debugDrawPanel = new JPanel(new GridLayout(0,1));
JPanel eastPanel = new JPanel(new GridLayout(1,0));
JTabbedPane tab = new JTabbedPane();
click = new ClickPanel(this);
setSettings(new Settings());
for (Setting setting: getSettings().getAll()){
JCheckBox checkBox = new JCheckBox(setting.name);
checkBox.setName(setting.name);
checkBox.addItemListener(new CheckBoxItemListener(this));
debugDrawPanel.add(checkBox);
}
tab.addTab("Object Parameters", click);
tab.addTab("Debug Draw", debugDrawPanel);
最佳答案
看起来最小垂直尺寸是由另一个选项卡的内容设置的。解决这个问题的一种方法是在将带边框布局的面板放入选项卡式 Pane 之前,将 GridLayout
放在 BorderLayout
的 PAGE_START
中。
- 带有
GridLayout
的面板有一个橙色的 BG。 - 带有
BorderLayout
的面板有一个黄色的 BG。
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class TopAlignedComponents {
private JComponent ui = null;
TopAlignedComponents() {
initUI();
}
public void initUI() {
if (ui!=null) return;
ui = new JPanel(new BorderLayout(4,4));
ui.setBorder(new EmptyBorder(4,4,4,4));
JTabbedPane tb = new JTabbedPane();
ui.add(tb);
Image spacer = new BufferedImage(300, 100, BufferedImage.TYPE_INT_RGB);
tb.addTab("Spacer", new JLabel(new ImageIcon(spacer)));
String[] labels = {"Shapes", "Joints", "AABBs"};
JPanel checkPanel = new JPanel(new GridLayout(0, 1, 4, 4));
checkPanel.setBackground(Color.ORANGE);
for (String label : labels) {
checkPanel.add(new JCheckBox(label));
}
JPanel checkConstrain = new JPanel(new BorderLayout());
checkConstrain.setBackground(Color.YELLOW);
checkConstrain.add(checkPanel, BorderLayout.PAGE_START);
tb.addTab("Check", checkConstrain);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
TopAlignedComponents o = new TopAlignedComponents();
JFrame f = new JFrame("Top Aligned Components");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
关于java - 消除面板上复选框之间的巨大差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681607/