我正在尝试创建一个小程序,它将生成与文本框中指定的数量一样多的椭圆。文本框出现,但按 Enter 键后,我的 PaintComponent 未绘制。预先感谢您。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.miginfocom.layout.*;
import net.miginfocom.swing.MigLayout;
import java.awt.geom.*;
public class OvalDrawer extends JApplet
{
private JLabel numberL;
private JTextField numberTF;
private NumHandler numHandler;
public static final int WIDTH = 500;
public static final int HEIGHT = 500;
//Create Layout
public void init()
{
setLayout(new MigLayout("wrap 2"));
numberL = new JLabel("Enter number of ovals to draw:");
numberTF = new JTextField(7);
add(numberL);
add(numberTF);
numHandler = new NumHandler();
numberTF.addActionListener(numHandler);
setSize(500, 500);
}
//Event Handler
public class NumHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
repaint();
}
}
//Draw Ovals
public void paintComponent (Graphics g)
{
super.paintComponents(g);
int number;
int x = 10;
int y = 30;
int width = 20;
int height = 10;
number = Integer.parseInt(numberTF.getText());
for (int i = 0; i < number; i++)
{
g.drawOval(x, y, width, height);
x += 5;
y += 5;
width += 5;
height += 5;
}
}
}
最佳答案
JApplet 类没有要重写的paintComponent 方法。请注意,您的编译器不会让您调用实际的 super 方法(您认为您可能正在这样做,但实际上您正在调用 super.paintComponents(...)
,一个完全不同的方法) .
一个糟糕的解决方案是重写 JApplet 的绘制方法,但我强烈建议您不要这样做。相反,您应该在 JPanel 的 PaintComponent 方法中进行绘制,然后让 JApplet 显示该 JPanel。此外,您还需要养成使用 @Override
注释的习惯,以确保您确实重写了您认为的方法。
关于java - 在 Applet On Event 中使用 PaintComponent 进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707942/