import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.*;import java.awt.event.*;
public class lll extends JFrame
implements ActionListener
{
private int radius;//半径
private int number;//所画点的数目
private int degree;//规则网络的度数
private Container c;
private JLabel labela;
private JLabel labelb;
private JLabel labeld;
private JTextField  tfa;
private JTextField  tfb;
private JTextField  tfd;
private JButton button3;
private JButton button4;
private int a,b,d;
private final double PI=3.141592;
public JPanel pane= new JPanel(){
public void paint(Graphics g)
{
double x;
double y;//g.drawOval(0,0,2*radius,2*radius);//画圆函数
double xy[][]=new double[number][2];
for(int i=0;i<number;i++)
{
x=radius+Math.cos((float)i/number*2*PI)*radius;
y=radius-Math.sin((float)i/number*2*PI)*radius;
xy[i][0]=x;
xy[i][1]=y;
//System.out.println("i="+i+" x="+x+" y="+y);
g.drawOval((int)x,(int)y,5,5);
//g.fillOval((int)x-5,(int)y+5,5,5);
}
for(int i=0;i<number;i++){
for(int j=1;j<=degree/2;j++){
g.drawLine((int)xy[i][0],(int)xy[i][1],(int)xy[(i+j)%number][0],(int)xy[(i+j)%number][1]);
}
}
};
};lll(int r,int n,int m){
radius=r;
number=n;
degree=m;
getContentPane().add(pane);
}
lll(){
c=getContentPane();
c.setLayout(new FlowLayout(FlowLayout.CENTER));
labela=new JLabel("请输入规则网络中的半径");
labelb=new JLabel("请输入规则网络中的结点数");
labeld=new JLabel("请输入规则网络中的度");
tfa=new JTextField("",10);
tfb=new JTextField("",10);
tfd=new JTextField("",10);
button3=new JButton("OK");
button4=new JButton("CANCLE");
//c.add(pane);
c.add(labela);
c.add(tfa);
c.add(labelb);
c.add(tfb);
c.add(labeld);  
c.add(tfd);
c.add(button3);
c.add(button4);
setVisible(true);//必须添加,否则无法正常显示
tfa.addActionListener(this);
tfb.addActionListener(this);
tfd.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);}public void actionPerformed(ActionEvent e){
if(e.getSource()==button3){
a=(int)Double.parseDouble(tfa.getText());
b=(int)Double.parseDouble(tfb.getText());
d=(int)Double.parseDouble(tfd.getText());
lll ren=new lll(a,b,d);
ren.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ren.setTitle("规则网络画图程序");
ren.setSize(700,600);
//ren.show();
}
if(e.getSource()==button4){
tfa.setText("");
tfb.setText("");
tfd.setText("");
}

}public static void main(String[] args) {
lll f= new lll();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("规则网络画图程序");
//f.setSize(JFrame.MAXIMIZED_HORIZ,JFrame.MAXIMIZED_VERT);
f.setSize(700,600);
f.show();
}
}为什么paint方法无法执行?怎么修改?
非常感谢。

解决方案 »

  1.   

    1、使用规范的类命名方式,即:包含一个或多个完整的单词,每个单词第一个字母大写。
    2、不要使用show()方法,改用setVisible(true)。
    3、“CANCEL”写错了,写成了“CANCLE”。
    4、在ren.setSize(700,600);后面加上 ren.setVisible(true);即可。
      

  2.   

    太感谢了。我想关键问题是4,对吧?
    能不能多问点,为什么一般不用show方法?