このコードは、差し迫った問題 (Frame
とJApplet
表示) の両方を解決しますが、他の多くの問題は解決しません。
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();
}
}
アップデート
このコードは、ソース内の他の多くの問題を修正します。
- パネルで GUI を作成することにより、コードをアプレットまたはアプリケーションのいずれかとして実行できます (その後、いずれかに追加されます)。これは通常、ハイブリッド アプリケーション/アプレットと呼ばれます。
- フレームのサイズ (フレームの装飾を考慮しない) を設定しようとする代わりに、このコードはゲーム自体の推奨サイズを設定します。アプレットは HTML で幅/高さを指定します。
- 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();
}
}
}