我想知道是否可以在JButton
中设置GridBagLayout
组件的大小,我想要按钮"开始"和"退出"彼此之间,我想让它们更大,尺寸无关紧要,我想知道一般程序。
我尝试了在互联网上找到的不同的东西(使用其他布局),但结果却出现了更多的错误。
public class Display implements Runnable
{
public Display()
{
}
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setPreferredSize(new Dimension(500,700));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createComponents(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
private void createComponents(Container cont)
{
GridBagLayout pane = new GridBagLayout();
JButton button1 = new JButton("Start");
JButton button2 = new JButton("Quit");
button1.setSize(new Dimension(200,200));
button1.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
cont.setLayout(pane);
cont.add(button1);
cont.add(button2);
}
public static void main(String[] args)
{
Display d = new Display();
SwingUtilities.invokeLater(d);
}
}
答案 0 :(得分:2)
如 Hovercraft Full Of Eels 所述,这非常适合单列GridLayout
。网格布局使所有组件的大小相同。提供一些布局组件间距,并在包含按钮的面板上添加一个较大的空边框,然后完成作业。
..我想让它们(按钮)更大
有许多方法可以使按钮更大。例如
setMargin(Insets)
以在文字周围添加更多空间。 第3和第4种方式非常武断。
此示例使用前两个,以及按钮周围的空边框,以提供更多的空白区域。
检查代码中的注释以获取详细信息。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class ButtonColumnLayout {
private JComponent ui = null;
String[] labels = {"Start", "Stop", "Quit"};
// adjust numbers to change spacing between button text and button edge
Insets insets = new Insets(10,40,10,40);
ButtonColumnLayout() {
initUI();
}
public void initUI() {
if (ui!=null) return;
// adjust last two numbers to change spacing between buttons
ui = new JPanel(new GridLayout(0, 1, 10, 10));
// adjust numbers to change border around buttons
ui.setBorder(new EmptyBorder(40,100,40,100));
for (String s : labels) {
ui.add(getBigButton(s));
}
}
private final JButton getBigButton(String text) {
JButton b = new JButton(text);
// adjust float value to change font size
b.setFont(b.getFont().deriveFont(25f));
b.setMargin(insets);
return b;
}
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) {
}
ButtonColumnLayout o = new ButtonColumnLayout();
JFrame f = new JFrame(o.getClass().getSimpleName());
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);
}
}