2
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();
                }
            }
        });
    }
}

これでやりたいことは、基本的な車の形をした 2 つの CarPanels を作成し、両方を 600X200 にして、オブジェクト全体が見えるように適切に配置することです。その下に、さまざまなことを行うさまざまなボタンの束を含むパネルを貼り付けたいと思います。ここでの問題は、車が完全に見える十分なスペースがなく、別のレイアウト マネージャーを使用しても効果がないことです。

編集

多数の変更を行った後、このコードは期待どおりに機能しません。この時点で、最初の車のみが表示され、開始車のボタンはフレームの上部にあります。

4

3 に答える 3

2

frame.pack をご覧ください: http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#pack%28%29 - ウィンドウのサイズを設定して、その内容の好ましいサイズに適合します。

フレームのコンテンツに適切なサイズが設定されている場合は、単に呼び出します

frame.pack();

それ以外の

frame.setSize(600,480);

あなたのアプリケーションで - それはうまくいくはずです。

編集:コードのもう 1 つの問題は、おそらく間違ったレイアウト マネージャーを使用していることです。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);
    }
}
于 2012-11-13T10:15:16.310 に答える
1

JFrame のpack メソッドを使用してみてください。

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

    frame.pack();
    //...rest of code
  }
}
于 2012-11-13T10:15:49.767 に答える
-1

setSize setMinimumSize setMaximumSize や setPreferredSize などのメソッドについては、 APIを参照してください。

于 2012-11-13T10:15:27.370 に答える