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并且间隔正确以便可以看到完整的对象。在那之下,我想用一堆不同的按钮来粘贴面板,这些按钮可以做不同的事情。在这里我的问题是汽车永远没有足够的空间可以完全看到,并且使用不同的布局管理器没有帮助。
修改
经过多次更改后,此代码无法正常运行。此时,第一辆车是唯一显示的车,并且起动车按钮位于车架的顶部。
答案 0 :(得分:2)
看看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);
}
}
答案 1 :(得分:1)
尝试使用JFrame的pack method。
public static void main(String[] args) {
CarFrame frame = new CarFrame();
frame.setPreferredSize(new Dimension(600,480));
frame.setLocationRelativeTo(null);
frame.pack();
//...rest of code
}
}
答案 2 :(得分:-1)
有关setSize setMinimumSize setMaximumSize和setPreferredSize
等方法,请参阅API