gpt4 book ai didi

java - 如何强制 JFrame 为组件留出一定的空间?

转载 作者:行者123 更新时间:2023-11-30 09:30:11 25 4
gpt4 key购买 nike

public class n00767255 {
public static void main(String[] args) {
CarFrame frame = new CarFrame();
frame.setSize(600,480);
frame.setLocationRelativeTo(null);

frame.setVisible(true);

while(true)
{
frame.repaint();
}
}
}

class CarFrame extends JFrame {
CarFrame() {
setLayout(new GridLayout(3,1));

final CarPanel car1 = new CarPanel();
car1.initCar(10,50,2,150,70,40);
add(car1);

final CarPanel car2 = new CarPanel();
car2.initCar(10,50,2,150,70,40);
add(car2);

JButton startCar1 = new JButton("Start Car 1");

JPanel panel = new JPanel();
panel.setSize(600,40);
panel.add(startCar1);

add(panel);

startCar1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(!car1.getMovingF())
{
car1.modifyMovingF();
}
}
});
}
}

我想要做的是创建两个具有基本汽车形状的 CarPanel,并将它们都设置为 600X200 并适当间隔,以便可以看到完整的对象。在此之下,我想用一堆不同的按钮来粘贴面板,这些按钮可以做不同的事情。我的问题是汽车从来没有足够的空间可以完全看到,使用不同的布局管理器也无济于事。

编辑

经过多次更改后,这段代码根本无法按我预期的方式工作。此时,第一辆车是唯一显示的,启动车按钮位于框架的顶部。

最佳答案

查看 frame.pack:http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#pack%28%29 - 它设置窗口的大小,使其适合其内容的首选大小。

如果框架的内容具有正确设置的首选大小,只需调用

frame.pack();

代替

frame.setSize(600,480);

在您的应用程序中 - 这应该可以解决问题。

编辑:您的代码的另一个问题是您可能使用了错误的布局管理器。 GridLayout 创建一个规则的网格,这意味着所有的单元格都具有相同的大小。您应该尝试支持更灵活的单元格大小的布局,例如 JGoodies FormLayout 或 MigLayout。

我已经使用以下 CarPanel 实现尝试了您的代码,GridLayout 似乎忽略了它的子项的大小:

private class CarPanel extends JPanel {
public CarPanel() {
setBorder(BorderFactory.createLineBorder(Color.BLACK));
}

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

关于java - 如何强制 JFrame 为组件留出一定的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com