-1

私はもぐらゲームに取り組んでいます。モグラの絵が描かれたボタンがあり、モグラのボタンをクリックするとポイントがもらえます。まだ完了していません。最初のボタンを表示しようとしていますが、java.lang.reflect.invocationtargetexception実行しようとするとエラーが発生します。どんなアイデアでも大歓迎です。

import java.awt.event.*;    
import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class topos extends JApplet implements ActionListener{
       JLabel puntaje;
       JButton topo;
       Container c;
       int contador=0;

public topos(){
    Frame f = new Frame ("El famoso juego de los topos");
    f.add("center", this);
    f.setSize (900,300);
    f.setVisible(true);
    }
public void init(){
    c = getContentPane();
    topo = new JButton (new ImageIcon("topo.jpg"));
    puntaje = new JLabel("0");
    topo.addActionListener(this);
    c.add("center",topo);
}
public void actionPerformed(ActionEvent e){
    JButton b = (JButton)e.getSource();
    try {
        if (b == topo){
        contador = contador + 1;
        puntaje.setText(" " + contador );
        }

    }
    catch (Exception f){
        f.printStackTrace();
    }
    }


public static void main (String s[]){
    topos t = new topos();
    t.init();
    t.start();  

}

    }
4

1 に答える 1

2

このコードは、差し迫った問題 (FrameJApplet表示) の両方を解決しますが、他の多くの問題は解決しません。

import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class topos extends JApplet implements ActionListener{
    JLabel puntaje;
    JButton topo;
    Container c;
    int contador=0;

    public topos(){
        Frame f = new Frame ("El famoso juego de los topos");
        f.add(this, BorderLayout.CENTER);
        f.setSize (900,300);
        f.setVisible(true);
    }

    public void init(){
        c = getContentPane();
        topo = new JButton (new ImageIcon("topo.jpg"));
        puntaje = new JLabel("0");
        topo.addActionListener(this);
        c.add(topo, BorderLayout.CENTER);
    }

    public void actionPerformed(ActionEvent e){
        JButton b = (JButton)e.getSource();
        try {
            if (b == topo){
                contador = contador + 1;
                puntaje.setText(" " + contador );
            }
        }
        catch (Exception f){
            f.printStackTrace();
        }
    }

    public static void main (String s[]){
        topos t = new topos();
        t.init();
        t.start();
    }
}

アップデート

このコードは、ソース内の他の多くの問題を修正します。

  1. パネルで GUI を作成することにより、コードをアプレットまたはアプリケーションのいずれかとして実行できます (その後、いずれかに追加されます)。これは通常、ハイブリッド アプリケーション/アプレットと呼ばれます。
  2. フレームのサイズ (フレームの装飾を考慮しない) を設定しようとする代わりに、このコードはゲーム自体の推奨サイズを設定します。アプレットは HTML で幅/高さを指定します。
  3. Swing ベースのコンポーネントのみを使用します。

import java.awt.event.*;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Color;
import java.applet.*;
import javax.swing.*;

public class topos extends JApplet {

    public void init(){
        getContentPane().add(new WhackAMoleGUI(), BorderLayout.CENTER);
    }

    public static void main (String s[]){
        JFrame f = new JFrame ("El famoso juego de los topos");
        f.add( new WhackAMoleGUI(), BorderLayout.CENTER );
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }
}

class WhackAMoleGUI extends JPanel implements ActionListener {

    final Dimension preferredSize = new Dimension(400, 200);
    JLabel puntaje;
    JButton topo;
    int contador=0;

    WhackAMoleGUI() {
        setLayout(new FlowLayout());
        topo = new JButton (new ImageIcon("topo.jpg"));
        add(topo);
        puntaje = new JLabel("0");
        add(puntaje);
        topo.addActionListener(this);
        setBackground(Color.YELLOW);
    }

    @Override
    public Dimension getPreferredSize() {
        return preferredSize;
    }

    public void actionPerformed(ActionEvent e){
        JButton b = (JButton)e.getSource();
        try {
            if (b == topo){
                contador = contador + 1;
                puntaje.setText(" " + contador );
            }
        }
        catch (Exception f){
            f.printStackTrace();
        }
    }
}
于 2013-02-23T04:22:30.577 に答える