import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class MyPatternPrinter extends JFrame { private static final long serialVersionUID = -5822694943140359820L;
MyPatternPanel panel;
JTextField patternTextField;

public MyPatternPrinter() {
super("My Pattern Printer"); } public void go() {

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new MyPatternPanel(); this.getContentPane().add(BorderLayout.CENTER, panel);

patternTextField = new JTextField(16);
JButton fillButton = new JButton("Fill");

JPanel controlPanel = new JPanel();
controlPanel.setLayout(new BorderLayout());
controlPanel.add(BorderLayout.WEST, new JLabel("Pattern: "));
controlPanel.add(BorderLayout.CENTER, patternTextField);
controlPanel.add(BorderLayout.EAST, fillButton); this.getContentPane().add(BorderLayout.SOUTH, controlPanel);
fillButton.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent arg0) {

panel.setPattern(patternTextField.getText());
panel.repaint();
}

});

this.setSize(300, 200);
this.setVisible(true);

}
public static void main(String [] args) { MyPatternPrinter myPatternPrinter = new MyPatternPrinter();
myPatternPrinter.go();
}
public class MyPatternPanel extends JPanel {
/**
 * 
 */
private static final long serialVersionUID = -6653258875268598457L;
int row = 0;
int column = 0;

public MyPatternPanel() {
this.setBackground(Color.WHITE);
}
public void setPattern(String pattern) {
try {
String [] numbers = pattern.split(",");
int rowvalue = Integer.parseInt(numbers[0]);
int colvalue = Integer.parseInt(numbers[1]);
this.row = rowvalue;
this.column = colvalue;
} catch (NumberFormatException nfe) {
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
// g.fillOval(10, 10, 10, 10);
for(int i=0; i<row; ++i)
for(int j=0; j<column; ++j)
g.drawOval(j*20, i*20, 20, 20);

}
}

}

解决方案 »

  1.   

    这个比你那个容易一点,这个改了就好了,没有遗留症。import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class MyPatternPrinter extends JApplet { private static final long serialVersionUID = -5822694943140359820L;
    MyPatternPanel panel;
    JTextField patternTextField; @Override
    public void init() {
    go();
    } public void go() { panel = new MyPatternPanel(); this.getContentPane().add(BorderLayout.CENTER, panel); patternTextField = new JTextField(16);
    JButton fillButton = new JButton("Fill"); JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new BorderLayout());
    controlPanel.add(BorderLayout.WEST, new JLabel("Pattern: "));
    controlPanel.add(BorderLayout.CENTER, patternTextField);
    controlPanel.add(BorderLayout.EAST, fillButton); this.getContentPane().add(BorderLayout.SOUTH, controlPanel);
    fillButton.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent arg0) { panel.setPattern(patternTextField.getText());
    panel.repaint();
    } }); this.setSize(300, 200);
    this.setVisible(true); } public class MyPatternPanel extends JPanel {
    /**
    *  
    */
    private static final long serialVersionUID = -6653258875268598457L;
    int row = 0;
    int column = 0; public MyPatternPanel() {
    this.setBackground(Color.WHITE);
    } public void setPattern(String pattern) {
    try {
    String[] numbers = pattern.split(",");
    int rowvalue = Integer.parseInt(numbers[0]);
    int colvalue = Integer.parseInt(numbers[1]);
    this.row = rowvalue;
    this.column = colvalue;
    } catch (NumberFormatException nfe) {
    }
    } public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLACK);
    // g.fillOval(10, 10, 10, 10);
    for (int i = 0; i < row; ++i)
    for (int j = 0; j < column; ++j)
    g.drawOval(j * 20, i * 20, 20, 20); }
    }}讲解和那边差不多:
    改动的第一点:将JFrame父类改为JApplet父类,JApplet也是Swing包中的类,如果改成Applet父类,那就是AWT中的类,改动量就会大一点。
    改动的第二点:JApplet不需要main方法来运行它,浏览器负责调用Applet的init方法来初始化Applet。Init方法中,需要将原先在main方法中调用的go方法调用一下。
    改动的第三点:JApplet是浏览器来关闭它,不需要自己关闭自己,所以关闭相关的代码可以删除。