1

gamePanel の getWidth メソッドを使用してラケットを配置したいのですが、0 が返されます。フレームでは問題なく機能し、パネルでも機能しましたが、多くのコードを書き直すことにし、今ではできません。それを機能させます。助けていただければ幸いです:)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Oppgave1 extends JFrame {

    public static void main(String[] args) {
        JFrame frame = new Oppgave1();
        frame.setTitle("Oppgave 1");
        frame.setSize(600, 400);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private JLabel jlbBallCount = new JLabel("Ballcount");
    private JLabel jlbTimer = new JLabel("Timer");
    private JButton jbtNewBall = new JButton("New Ball");

    private Racket racket;
    private Ball ball;

    public Oppgave1() {

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(jlbBallCount);
        buttonPanel.add(jlbTimer);
        buttonPanel.add(jbtNewBall);

        JPanel gamePanel = new JPanel();    
        gamePanel.add(racket = new Racket (100, 60));
        gamePanel.add(ball = new Ball(10, 3, racket));

        this.add(gamePanel, BorderLayout.CENTER);
        this.add(buttonPanel, BorderLayout.SOUTH);
    }

    public void paint(Graphics g){
        racket.draw(g);
        ball.draw(g);
    }
}
4

1 に答える 1

2
  1. JFrame の paint() メソッドをオーバーライドしないでください。

  2. ラケットとボールをゲーム パネルに追加しました。ゲーム パネルは、これらのコンポーネントを自動的に描画します。

  3. これらのコンポーネントを移動できるようにする場合は、レイアウトを null に設定し、最初にコンポーネントの境界を設定する必要があります。次に、コンポーネントを移動したい場合は setLocation() メソッドを呼び出すだけで、Swing はコンポーネントを新しい位置にペイントします。

于 2013-02-21T04:34:29.150 に答える