1

私はカエルのゲームをプログラミングしている学生です。カエルがオブジェクトに衝突するか、エンドゾーンに到達すると、スコアが増加するか、ライフが減少し、カエルは開始位置に戻ります。このセクションは機能し、コンソールに出力するときにデクリメントとインクリメントが機能します。変数を他のjpanelに渡してそこに表示しようとしましたが、textFieldに変数が更新および表示されません。

ゲームパネル

    public GamePanel() {
    super();
    setFocusable(true);
    addKeyListener(new KeyList());
    System.out.println("GAME PANE FOCUS:" + this.isFocusOwner());

    scores.setVisible(true);
    lives = p.STARTLIVES;
    scores.setCurrentLives(lives);
    txtTest.setText("Hello");
    txtTest.setVisible(true);
    add(scores,new AbsoluteConstraints(0,550,50,800));
    Boolean displayable = scores.isDisplayable();
    System.out.println("Displayable" + displayable);

    scores.setEnabled(false);
    scores.revalidate();
    scores.repaint();
    scores.setVisible(true);

    System.out.println("Displayable" + displayable);



   car1.start();
   car2.start();
   car3.start();
   car4.start();
   Log1.start();
   Log2.start();
   Log3.start();
   Log4.start();
   Log5.start();
   Log6.start();
   Log7.start();
   Log8.start();



    //check for collisions
}

final public void winZone(Rectangle object){

    if(myFrog.frogArea().intersects(object)){
        currentScore = currentScore + 100;
        System.out.println("current Score " + currentScore);
        p.setScore(currentScore);
        scores.myScore().setText("hello");

        myFrog.lostLife();
    }

スコアパネル

public class jplScores extends JPanel {
 Properties p = new Properties();
 int currentLives;
 int i;

/** Creates new form jplScores */
public jplScores() {
    initComponents();




}
public void setCurrentLives(int Lives){
 currentLives = Lives;
}
public String getCurrentLives(){
    String L = Integer.toString(currentLives);
    return L;
}


public JTextField myScore(){
    return txtScore;
}

現在、両方が入っているフレームからjpanelを表示しますが、パネル内のパネルになるように作成しようとしましたが、ゲームパネル内からパネルを表示できません。

どんな助けでも大いに感謝します

    public FroggerGame() {

    initComponents();
    setFocusable(true);
    //repaint();
   // p.setHeight(550);
   // p.setWidth(800);
   // p.setLives(3);
   // p.setScore(0);
    PANELHEIGHT = p.getHeight();
    PANELWIDTH = p.getWidth();
    welcomePanel();

    /*
    Toolkit tool = Toolkit.getDefaultToolkit();
    imgBackground = tool.getImage(imageBackground);
    background = new ImageIcon(imgBackground);
    //setDefaultCloseOperation(EXIT_ON_CLOSE);
    */

    jps.myScore().addPropertyChangeListener(new java.beans.PropertyChangeListener() {
        public void propertyChange(java.beans.PropertyChangeEvent evt) {
           // txtScorePropertyChange(evt);

    jps.myScore().setText(Integer.toString(gp.currentScore()));
    System.out.println(Integer.toString(gp.currentScore()));

    jps.getScore(gp.currentScore());
    System.out.println(" main score " + gp.currentScore());
        }
    });


}

...。

private void btnEnterActionPerformed(ActionEvent evt) {

    welcomePanel.setVisible(false);
    getContentPane().setLayout(new AbsoluteLayout());
    getContentPane().add(gp,new AbsoluteConstraints(0,0,800,550));
    getContentPane().add(jps,new AbsoluteConstraints(0,550,800,100));

    //gp.setSize(800, 550);
   // gp.setBounds(0, 0, 800, 550);
    gp.setVisible(true);
    gp.requestFocusInWindow();

    jps.setVisible(true);

gpはゲームパネル、jpsはスコアパネルです。

4

1 に答える 1

1

これは、「パネル」または Swing GUI コーディングとはほとんど関係がなく、すべて、あるクラスから別のクラスに情報を渡すという基本的な OOPS の問題と関係があります。これを解決する 1 つの方法は、Scores パネルに public メソッドを与えることです。

public void changeScore(int value) {
   // in here add the new value to the currently 
   // displayed value and display the new value.
}

次に、Scores パネルへの参照を持つメイン クラスで、このメソッドを呼び出して、スコアが増加する場合は 1 を、減少する場合は -1 を渡します。

私はこれを、あるクラスが情報を他のクラスにプッシュする「プッシュ」ソリューションと考えています。これを解決するもう 1 つの方法は、Scores クラスが他のクラスの重要なプロパティをリッスンし、適切なイベントが発生したときに独自のスコアを変更するリスナーを使用することです。これには多くの場合、PropertyChangeListeners または他の Swing 固有のリスナー クラスを使用する必要があります。これはより優れたソリューションである場合もありますが、少し高度な概念だと思います。

于 2012-04-22T14:27:38.630 に答える