我正在寻找JApplet的宽度和高度。我尝试了不同的方法,并寻找了一个答案,但还没有找到答案。

以下是代码的主要部分:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.Timer;

public class Main extends JApplet implements ActionListener {
    private static final long serialVersionUID = 1L;

    Timer timer;
    public int x, y, width = 40, height = 40;

    public void init() {
        Painter painter = new Painter();
        JApplet component = new JApplet();
        x = (component.getWidth())/2 - (width/2) - 20;
        y = (component.getHeight())/2 - (height/2) - 40;

        painter.setBackground(Color.white);
        setContentPane(painter);
        setSize(1000, 500);
    }

    public void start() {
        if (timer == null) {
            timer = new Timer(100, this);
            timer.start();
        } else {
            timer.restart();
        }
    }

    public void stop() {
        if (timer != null) {
            timer.stop();
            timer = null;
        }
    }

    public void actionPerformed(ActionEvent ae) {
        repaint();
    }
}


以下是画圆的代码:

import java.awt.Graphics;
import javax.swing.JPanel;

public class Painter extends JPanel {
    private static final long serialVersionUID = 2L;

    Main m = new Main();

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawOval(m.x, m.y, m.width, m.height);
    }
}


上面的代码仍在JApplet0,0框架的右上角生成圆,但是应该在中间。

最佳答案

问题从这里开始。

Main m = new Main();


这是一个新的applet,从不显示在屏幕上,并且默认情况下大小为0 x 0像素。

正确的方法是完全忽略父容器。所有相关的是在其中进行自定义绘画的面板的大小。所以..

 g.drawOval(m.x, m.y, m.width, m.height);


应该:

g.drawOval(0, 0, getWidth(), getHeight());


关于小程序:


为什么要编写小程序?如果是由于老师指定的原因,请参考Why CS teachers should stop teaching Java applets
请参见Java Plugin support deprecatedMoving to a Plugin-Free Web


其他提示:


任何applet都不应尝试自行调整大小。大小是在启动它的HTML中设置的,因此请删除此行。

setSize(1000, 500);

这四个属性都在applet的Component超级类中定义。小程序继承它们。不要重新定义它们,因为这只会引起混乱。如果默认属性提供了所需的信息,请使用它们。如果不是,则用不同的名称命名。考虑到他们似乎参与绘制圆,我建议circleXcircleYcircleWidthcircleHeight

public int x, y, width = 40, height = 40;

09-11 05:35