此代码解决了两个直接问题(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();
}
}
}